Вопрос или проблема
Позвольте мне объяснить мои требования. У меня есть сайт на WordPress, и я создал пользовательский тип записи отзывы. У одной записи есть поля ACF, которые я хочу отображать в зависимости от термина, на который пользователь нажимает на странице архивов таксономии. Таким образом, в пользовательском типе записи обзор у меня есть таксономия со слагом категория поставщика, а под этой таксономией у меня есть термины: бизнес-банкинг, кредитная линия для бизнеса и бизнес-займы. Теперь я хочу, чтобы, если пользователь нажимает на термин бизнес-банкинг на странице архива, отображалось поле ACF “банковское поле”, а если пользователь нажимает на кредитную линию для бизнеса, то отображалось поле ACF “кредитная линия” и так далее. Также одна запись может быть назначена нескольким терминам, поэтому информация, отображаемая на одной записи, зависит от нажатого термина.
Возможно ли это? Если да, то как мы можем этого добиться?
Ответ или решение
Для решения вашей задачи о скрытии и отображении информации о постах в зависимости от выбранного пользователем термина в архивной страницах таксономии, мы можем использовать комбинацию JavaScript, PHP и Advanced Custom Fields (ACF) для WordPress.
Понимание ситуации
Вы создали пользовательский тип записи «Отзывы» с определенными полями ACF, которые хотите отображать на основе выбранного термина в таксономии «Категория поставщика». У вас есть три термина: «бизнес-банкинг», «линия кредита для бизнеса» и «бизнес-кредиты», каждый из которых коррелирует с определенным полем ACF. Важно учитывать, что одна запись может быть связана с несколькими терминами, поэтому отображаемая информация должна обновляться в зависимости от выбранного на архивной странице термина.
Решение
Шаг 1: Настройка пользовательских полей ACF
- Убедитесь, что вы создали необходимые поля ACF для каждого термина. Это может быть сделано в разделе "Custom Fields" вашего админ-панели WordPress.
- Назначьте эти поля вашему пользовательскому посту «Отзывы».
Шаг 2: Создание шаблона таксономии
Создайте либо измените файл taxonomy-vendor-category.php
в вашей теме, чтобы выводить посты, принадлежащие к выбранной категории, и их поля ACF.
Пример кода PHP для вывода постов:
<?php
$term = get_queried_object();
$query_args = array(
'post_type' => 'reviews',
'tax_query' => array(
array(
'taxonomy' => 'vendor_category',
'field' => 'slug',
'terms' => $term->slug,
),
),
);
$review_query = new WP_Query($query_args);
if ($review_query->have_posts()) :
while ($review_query->have_posts()) : $review_query->the_post();
// Ваш код для отображения информации о посте
the_title();
// Здесь мы выводим скрытые ACF поля
$banking_field = get_field('banking_field');
$line_of_credit = get_field('line_of_credit');
$business_loans = get_field('business_loans');
// Вывод информации в зависимости от выбранного термина
if ($term->slug == 'business-banking') {
echo $banking_field; // Показываем банковское поле
} elseif ($term->slug == 'business-line-of-credit') {
echo $line_of_credit; // Показываем поле линии кредита
} elseif ($term->slug == 'business-loans') {
echo $business_loans; // Показываем поле бизнес-кредитов
}
endwhile;
endif;
wp_reset_postdata();
?>
Шаг 3: Использование JavaScript для динамического обновления на фронте
Чтобы улучшить пользовательский опыт, мы можем использовать JavaScript для динамического обновления содержимого на странице без перезагрузки.
- Добавьте событие на клик для ссылок на термины в архивах.
- Используйте AJAX для запроса постов и отображения конкретных полей ACF.
Пример кода JavaScript:
jQuery(document).ready(function($){
$('.taxonomy-link').on('click', function(e) {
e.preventDefault();
var term_slug = $(this).data('slug'); // Получение slug термина
$.ajax({
url: ajaxurl,
type: 'POST',
data: {
action: 'load_reviews',
term: term_slug,
},
success: function(data) {
$('#reviews-container').html(data); // Обновляем контейнер с отзывами
}
});
});
});
Шаг 4: Создайте обработчик AJAX в functions.php
add_action('wp_ajax_load_reviews', 'load_reviews');
add_action('wp_ajax_nopriv_load_reviews', 'load_reviews');
function load_reviews() {
$term_slug = $_POST['term'];
$query_args = array(
'post_type' => 'reviews',
'tax_query' => array(
array(
'taxonomy' => 'vendor_category',
'field' => 'slug',
'terms' => $term_slug,
),
),
);
$review_query = new WP_Query($query_args);
if ($review_query->have_posts()) {
while ($review_query->have_posts()) {
$review_query->the_post();
// Здесь выводим содержание поста
// Учитываем логику для ACF полей как в предыдущем шаге
}
}
wp_die();
}
Заключение
С помощью комбинации PHP, ACF и AJAX вы можете динамически отображать данные, основанные на выбранных терминах, что обеспечит более интерактивный и современный пользовательский интерфейс. Этот подход не только улучшает пользовательский опыт, но и позволяет отображать релевантную информацию, соответствующую выбранным категориям, что может повысить интерес к контенту вашего сайта.