Вопрос или проблема
У меня всё работает в моём виджете, кроме результатов! Я создал таксономию, называемую “названия стран”, которую мы используем для нескольких пользовательских типов постов. Я создал этот виджет для отображения туристических гидов (CPT) из выбранной страны.
Виджет работает корректно на серверной части, но я не получаю результатов на клиентской части (например, “Список не найден”). Я вывел $instance на экран, и он корректный, так что мои args или query должны быть неверными. Может кто-то сказать, почему?
Вот код:
function widget($args, $instance) {
extract($args);
$title = apply_filters('widget_title', $instance['title']);
$thiscountry = $instance['thiscountry'];
$before_widget="';
echo $before_widget;
if ($title) {
echo $before_title . $title . $after_title;
}
$this->getTourGuides($thiscountry);
echo $after_widget;
}
function getTourGuides($thiscountry) { //html
global $post;
$args = array(
'posts_per_page' => -1,
'post_type' => array('tourguides'),
'tax_query' => array(
array(
'taxonomy' => 'countryname',
'field' => 'name', // также пробовал 'slug'
'terms' => $thiscountry,
),
),
);
//echo $thiscountry;
$listings = new WP_Query($args);
if($listings->found_posts > 0) {
echo 'Список не найден
';
}
}
';
wp_reset_postdata();
} else {
echo '
Код для instance:
// конструктор
function __construct() {
parent::__construct(
'btn_tour_guides_by_country', // Base ID
'BTN Tour Guides by Country', // Имя
array('description' => __( 'Отобразить список гидов по странам в боковой панели'))
);
}
function update($new_instance, $old_instance) {
$instance = $old_instance;
$instance['title'] = strip_tags($new_instance['title']);
$instance['thiscountry'] = strip_tags($new_instance['thiscountry']);
return $instance;
}
// создание формы виджета
function form($instance) {
if($instance) {
$title = esc_attr($instance['title']);
$thiscountry = esc_attr($instance['thiscountry']);
} else {
$title="Операторы туров";
$thiscountry = '';
}
?>
Я нашел ответ здесь. У них была точно такая же проблема:
Использование tax_query меняет аргумент post_type в пользовательском WP_Query
Это проблема с плагином Easy Content Types. Pippin, автор этого плагина, написал следующее: Проблема вызвана функцией в плагине, которая помогает разрешить 404 ошибки архивов таксономии. У этой функции есть несколько проблем, и из-за них есть настройка для отключения функции. Перейдите в Типы контента > Настройки и установите "Отключить исправление архива таксономии". – Pippin 11 мая '12 в 0:03
Ответ или решение
Конечно! Вот подробное решение вашей проблемы с WP_Query в вашем пользовательском виджете WordPress.
Основные этапы решения проблемы
Определение проблемы
Вы описали, что создаете виджет для отображения тургидов с использованием пользовательского типа записи (CPT) и таксономии "country names". Весь функционал работает корректно в бэкэнде, но на фронтенде вы получаете сообщение "No listing found". Вы сомневаетесь в правильности ваших аргументов для WP_Query.
Анализ кода
Ваш код содержит несколько критических компонентов, которые влияют на работу WP_Query:
-
Аргументы WP_Query:
Вы используетеtax_query
для фильтрации записей типаtourguides
по таксономииcountryname
. Вы проверили, что переменная$instance
соответствует ожидаемому значению. -
Вывод Query:
Убедитесь, что таксономия и термин корректно установлены для всех публикаций типаtourguides
, которые вы пытаетесь вывести. В вашем случае, вы используете название, а неslug
термина. Убедитесь, что используемых терминов в вашем коде соответствует их реальным названиям в админ-панели WordPress.
Возможные решения
-
Проверка ввода:
Убедитесь, что все записиtourguides
имеют корректно заполненные поля для таксономииcountryname
. Используйте админ-панель WordPress для ручной проверки. -
Диагностика таксономии:
Выполните дамп (var_dump
) вашего массива аргументов$args
, чтобы убедиться, что все значения корректны. Это поможет в анализе того, как WP_Query интерпретирует ваш запрос. -
Решение проблемы плугина:
Вы отметили, что проблема может быть связана с плагином Easy Content Types. Воспользуйтесь рекомендацией его автора - попробуйте отключить функцию "Disable Taxonomy Archive Fix" в настройках плагина: перейдите в меню Content Types → Settings и установите отметку.
Заключение
Если после проверки и внесения предложенных изменений проблема остается, вам стоит проверить наличие обновлений для используемых плагинов и возможно временно деактивировать остальные плагины для исключения конфликтов. Также полезной может быть проверка на другой тестовой среде с минимизированным количеством установленного софта для исключения внешних влияний.
Таким образом, осторожное рассмотрение всех деталей и возможностей может привести к успешной настройке вашего виджета. Если у вас возникнут дополнительные вопросы, не стесняйтесь уточнять детали - мы всегда готовы помочь!