嘿,出于某种原因,我有一个函数,它必须通过ID、名称或帖子标题来查找帖子。看起来是这样的:
/**
* @param $name_or_id: Name or ID of the post to find
* @param $posttype: The Post Type
* @return null|WP_Post
*/
function r2o_find_post($name_or_id,$posttype) {
if(is_numeric($name_or_id)) {
$id = abs(intval($name_or_id));
if($id > 0) {
$post = get_post($id);
if(is_object($post) && $post->post_type == $posttype) {
return $post;
}
}
return null;
}
$slargs = array(
\'post_title\' => $name_or_id,
\'post_type\' => $posttype,
\'post_status\' => \'publish\',
\'numberposts\' => 1
);
$pt = get_posts($slargs);
if(is_array($pt)) {
return $pt[0];
}
return null;
}
然而,在$slargs中,我只能做到:
post_title => $name_or_id
OR
post_name => $name_or_id
我可以在不进行两次单独查询的情况下,与WP\\u Query/get\\u posts建立这种“或”关系吗?
最合适的回答,由SO网友:CodeMascot 整理而成
不WP_Query
类不支持OR
基于对同一表的列的条件查询。因此,在这种情况下,您必须编写自己的SQL查询。而且,由于必须有一个查询才能获得这篇文章,这不会影响性能。:)
然而,我已经用稍微不同的方式重新编写了您的代码。这样您就不需要同时使用这两种方法get_post()
和get_posts()
. 只有一个get_posts()
打电话就够了。这是这个-
/**
* @param $name_or_id: Name or ID of the post to find
* @param $posttype: The Post Type
* @return null|WP_Post
*/
function r2o_find_post( $name_or_id, $posttype ) {
$slargs = array(
\'post_title\' => $name_or_id,
\'post_type\' => $posttype,
\'post_status\' => \'publish\',
\'posts_per_page\' => 1,
);
if( is_numeric( $name_or_id ) ) {
$id = abs( intval( $name_or_id ) );
if( $id > 0 ) {
unset( $slargs[ \'post_title\' ] );
$slargs[\'post__in\'] = [ $name_or_id ];
}
}
$pt = get_posts( $slargs );
if( is_array($pt) ) {
return $pt[0];
}
return null;
}
我上面的主要理论是,我们在操纵
get_posts()
基于
name_or_id
参数
希望以上内容有所帮助。