Как получить значение мета-поля по ключу в WordPress

13 мар. 2013 г., 17:57:26
Просмотры: 37.2K
Голосов: 4

Как получить значение мета-поля по мета-ключу

Я хочу получить значение по мета-ключу. Вот что я пробовал до сих пор:

   $args = array(
    'post_type' => 'post', // тип записи
    'post_status' => 'publish', // статус публикации
    'posts_per_page' => -1, // все записи
    'meta_key' => 'picture_upload_1'
);
$dbResult = new WP_Query($args);

var_dump($dbResult);

но я не получаю значение мета-поля

6
Комментарии

http://codex.wordpress.org/Function_Reference/get_post_meta

Johannes Pille Johannes Pille
13 мар. 2013 г. 18:10:15

спасибо, но, как упомянуто в вопросе, мне нужно получить значение метаполя по ключу метаполя. У меня нет ID записи!

meWantToLearn meWantToLearn
13 мар. 2013 г. 18:14:10

если у вас нет ID записи, как вы узнаете, какое именно значение метаполя вам нужно, если у нескольких записей есть этот ключ? что вы планируете делать с этими значениями метаполей?

Milo Milo
13 мар. 2013 г. 18:20:42

я пишу плагин, у него есть произвольный тип записи и шорткод, который принимает параметр. Когда пользователь сохраняет произвольную запись, я сохраняю ключ в формате slideshow_1, где 1 — это случайный уникальный ключ. Когда пользователь использует шорткод [images id=1], я добавляю 1 к slideshow_ и выполняю запрос, чтобы получить мета-значение, содержащее путь к изображению

meWantToLearn meWantToLearn
13 мар. 2013 г. 18:21:53

это не отвечает ни на один из моих вопросов.

Milo Milo
13 мар. 2013 г. 18:23:04

не будет нескольких записей с одинаковым ключом, ключ будет уникальным

meWantToLearn meWantToLearn
13 мар. 2013 г. 18:24:59
Показать остальные 1 комментариев
Все ответы на вопрос 3
1

WP_Query выбирает записи, а не мета-значения, поэтому вы не получаете нужное значение. Вы можете использовать возвращаемый ID записи, чтобы получить значение, например:

$args = array(
    'post_type' => 'post',
    'post_status' => 'publish',
    'posts_per_page' => 1,
    'meta_key' => 'picture_upload_1'
);
$dbResult = new WP_Query($args);
global $post;
if ($dbResult->have_posts()){
   $dbResult->the_post();
   $value = get_post_meta($post->ID,'picture_upload_1',true);
}

Этот код получит мета-значение последней опубликованной записи, у которой есть произвольное поле с именем picture_upload_1.

Еще один способ — создать запрос вручную, например:

global $wpdb;
$value = $wpdb->get_var( $wpdb->prepare("SELECT meta_value FROM $wpdb->postmeta WHERE meta_key = %s LIMIT 1" , $meta_key) );
13 мар. 2013 г. 18:25:08
Комментарии

это здорово, но зачем нам нужно делать global $post и $dbResult->the_post(); и почему post_content пустой, когда мы используем функцию $dbResult->get_posts();

mohsin mohsin
20 окт. 2017 г. 18:04:45
2

Получить все значения meta_key в любом месте:

global $wpdb;
$meta_key = 'picture_upload_1';

$data = $wpdb->get_results($wpdb->prepare( "SELECT DISTINCT meta_value FROM $wpdb->postmeta WHERE meta_key = %s", $meta_key) , ARRAY_N  );

$result = [];
foreach($data as $array){
    $result[] = $array[0];
}

print_r($result);
14 авг. 2020 г. 19:38:46
Комментарии

Зачем ты снова проходишь по этому массиву?

fuxia fuxia
15 авг. 2020 г. 02:56:14

Потому что исходный массив содержит вложенные массивы (многомерный массив)

Hisham Dalal Hisham Dalal
15 авг. 2020 г. 10:21:39
0

Не лучше ли сохранить значение в таблице wp_options вместо wp_postmetas?

В таком случае можно использовать функцию get_option с вашим пользовательским ключом для установки и получения значения.

https://developer.wordpress.org/reference/functions/get_option/

14 авг. 2020 г. 19:53:08