搜索

首页  >  问答  >  正文

WordPress 如何使用元查询跨多种帖子类型进行查询

我遇到了三个相当复杂的问题。首先,我有两种自定义帖子类型:一种用于部门,一种用于员工。在员工中,您可以为每个员工选择各种职位/字段(标记为“附加角色”),但我需要的两个是“员工”和“图书馆”。

我需要的第一个查询是属于任何部门的所有员工、属于员工的员工或属于图书馆的员工。有些员工只是其中之一,或者是三者的组合。

接下来的两个稍微简单一些。我仅对仅是职员(不属于某个部门)或仅是图书馆(也不属于某个部门)的员工进行一次查询。

我一直在编写和重写这些查询,但没有取得任何进展。我认为需要一些我无法弄清楚的 SQL 命令。我将分享我的最新迭代。

对于第一个查询(部门、员工或图书馆的员工):

$args = array(
    'post_type'   => 'employee',
    'post_status' => 'publish',
    'posts_per_page'  => '-1',
    'orderby'   => 'meta_value',
    'meta_key'  => 'last_name',
    'order'     => 'ASC',
    'meta_query' => array(
        array(
            'key'     => 'additional_roles',
            'value'   => array('staff', 'library'),
            'compare' => 'IN',
        ),
    ),
);
$query = new WP_Query($args);

第二个(仅工作人员)

$args = array(
    'post_type' => 'employee',
    'post_status' => 'publish',
    'posts_per_page' => '-1',
    'meta_key' => 'additional_roles',
    'meta_value' => 'staff',
);
$query = new WP_Query($args);

图书馆的查询与职员相同,只是meta_value是'library'。我知道第一个不应该工作,因为它没有连接到部门 cpt,但不知道该怎么做。但我不确定为什么其他两个不起作用。目前我没有收到任何帖子返回。

我希望我已经解释得足够好了。如果需要的话,我很乐意分享更多。谢谢!

P粉170858678P粉170858678346 天前429

全部回复(1)我来回复

  • P粉200138510

    P粉2001385102024-01-17 13:10:46

    posts_per_page 是一个INT(您提供一个字符串)

    $args = array(
        'post_type'   => 'employee',
        'post_status' => 'publish',
        'posts_per_page'  => -1,
        'orderby'   => 'meta_value',
        'meta_key'  => 'last_name',
        'order'     => 'ASC',
        'meta_query' => array(
            'relation' => 'AND',
            array(
                'key'     => 'additional_roles',
                'value'   => array('staff', 'library'),
                'compare' => 'IN',
            ),
            array(
                'key' => 'department',
                'compare' => 'EXISTS',
            ),
        ),
    );
    $first_query = new WP_Query($args);
    
    $staff_args = array(
        'post_type' => 'employee',
        'post_status' => 'publish',
        'posts_per_page' => -1,
        'meta_key' => 'additional_roles',
        'meta_value' => 'staff',
    );
    $staff_query = new WP_Query($staff_args);
    
    $library_args = array(
        'post_type' => 'employee',
        'post_status' => 'publish',
        'posts_per_page' => -1,
        'meta_key' => 'additional_roles',
        'meta_value' => 'library',
    );
    $library_query = new WP_Query($library_args);

    我还没有测试过这段代码。让我知道这是否有帮助

    回复
    0
  • 取消回复