Получить все сообщения, которые имеют настраиваемое значение поля с мета-ключом, и зациклить результаты запроса из другого значения поля - PullRequest
0 голосов
/ 02 февраля 2019

как я могу получить все записи с пользовательским типом записи 'папка' и 'файл', которые имеют одинаковое значение настраиваемого поля в настраиваемом поле 'wpcf-secret-id-1', и в случае, если есть результаты, я хотел бычтобы показать значение другого настраиваемого поля 'wpcf-secret-id-2'.

Я пробовал следующий код, но, кажется, не работает:

function get_all_post_from_field_value($postid)
{
    $args  = array(
        'post_type' => array(
            'folder', 'file'
        ),
        'meta_query' => array(
            array(
                'key' => 'wpcf-secret-id-1',
                'value' => ( $postid )
            )
        )
    );
    // The Query
    $query = new WP_Query($args);
    // The Loop
    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            // I am not sure how to get the field value of 'wpcf-secret-id-2'
            return get_post_field('wpcf-secret-id-2');
        }
    }
  
}
add_shortcode( 'get-posts-by-field-value', 'get_all_post_from_field_value');

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

1 Ответ

0 голосов
/ 02 февраля 2019

Похоже, что это должно сработать, я не вижу ничего явно неправильного в вашем запросе.

Единственное, что может происходить, так это: эти пользовательские поля скрыты?Вы смотрели в своей таблице post_meta в своей базе данных, чтобы проверить правильный ключ для запроса для wpcf-secret-id-1 и wpcf-secret-id-2?Если они скрыты от серверной части, к ним может быть добавлено нижнее подчеркивание, например: _wpcf-secret-id-1.

Кроме того, использование WP_Query в этом случае некорректно.Вы переопределяете весь цикл Wordpress с помощью $query->the_post(); и возвращаетесь из функции перед сбросом с помощью wp_reset_postdata .

Лучший способ сделать это будет:

$query = new WP_Query($args);

if ($query->found_posts > 0) {

    $post = $query->posts[0];
    return get_post_meta($post->ID, 'wpcf-secret-id-2', true);
}
else
{
   return ""; //Good habit: if you are returning some value, make sure you always return *something*, even when there is no value to return.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...