在博客部分显示单个类别

时间:2021-05-13 作者:Alexandro Giles

我一直在努力解决一个问题,我有一个在WordPress上运行的网页,除了一个以外,大多数东西都能正常工作:在博客部分页面(在设置/阅读->;帖子页面中配置的页面)中,显示所有帖子。我有一个特定的类别,应该在那里显示,但我不知道如何改变循环以按预期工作。以下是索引页的代码:

<?php
$class_archive  = \'\';
$is_grid_layout = get_theme_mod( \'thim_front_page_cate_display_layout\', false );
$layout_type    = $is_grid_layout ? \'grid\' : \'\';
if ( $layout_type == \'grid\' ) {
    $class_archive = \' blog-switch-layout blog-list\';
    global $post, $wp_query;
    
    if ( is_category() ) {
        $total = get_queried_object();
        $total = $total->count;
    } elseif ( ! empty( $_REQUEST[\'s\'] ) ) {
        $total = $wp_query->found_posts;
    } else {
        $total = wp_count_posts( \'post\' );
        $total = $total->publish;
    }

    if ( $total == 0 ) {
        echo \'<p class="message message-error">\' . esc_html__( \'There are no available posts!\', \'eduma\' ) . \'</p>\';

        return;
    } elseif ( $total == 1 ) {
        $index = esc_html__( \'Showing only one result\', \'eduma\' );
    } else {
        $courses_per_page = absint( get_option( \'posts_per_page\' ) );
        $paged            = get_query_var( \'paged\' ) ? intval( get_query_var( \'paged\' ) ) : 1;

        $from = 1 + ( $paged - 1 ) * $courses_per_page;
        $to   = ( $paged * $courses_per_page > $total ) ? $total : $paged * $courses_per_page;

        if ( $from == $to ) {
            $index = sprintf(
                esc_html__( \'Showing last post of %s results\', \'eduma\' ),
                $total
            );
        } else {
            $index = sprintf(
                esc_html__( \'Showing %s-%s of %s results\', \'eduma\' ),
                $from,
                $to,
                $total
            );
        }
    }
}
我补充道:

$args = array(
    cat => 200
);
  
// Custom query.
$wp_query = new WP_Query( $args );
没有任何成功。

提前感谢您的帮助。

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

在WordPress中,我们有所谓的;“主查询”;指向全局$wp_query 对象(它是WP_Query class), WordPress解析当前URL(或该URL的匹配重写规则的相关查询)的查询参数后,此主查询在页面加载时运行。

而且,您永远不应该更改/覆盖该变量,甚至不应该像在代码中那样进行自定义查询,因为这样做会破坏很多东西,也会影响页面性能。看见query_posts() 有关更多详细信息(但也不要使用该函数)。

更改WordPress主查询的正确方法。。就是用钩子pre_get_posts. 在这个钩子上,可以使用条件标记is_home(), is_front_page()is_category() 以特定页面为目标。

下面是您的案例示例(此代码将在theme functions file):

add_action( \'pre_get_posts\', \'my_pre_get_posts\' );
function my_pre_get_posts( $query ) {
    // If it\'s the blog page and $query points to the main WordPress query, then
    // we set "cat" to a specific category ID.
    if ( is_home() && $query->is_main_query() ) {
        $query->set( \'cat\', 200 );
    }
}

进一步阅读

https://codex.wordpress.org/Query_Overview

  • Conditional Tags in the Theme Handbook