如何过滤GET_ADVIENT_POST()?

时间:2015-12-29 作者:user86006

我不喜欢在前端插入已发布帖子的私人帖子,所以我正在编写一个插件,试图将它们隔离开来。

作为这项工作的一部分,我想修改单个帖子视图上的帖子导航,以便:如果帖子已发布,帖子导航仅显示已发布的帖子。如果帖子是私有的,则帖子导航仅显示私有帖子。

这就是我已经走了多远,这显然是不完整的,但我可以提供一些关于如何继续的建议。

/*
 *filter get_adjacent_post
 */

public function get_next_post_mod($where){
        if (is_single()){
                global $wpdb, $post;
                if ( get_post_status ( ) == \'private\' ) {
                        $new_where = "WHERE p.post_type = \'post\' AND p.post_status = \'private\'";
                        return $new_where;
                } else {
                        $new_where = "WHERE p.post_type = \'post\' AND p.post_status = \'publish\'";
                        return $new_where;
                }

        }

}
public function get_previous_post_mod($where){
        if (is_single()){
                global $wpdb, $post;
                if ( get_post_status ( ) == \'private\' ) {
                        $new_where = "WHERE p.post_type = \'post\' AND p.post_status = \'private\'";
                        return $new_where;
                } else {
                        $new_where = "WHERE p.post_type = \'post\' AND p.post_status = \'publish\'";
                        return $new_where;
                }

        }

}
过滤器被添加到我的类的构造函数中的相关函数中,只要它们实现了按post状态的分离,就可以工作,但很明显,过滤器遗漏了一些要点,这意味着它无法正确获取相邻的post。

我已经了解了wp core中功能的来源,并围绕这些论坛上的相关问题进行了挖掘。我可以看到尝试的线索和选择。只是看着this question 这很有意思,也有潜在的帮助,特别是作为一个例子,我可以如何使这个干燥,但实际上不是相同的情况。

谁能给我一些建议吗?我想我在WHERE语句中遗漏了什么。

我现在只想让它工作起来,然后再考虑重新分解,因为这是一个个人项目。

1 个回复
SO网友:user86006

嗯,从某种角度来看,这并不难。

public function get_adjacent_post_mod($where){
        if (is_single()){
            global $wpdb, $post;
            if ( get_post_status ( ) == \'private\' ) {
                $where = str_replace( "AND ( p.post_status = \'publish\' OR p.post_status = \'private\' )", "AND p.post_status = \'private\'", $where );
                return $where;  
            } else {
                $where = str_replace( "AND ( p.post_status = \'publish\' OR p.post_status = \'private\' )", "AND p.post_status = \'publish\'", $where );
                return $where;  
            }
        }
    }

相关推荐

使用Apply_Filters()函数清理和数据验证

我们是否应该清理和验证apply_filters() 像下面的例子?absint( apply_filters( \'slug_excerpt_length\', 35 ) );wp_kses_post( apply_filters( \'slug_excerpt_more\', \'&hellip;\' ) );esc_url( apply_filters( \'slug_login_url\', home_url( \'/\' ) ) );</我在问这个问题,因为我以前从未见过这个问题。