我们可以过滤posts_where
子句来返回父帖子/页,而不仅仅是父帖子/页的子帖子/页。在这里,我们将设置自己的自定义参数wpse_include_parent
, 当设置为true
, 将相应地更改生成的SQL。
我们需要做的就是posts_where
筛选器用于检查是否设置了自定义参数,以及post_parent
参数已设置。然后,我们获取该值并将其传递给过滤器以扩展SQL查询。这里有什么好东西,post_parent
除非只有一个整数值,所以我们只需要将该值验证为整数。
查询
$args = [
\'wpse_include_parent\' => true,
\'post_parent\' => 256,
\'post_type\' => \'page\'
// Add additional arguments
];
$q = new WP_Query( $args );
正如你所看到的,我们已经
\'wpse_include_parent\' => true
“激活”我们的过滤器。
过滤器
add_filter( \'posts_where\', function ( $where, \\WP_Query $q ) use ( &$wpdb )
{
if ( true !== $q->get( \'wpse_include_parent\' ) )
return $where;
/**
* Get the value passed to from the post parent and validate it
* post_parent only accepts an integer value, so we only need to validate
* the value as an integer
*/
$post_parent = filter_var( $q->get( \'post_parent\' ), FILTER_VALIDATE_INT );
if ( !$post_parent )
return $where;
/**
* Lets also include the parent in our query
*
* Because we have already validated the $post_parent value, we
* do not need to use the prepare() method here
*/
$where .= " OR $wpdb->posts.ID = $post_parent";
return $where;
}, 10, 2 );
你可以根据自己的需要进行扩展,但这是最基本的想法。这将返回传递给的父级
post_parent
是孩子们