У меня странная проблема, некоторые посты появляются в категориях, где их нет.
Когда я заглядываю в свой бэк-офис и фильтрую по категориям, там появляется какой-то пост, но он не отмечен.
В результате они появляются в фронт-офисе.
Это мой category.php (но я не думаю, что дело в этом)
<?php
get_header();
?>
<section id="wrapper" class="page <?php echo get_query_var('cat'); ?>">
<div id="container">
<?php
$category = get_category(get_query_var('cat'));
$cat_id = $category->cat_ID;
query_posts('showposts=1&cat='.$cat_id);
if ( have_posts() ) :
while ( have_posts() ) : the_post();
get_template_part( 'content', get_post_format() );
endwhile;
endif;
?>
</div>
</section>
<?php
get_footer();
?>
Я посмотрел в таблице «_term_relationships» и все правильно, они не в неправильных категориях.
Так может у кого-то есть ключ, чтобы выяснить это?
PS: я использую WPML, но если я отключу его, это та же проблема
Вы не должны использовать query_posts()
,
увидеть (https://wordpress.stackexchange.com/questions/1753/when-should-you-use-wp-query-vs-query-posts-vs-get-posts)
попробуй это:
<?php
$category = get_category(get_query_var('cat'));
$cat_id = $category->cat_ID;
$args = array( 'category' => $cat_id );$query2 = new WP_Query($args);
if ( $query2->have_posts() ) :
while ( $query2->have_posts() ) :
$query2->the_post();
get_template_part( 'content', get_post_format() );
endwhile;
endif;
?>
Прежде всего, никогда не используйте query_posts
построить любой тип запроса
Замечания: Эта функция не предназначена для использования плагинами или темами. Как будет объяснено позже, есть более эффективные варианты для изменения основного запроса. query_posts () — это слишком упрощенный и проблемный способ изменить основной запрос страницы, заменив его новым экземпляром запроса. Он неэффективен (перезапускает SQL-запросы) и в некоторых обстоятельствах потерпит неудачу (особенно часто при разбивке на посты).
Во-вторых, никогда не меняйте основной запрос для пользовательского запроса на любой странице архива или домашней странице. Правильный способ заключается в использовании pre_get_posts
изменить переменные запроса перед выполнением основного запроса. Проверять, выписываться эта почта Я сделал некоторое время назад
В-третьих, страницы категорий в WordPress работают странным образом. При посещении страницы категории будут отображаться сообщения из выбранной категории и сообщения из дочерних категорий выбранной категории. Могу поспорить, это то, что вы видите. Это довольно нормальное поведение. Если вам нужно изменить это, посмотрите на этот ответ на WPSE @ialocin. В пользу этого ответа, вот решение
add_filter(
'parse_tax_query',
'wpse163572_do_not_include_children_in_category_archive_parse_tax_query'
);
function wpse163572_do_not_include_children_in_category_archive_parse_tax_query( $query ) {
if (
! is_admin()
&& $query->is_main_query()
&& $query->is_category()
) {
// as seen here: https://wordpress.stackexchange.com/a/140952/22534
$query->tax_query->queries[0]['include_children'] = 0;
}
}