Отношения между 2 пользовательскими постами в WP - PullRequest
0 голосов
/ 27 апреля 2018

Я создал 2 пользовательских типа записей с плагином «Pods - Custom Content Types and Fields» в WP с именами Company и Location. Кроме того, я создал поле отношения в Location типе записи под названием parent_company_name.

А сейчас я пытаюсь получить сообщения по этому полю отношений.

Я попробовал этот код:

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

однако он возвращает пустой массив.

Я знаю, что для связи между типом поста и таксономией я могу сделать что-то вроде этого:

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

Но что я могу сделать для двух типов записей, чтобы получить одинаковый результат?

1 Ответ

0 голосов
/ 28 апреля 2018

Вы используете плагин Pods - Пользовательские типы контента и поля , которые имеют свою собственную логику, создают таблицу в базе данных для отношений с именем {your-db-prefix_}podsrel и имеют много связанные опции .

То, что у вас есть, - 2 пользовательских типа сообщений (Company и Location), которые относятся к следующему: Location 'parent_company_name - это немного Company.

parent_company_name сохранено в базе данных (в таблице {your-db-prefix_}postmeta) как meta_key для Location с id для некоторых 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 с идентификаторами как отношения:

enter image description here

2 пути с моей стороны для достижения вашей цели:

  1. У вас нет id вашего Company, а есть только его имя (Заголовок):

    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, которая возвращает id Company, используя ее имя. Мы использовали функцию get_page_by_title() для возврата идентификатора. После того, как мы просто использовали get_posts.

    Примечание : это будет работать намного медленнее, чем, если у нас будет id Company

  2. У вас есть id компании, что составляет parent_company_name для нашего Location:

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

    Наш Company идентификатор равен 9 в этом примере.

Приведенные способы являются лишь основными. Вы можете использовать WP_Query , работать с $ wpdb , используя SQL-запросы и т. Д.

...