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

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

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

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

2 ответа

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

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