我不喜欢在前端插入已发布帖子的私人帖子,所以我正在编写一个插件,试图将它们隔离开来。
作为这项工作的一部分,我想修改单个帖子视图上的帖子导航,以便:如果帖子已发布,帖子导航仅显示已发布的帖子。如果帖子是私有的,则帖子导航仅显示私有帖子。
这就是我已经走了多远,这显然是不完整的,但我可以提供一些关于如何继续的建议。
/*
*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语句中遗漏了什么。
我现在只想让它工作起来,然后再考虑重新分解,因为这是一个个人项目。