如何查询有下级但不是顶层的岗位(层级自定义岗位类型)?

时间:2017-12-19 作者:Jusi

我正在尝试为自定义帖子类型创建一个自定义过滤器,该过滤器将仅显示具有子级的帖子–post_parent__not_in => 0 不会起作用,因为这些帖子有家长。我试图把目标放在“中间”的帖子上,而不是顶级帖子。

这必须是简单的查询(不在循环中进行检查),因为它将用于pre_get_posts

1 个回复
最合适的回答,由SO网友:Shibi 整理而成

您可以使用过滤器修改SQL。我在post\\u类型中添加了一些独特的内容,因此我只能过滤此查询,而不能更改任何其他内容。

例如,查询

$query = new WP_Query(array(\'post_type\'=>\'something_unique_for_filter\'));
和过滤器

function custom_where($where, $query) {
    global $wpdb;
    if(false !== strpos($where, \'something_unique_for_filter\')) {
        $where = " AND post_type=\'page\' AND post_parent != 0 AND ID IN (SELECT DISTINCT post_parent FROM $wpdb->posts WHERE post_type=\'page\')";
    }
    return $where;
}
add_filter(\'posts_where\', \'custom_where\', 10, 2);
要添加对元查询的支持,第一步是添加meta_keyWP_Query 因此,它内部连接Posteta表。

$query = new WP_Query(array(\'post_type\'=>\'something_unique_for_filter\', \'meta_key\'=>\'something\'));
和带meta的过滤器

function custom_where($where, $query) {
    global $wpdb;
    if(false !== strpos($where, \'something_unique_for_filter\')) {
        $where = " AND ( $wpdb->postmeta.meta_key = \'test\' AND $wpdb->postmeta.meta_value = \'123\' )
        AND post_type=\'page\' AND post_parent != 0
        AND ID IN (SELECT DISTINCT post_parent FROM $wpdb->posts WHERE post_type=\'page\')";
    }
    return $where;
}
add_filter(\'posts_where\', \'custom_where\', 10, 2);

结束