按元数据日期对帖子(在整个网站上)进行排序

时间:2011-06-21 作者:josh

我的自定义“主页”设置为通过自定义日期字段在函数中使用此代码(更新为自定义名称)对我的自定义帖子进行排序。php:

// sort order for home page
add_action(\'wp\', \'wwgo_check_page\');
function wwgo_check_page () {
if (is_page()) {
    add_filter(\'get_previous_post_sort\', \'sort_it\');
    add_filter(\'get_next_post_sort\', \'sort_it\');
    add_filter(\'posts_orderby\', \'sort_it\' );
    add_filter(\'posts_join\', \'join_it\' );
    add_filter(\'posts_where\', \'where_it\' );

    function sort_it () {
        global $wpdb;

        return " $wpdb->postmeta.meta_value ASC ";
    }

    function join_it( $join ) {
        global $wpdb;

        $join .= " LEFT JOIN $wpdb->postmeta ON($wpdb->posts.ID = $wpdb->postmeta.post_id) ";

      return $join;
    }

    function where_it( $where ) {
        global $wpdb;
        $where .= "AND $wpdb->postmeta.meta_key = \'deadline\' ";

      return $where;
    }
}



}
这很简单,很漂亮。现在我希望整个网站都能这样做。我想在档案页,类别等帖子排序,首先由自定义日期字段。

有什么想法吗?

我已尝试更改\'if\' 到is_archive() 但这没有任何效果。我试过了<! is_single()>

我相信这应该很简单。但我对php还不熟悉,因此不太懂

这是site, 在你可以看到的地方,主页被很好地排序,但如果你点击“诗歌”(唯一有几个帖子的一个),排序就不起作用了。

任何建议都会很高兴。

谢谢你的好意。

3 个回复
最合适的回答,由SO网友:Maxim Krizhanovsky 整理而成

使用query_varsrequest 要添加的筛选器orderby 如果orderby 查询字符串中未显示

SO网友:Brian Fegter

为什么不使用query\\u posts()?

<?php
query_posts(\'meta_key=key_name&orderby=key_name&sort=ASC\');
if ( have_posts() ) : while ( have_posts() ) : the_post();

endwhile; else:

endif;

wp_reset_query();
您还可以使用pre\\u get\\u posts钩子更改查询,并使用is\\u archive()、is\\u page()等在那里进行条件排序。。。

SO网友:djb

我在看你的other question

如果希望按日期元值排序,它们自然必须采用相同的格式-我猜这是PHP的日期(“m-y”)格式,正如您在代码中指定的那样?

如果是这样的话,你可能会发现如果你改变meta_value 在该代码中meta_value_num 你有更好的结果吗?

不确定这是否可行,但可能值得一试。

结束