我一直在努力解决一个问题,我有一个在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 );
没有任何成功。
提前感谢您的帮助。
最合适的回答,由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