WP 中 2 个自定义帖子之间的关系

Relationship between 2 custom posts in WP

我在名为 CompanyLocation 的 WP 中使用 "Pods - Custom Content Types and Fields" 插件创建了 2 个自定义 post 类型。此外,我在 Location post 类型中创建了名为 parent_company_name.

的关系字段

现在我正尝试通过此关系字段获取 posts。

我试过这段代码:

$pos = get_posts(
    array(
        'numberposts' => 1000,
        'post_type' => 'location',
        'meta_key' => 'parent_company_name',
        'meta_value' => $full_company_name
    )
);

但是它 returns 是一个空数组。

我知道对于 post 类型和分类法之间的关系,我可以做这样的事情:

$posts_array = get_posts(
    array(
        'numberposts' => 1000,
        'post_type' => 'compan_name',
        'tax_query' => array(
            array(
                'taxonomy' => 'type_of_compan',
                'field' => 'slug',
                'terms' => $company_slug,
            )
        )   
    )
);  

但是我可以为 2 post 类型做些什么来获得相同的结果?

您正在使用插件 Pods - Custom Content Types and Fields, which have it's own logic, creates table in the database for Relationship named {your-db-prefix_}podsrel and have a lot of related options

您拥有的是 - 2 个自定义帖子类型(CompanyLocation),它们的关系如下:Locationparent_company_name 是一些 Company.

parent_company_name 保存在数据库中(在 {your-db-prefix_}postmeta table 中)作为 meta_key for Location with id of some Company 作为 meta_value:

 meta_id  |   post_id    |       meta_key      |   meta_value
----------+--------------+---------------------+----------------
 some_id  | some_post_id | parent_company_name | some_Company_id

并且在 {your-db-prefix_}podsrel table 中与 id 的关系为:

我这边实现你的目标的 2 种方法:

  1. 您的 Company 没有 id,只有名字(标题):

    function ww_get_id_by_title($title, $post_type = 'company'){
        $post = get_page_by_title($title, OBJECT, $post_type);
    
        return (!empty($post)) ? $post->ID : false;
    }
    
    $pos = get_posts(
        array(
            'numberposts' => 1000,
            'post_type' => 'location',
            'meta_key' => 'parent_company_name',
            'meta_value' => ww_get_id_by_title($full_company_name)
        )
    );
    

    这里我们创建函数 ww_get_id_by_title,它 return 是公司的 id 使用它的名称。我们使用 get_page_by_title() 函数来 return id。在我们刚刚使用 get_posts.

    之后

    注意:这会比我们使用 Company

  2. id 慢得多
  3. 你有公司的id,对于我们的Location来说是parent_company_name:

    $company_id = 9;
    
    $pos = get_posts(
        array(
            'numberposts' => 1000,
            'post_type' => 'location',
            'meta_key' => 'parent_company_name',
            'meta_value' => $company_id
        )
    );
    

    本例中我们的 Company id 为 9。

提供的方法只是基本的。您可以使用 WP_Query, work with $wpdb 使用 SQL 查询等