按作者名字和/或姓氏搜索博客文章

时间:2021-05-31 作者:user8463989

我正在尝试创建和终结点,在这里可以按作者的名字和/或姓氏搜索博客文章。我曾试图用WP\\u Query来实现这一点,但它使用了用户的好名字来进行搜索,但搜索不起作用。有没有一种方法可以使用内置查询实现这一点,或者我需要执行自定义SQL查询?

add_action( \'rest_api_init\', function () {
  register_rest_route( \'blog-posts/v1\', \'blog-by-author\', array(
    \'methods\' => \'POST\',
    \'callback\' => \'get_posts_by_author\',
    \'permission_callback\' => \'__return_true\',
  ) );
} );

function get_posts_by_author(WP_REST_Request $request) {
    $data = $request->get_params();
    $author_name = $data[\'author_name\'];
    
   // this uses nice name, not first/last name
    $query = new WP_Query( array( \'author_name\' => $author_name ) );
    
    return print_r($query);
}

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

实际上,当你author_name, WP_Query 将使用get_user_by( \'slug\', <author name> ) 要查找具有指定;“好名字”;(user_nicename) 值,如果找到,则WP_Query 设置author arg到找到的用户ID。

因此,您可以遵循相同的方法,但您可以使用get_users() 要查找具有指定名字和/或姓氏的用户,请使用author (或author__in) arg withWP_Query。例如。

$users = get_users( array(
    \'meta_query\'  => array(
        \'relation\' => \'OR\',
        array(
            \'key\'     => \'first_name\',
            \'value\'   => $request[\'author_name\'],
            \'compare\' => \'LIKE\',
        ),
        array(
            \'key\'     => \'last_name\',
            \'value\'   => $request[\'author_name\'],
            \'compare\' => \'LIKE\',
        ),
    ),
    \'fields\'      => \'ID\',
) );

if ( ! empty( $users ) ) {
    $query = new WP_Query( array( \'author\' => $users[0] ) );
    // or to include all found users..
//  $query = new WP_Query( array( \'author__in\' => $users ) );

    // ... your code.
}

附加注释$data = $request->get_params(); 因为您可以通过WP_REST_Request 对象,例如。$request[\'author_name\'] 就像我上面的例子一样。

您应该注册author_name 使用args in the third parameter for register_rest_route(), 或者至少在打电话之前检查它是否为空get_users().

我知道print_r() 在您的代码中只是为了测试,但函数实际上会回显输出,除非第二个参数设置为true..

相关推荐

自定义“The_Posts_Pagination”并将列表放入div

Hello everybody, 我需要有关自定义wordpress分页的帮助。我想得到这个:这就是我所做的:在函数中。php,我添加了以下代码:function wp_custom_pagination($args = [], $class = \'pagination\') { if ($GLOBALS[\'wp_query\']->max_num_pages <= 1) return; $args = wp_parse_args( $args,