Вопрос или проблема
Наличие пользовательских типов записей с таксономиями.
Допустим, у меня есть пользовательский тип записи “Продукты” с таксономиями “новый”, “старый”, “модный”.
Теперь у меня есть Навигация, где я могу нажать на 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
.
Примечания
- Настройка пользовательских URL: Используйте правильные слуги для вашей пользовательской записи и таксономии.
- Обработка URL: Убедитесь, что ваша таксономия и маршруты корректно обрабатываются в вашем коде.
- Оптимизация работы: Используйте
WP_Query
вместоquery_posts
, чтобы избежать потенциальных проблем с глобальными данными.
Заключение
Следуя описанным шагам, вы сможете без проблем выводить все записи пользовательского типа по выбранной таксономии, делая ваш сайт удобным и функциональным. Эта инструкция поможет вам избавиться от ошибок 404 и настроить вывод продуктов в соответствии с вашим бизнесом.