Динамический шаблон запроса Loop для пользовательских типов записей и таксономий в блоках WordPress с помощью PHP

Вопрос или проблема

Привет всем,

Я пытаюсь создать пользовательский блок в 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 и вносить необходимые изменения в зависимости от ваших нужд.

Если у вас возникнут дополнительные вопросы или потребуется помощь, не стесняйтесь обращаться!

С уважением!

Оцените материал
Добавить комментарий

Капча загружается...