Вопрос: Мета-запрос ACF Post Object по названию, а не по идентификатору

Я пытаюсь запросить тип сообщения (интервенция) через поле объекта поста (vention_country) по названию (соответствующего пользовательского типа записи - страна ).

Что-то вроде:

$wp_query = new WP_Query();$wp_query->query(  array (    'post_type' => 'intervention',    'meta_query' => array(        array(            'key' => 'intervention_country',            'value' => 'country_selected',            'compare' => '=='        )     )));

Можно ли это сделать? Из других вопросов похоже, что я должен дать ID, но я бы хотел сделать запрос, используя вместо этого название CPT (страна), как указано в `'country_selected' выше

Ответы и комментарии:

@ user142553, как я уже сказал, есть несколько решений. Вам придется выбрать, какой из них подходит вам лучше всего.
Создан 25-11-2018 09:33 Krzysiek Dróżdż

Спасибо за ваш ответ и помощь. Очень признателен.
Создан 25-11-2018 09:30 user142553

Это можно сделать, но это будет не так просто. Почтовый объект хранится в виде идентификатора, поэтому вы не можете использовать мета-запрос для поиска по названию поста в таком случае ... Существует несколько способов решения этой проблемы:
1. Используйте действие acf / save_post, чтобы сохранить заголовок данного объекта записи как другое мета-значение:
// Добавить это в ваши functions.php
функция save_intervention_country_name ($ post_id) {
    $ country_id = get_field ('vention_country ', $ post_id);
    if ($ country_id) {
        update_post_meta ($ post_id, 'interval_country_name', get_post_field ('post_title', $ country_id));
    }
}
add_action ('acf / save_post', 'save_intervention_country_name', 20);

И тогда вы можете искать, используя поле interval_country_name:
$ wp_query-> query (array (
    'post_type' => 'вмешательство',
    'meta_query' => array (
        массив (
            «ключ» => «интервенционное_имя»,
            'value' => <ИМЯ СТРАНЫ>,
            'сравнить' => '=='
        )
     )
));

2. Используйте фильтры posts_where и posts_join для изменения SQL-запроса.
Вам нужно будет добавить оператор JOIN, чтобы соединить поле вашего поста с таблицей постов, а затем добавить поиск по названию.
3. Измените вашу форму таким образом, чтобы она выполняла поиск по идентификатору, а не по имени.
Поэтому, если есть поле выбора, заполните его значения идентификаторами. Или, если вы не можете этого сделать, вы всегда можете сначала получить страну, а затем использовать ее ID:
$ country = get_page_by_title (, OBJECT, );
if ($ country) {
    $ wp_query-> query (array (
        'post_type' => 'вмешательство',
        'meta_query' => array (
            массив (
                'key' =>'vention_country ',
                'value' => $ country-> ID,
                'сравнить' => '=='
            )
         )
    ));
}
Создан 25-11-2018 09:36 Krzysiek Dróżdż13.1k52740