Список всех записей из пользовательского типа записи по таксономии

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

Наличие пользовательских типов записей с таксономиями.

Допустим, у меня есть пользовательский тип записи “Продукты” с таксономиями “новый”, “старый”, “модный”.

Теперь у меня есть Навигация, где я могу нажать на wordpress.private/products/new/, но я всегда получаю страницу 404, и, похоже, что вообще не вызывается файл index.php.

Как мне получить все эти записи?

Вы можете попробовать такой способ.

Создайте новую страницу с названием, скажем, ‘Все продукты’ и примените к ней следующий шаблон.

Вот код, который должен быть использован в вашем шаблоне, сразу перед циклом while.

   $type="products";
   $args=array(
  'post_type' => $type,
  'post_status' => 'publish',
  'posts_per_page' => -1,
  'caller_get_posts'=> 1

  query_posts($args);

Полный пример шаблона будет выглядеть следующим образом.

<?php
/**
 * Имя шаблона: Страница продуктов
 *
 * Выбирается из выпадающего меню на экране редактирования страницы.
 */
?>

<?php get_header(); ?>

        <div id="container">
            <div id="content">

<?php
$type="products";
$args=array(
  'post_type' => $type,
  'post_status' => 'publish',
  'posts_per_page' => -1,
  'caller_get_posts'=> 1

query_posts($args);

if( have_posts() ) {
  while (have_posts()) : the_post(); ?>
    <p><a href="https://wordpress.stackexchange.com/questions/165882/<?php the_permalink() ?>" rel="bookmark" title="Постоянная ссылка на <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p>
    <?php
  endwhile;
}
wp_reset_query();  // Восстановить глобальные данные о записях, переопределенные the_post().
?>
            </div><!-- #content -->
        </div><!-- #container -->

<?php get_sidebar(); ?>
<?php get_footer(); ?>

Не обязательно, чтобы это была точная структура вашего шаблона. Возможно, вам нужно будет изменить её соответствующим образом. Но логика здесь.

Ответ или решение

Как вывести все записи пользовательского типа по таксономии

Если у вас есть пользовательский тип записей «Продукты» с таксономиями «новые», «старые» и «модные», и вы хотите получить все записи для конкретной таксономии, вам необходимо правильно настроить permalink и использовать соответствующий код в шаблоне страницы. Давайте разберем шаги для достижения этой цели.

Шаг 1: Настройка ЧПУ (человеко-понятные URL)

Убедитесь, что ваши пользовательские типы записей и таксономии правильно зарегистрированы с использованием функции register_post_type и register_taxonomy. Вот пример кода для регистрации:

function register_custom_post_type() {
    register_post_type('products', array(
        'labels' => array(
            'name' => __('Продукты'),
            'singular_name' => __('Продукт'),
        ),
        'public' => true,
        'has_archive' => true,
        'rewrite' => array('slug' => 'products'),
    ));
}

function register_custom_taxonomy() {
    register_taxonomy('product_category', 'products', array(
        'labels' => array(
            'name' => __('Категории'),
            'singular_name' => __('Категория'),
        ),
        'hierarchical' => true,
        'rewrite' => array('slug' => 'products'),
    ));
}

add_action('init', 'register_custom_post_type');
add_action('init', 'register_custom_taxonomy');

После этого зайдите в «Настройки» → «Постоянные ссылки» и просто нажмите «Сохранить изменения». Это обновит ваши правила перезаписи.

Шаг 2: Создание страницы для отображения продуктов

Теперь создайте новую страницу в админ-панели WordPress и назначьте ей шаблон, который будет использоваться для вывода продуктов.

Пример шаблона страницы

<?php
/**
 * Template Name: Страница продуктов
 *
 * Подходящая для выбора из выпадающего меню на экране редактирования страницы.
 */
get_header(); ?>

<div id="container">
    <div id="content">

    <?php
    $type = "products";
    $taxonomy = "product_category";
    $term_slug = get_query_var('term'); // Получаем переменную таксономии из URL
    $args = array(
        'post_type' => $type,
        'post_status' => 'publish',
        'posts_per_page' => -1,
        'tax_query' => array(
            array(
                'taxonomy' => $taxonomy,
                'field' => 'slug',
                'terms' => $term_slug,
            ),
        ),
    );

    $query = new WP_Query($args);

    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post(); ?>
            <p><a href="<?php the_permalink(); ?>" rel="bookmark" title="Постоянная ссылка на <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p>
            <?php
        }
    } else {
        echo '<p>Нет доступных продуктов в этой категории.</p>';
    }
    wp_reset_postdata(); // Восстанавливаем глобальные данные поста, чтобы избежать конфликтов
    ?>
    </div><!-- #content -->
</div><!-- #container -->

<?php get_sidebar(); ?>
<?php get_footer(); ?>

Шаг 3: Настройка маршрутов

Чтобы сделать так, чтобы ссылки вида wordpress.private/products/new/ работали, вам нужно убедиться, что вы правильно настроили маршрут для таксономии. Если вы хотите, чтобы при доступе к специфическим URL выводились соответствующие записи определённой таксономии, используйте подходящие хуки, например, pre_get_posts.

Примечания

  1. Настройка пользовательских URL: Используйте правильные слуги для вашей пользовательской записи и таксономии.
  2. Обработка URL: Убедитесь, что ваша таксономия и маршруты корректно обрабатываются в вашем коде.
  3. Оптимизация работы: Используйте WP_Query вместо query_posts, чтобы избежать потенциальных проблем с глобальными данными.

Заключение

Следуя описанным шагам, вы сможете без проблем выводить все записи пользовательского типа по выбранной таксономии, делая ваш сайт удобным и функциональным. Эта инструкция поможет вам избавиться от ошибок 404 и настроить вывод продуктов в соответствии с вашим бизнесом.

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

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