WP_QUERY“OR”:按ID、姓名还是标题查找帖子?

时间:2018-02-28 作者:Blackbam

嘿,出于某种原因,我有一个函数,它必须通过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建立这种“或”关系吗?

1 个回复
最合适的回答,由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 参数

希望以上内容有所帮助。

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post