Сообщение в неправильной категории

У меня странная проблема, некоторые посты появляются в категориях, где их нет.
Когда я заглядываю в свой бэк-офис и фильтрую по категориям, там появляется какой-то пост, но он не отмечен.

В результате они появляются в фронт-офисе.

Это мой 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, но если я отключу его, это та же проблема

0

Решение

Вы не должны использовать 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;
?>
0

Другие решения

Прежде всего, никогда не используйте 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;
}
}
0