按元数据日期订购(整个网站上的)帖子


8

我的自定义“主页”页面设置为通过自定义日期字段对我的自定义帖子进行排序,并使用functions.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的新手,因此一无所知。

这是该站点,您可以在其中看到主页的排序很好,但是如果单击“诗歌”(仅有几篇文章的人),则无法进行排序。

任何建议都会很高兴地得到满足。

非常感谢你。


您应该为所有功能加上例如前缀。josh_避免命名细菌。
kaiser

您是说这是好的做法还是要解决这个问题?我试图复制代码,再为“is_archive”,它的确让我再次调用该函数,但排序没有工作......
约什-

1
是的,这是个好习惯。加:您不应该将函数包装在函数中。
kaiser

很酷,很酷(我只是从网站tbh复制了代码。我是php和wordpress的新手)。关于如何使其在整个网站上正常工作的任何进展?我可以在更多自定义页面和设置为(is_page())的相同功能下使用它,但这仍然对我的存档页面不起作用。我不知道如何解决这些问题?
乔希

1
不要将函数放入函数中,而应尝试使用类。
曼妮·弗勒蒙德

Answers:



0

为什么不使用query_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_get_posts钩子来更改查询,并使用is_archive(),is_page()等在其中进行条件排序...


0

我也在看你的其他问题

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

如果是这样,您可能会发现,如果meta_value将代码更改meta_value_num为更好的结果?

不确定是否可以,但是值得一试。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.