按属性‘顺序’对帖子进行排序

时间:2016-08-26 作者:Lech

如何按属性“顺序”对显示的帖子进行排序?

在函数中。php I为帖子添加了“属性”

function wpzen_add_attributes_to_post() {
    add_post_type_support(\'post\', \'page-attributes\');
}
add_action(\'init\', \'wpzen_add_attributes_to_post\');
function wpzen_change_post_order($query) {
    if($query->is_main_query()) {
        $query->set(\'orderby\', \'menu_order\');
    }
}
add_action(\'pre_get_posts\', \'wpzen_change_post_order\');
代码显示帖子的概述,如下所示:

<?php
        $show_posts = \'12\';
        $cat_name = \'Products\';
        $paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;

        $my_query = new WP_query(\'category_name=\' . $cat_name . \'&showposts=\' . $show_posts . \'&paged=\' . $paged );

        global $wp_query;
        $wp_query->in_the_loop = true;

        while ($my_query->have_posts()) : $my_query->the_post();
        $do_not_duplicate = $post->ID;?>

    <a href="<?php echo get_permalink(); ?>">
        <h2><?php the_title(); ?></h2>
    </a>
    <?php the_content( $more_link_text , $strip_teaser ); ?>

<?php endwhile; ?>
如何根据属性“顺序”(升序或降序)对帖子进行排序。

1 个回复
SO网友:Krzysiek Dróżdż

嗯,恐怕这样不行。让我解释一下为什么。。。

在您的wpzen_change_post_order 功能检查是否$query->is_main_query(). 准确地说,如果给定的查询是当前页面的主查询,则该检查是由WP生成的查询,以显示当前页面的默认帖子。

所以如果你自己创造WP_Query 对象,则此条件将为false,并且您的函数不会设置orderby 参数

How to change that?

有很多方法可以解决这个问题。首先:从中删除if语句wpzen_change_post_order. 但是,您应该小心,并在其中添加一些其他检查,以便确保只修改您真正想要的查询。(尤其是你应该检查,if ( ! is_admin() ))

第二种方式,我想更容易。。。添加orderby 参数直接在WP_Query. 因此,显示帖子的代码如下所示:

<?php
        $show_posts = \'12\';
        $cat_name = \'Products\';
        $paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;

        $my_query = new WP_Query( array(  // <- It\'s better to use array
           \'category_name\' => $cat_name,
           \'posts_per_page\' => $show_posts,  // <- showposts is deprecated for long time, so use posts_per_page instead
           \'paged\' => $paged,
           \'orderby\' => \'menu_order\'
        ) );

        global $wp_query;  // <- I\'m not sure what do you want to accomplish with these 2 lines
        $wp_query->in_the_loop = true;

        while ($my_query->have_posts()) : $my_query->the_post();
        $do_not_duplicate = $post->ID;?>

    <a href="<?php echo get_permalink(); ?>">
        <h2><?php the_title(); ?></h2>
    </a>
    <?php the_content( $more_link_text , $strip_teaser ); ?>

<?php endwhile; ?>

相关推荐

Changing slug of all posts

我有一个网站,有十几种自定义帖子类型。我想更改默认的帖子类型,使其URL有一段/news/。在我的函数文件中,我有: add_action( \'init\', \'change_post_object\' ); // Change dashboard Posts to News function change_post_object() { $get_post_type = get_post_type_object(\'post\');&#x