Вопрос или проблема
Привет всем,
Я пытаюсь создать пользовательский блок в WordPress, который динамически отображает записи из созданного мной пользовательского типа записей “продукты”. Я также хочу отфильтровать записи по определенной таксономии, которая уже существует.
Как использовать запросный цикл с PHP для получения этих данных? Например, я хочу отобразить все продукты по определенной категории и показать заголовок и ссылку на каждый продукт.
Если есть пример кода или объяснение шагов, я буду очень благодарен!
Большое спасибо!
Ответ или решение
Здравствуйте!
Для того чтобы создать динамический блок в WordPress, который будет отображать записи из кастомного типа постов "продукты" и фильтровать их по определенной таксономии, вы можете использовать WP_Query в сочетании с PHP. Ниже приведен пошаговый пример и объяснение, как это реализовать.
Шаг 1: Создайте кастомный пост тип и таксономию
Если вы еще не создали кастомный пост тип "продукты" и таксономию, сделайте это с помощью следующего кода, который можно добавить в файл functions.php
вашей темы:
function create_custom_post_type() {
register_post_type('produk',
array(
'labels' => array(
'name' => __('Продукты'),
'singular_name' => __('Продукт'),
),
'public' => true,
'has_archive' => true,
'supports' => array('title', 'editor', 'thumbnail'),
)
);
register_taxonomy('produk_category', 'produk', array(
'label' => __('Категория продуктов'),
'rewrite' => array('slug' => 'produk-category'),
'hierarchical' => true,
));
}
add_action('init', 'create_custom_post_type');
Шаг 2: Используйте WP_Query для выборки записей
Теперь, когда у вас есть кастомный пост тип и таксономия, вы можете создать блок, который будет использовать WP_Query
для выборки нужных записей. Ниже приведен пример кода, который можно использовать:
function display_products_by_category($category_slug) {
$args = array(
'post_type' => 'produk', // Указываем наш кастомный пост тип
'tax_query' => array(
array(
'taxonomy' => 'produk_category', // Указываем нашу таксономию
'field' => 'slug',
'terms' => $category_slug, // Сюда подставляем слаг (slug) категории, по которой фильтруем
),
),
);
$query = new WP_Query($args);
if ($query->have_posts()) {
echo '<ul>';
while ($query->have_posts()) {
$query->the_post();
echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>'; // Выводим заголовок с ссылкой
}
echo '</ul>';
} else {
echo 'Продукты не найдены.';
}
// Сбрасываем данные запроса
wp_reset_postdata();
}
Шаг 3: Вызов функции
Теперь вы можете вызвать данную функцию в вашем шаблоне или создать краткий код (shortcode) для простоты использования:
function products_shortcode($atts) {
$atts = shortcode_atts(
array(
'category' => '',
),
$atts,
'products'
);
ob_start();
display_products_by_category($atts['category']);
return ob_get_clean();
}
add_shortcode('products', 'products_shortcode');
Использование шорткода
Теперь вы можете использовать шорткод [products category="slug-категории"]
в любом месте вашего контента, чтобы вывести список продуктов, принадлежащих к определённой категории.
Заключение
Этот код поможет вам создать динамический блок, который будет отображать записи кастомного поста "продукты", отфильтрованные по указанной таксономии. Не забудьте протестировать функциональность в своей установке WordPress и вносить необходимые изменения в зависимости от ваших нужд.
Если у вас возникнут дополнительные вопросы или потребуется помощь, не стесняйтесь обращаться!
С уважением!