get_post_meta возвращает только Array

25 мая 2012 г., 00:49:41
Просмотры: 28.5K
Голосов: 1

Вот что я пытаюсь сделать:

Я пытаюсь сделать так, чтобы одна страница в WordPress получала данные из произвольных полей других страниц. Таким образом, когда пользователь создает страницу и использует определенное произвольное поле (в данном случае multiedit_Info), оно будет отображаться на "целевой" странице.

Вот код, с которым я работаю:

<?php $item = get_post_meta($post->ID, 'multiedit_Info', false); ?>
<div id="info-col">
<?php echo $item; ?>
</div>

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

Не уверен, правильно ли я всё настроил или нет. Я использую это впервые, поэтому буду благодарен за любую помощь. Спасибо!

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

Это пустой массив? Обновление: Вместо echo попробуйте <?php print_r( $item ); ?> чтобы увидеть.

getWeberForStackExchange getWeberForStackExchange
25 мая 2012 г. 00:53:56
Все ответы на вопрос 2
5

Когда вы устанавливаете третий параметр функции get_post_meta() в значение false, она возвращает массив всех значений, связанных с этим ключом. Установка этого параметра в true возвращает единственное значение.

Таким образом, ваш код верен. Вы получите точно такой же результат, если сделаете что-то вроде этого:

$test = array( "1", "2", "3" );
echo $test; // выведет "Array"

Если вы хотите увидеть содержимое вашего массива, вам нужно использовать print_r():

$item = get_post_meta( $post->ID, 'multiedit_Info', false );
echo print_r( $item );

Если бы вы применили это к массиву $test из моего предыдущего примера, вы бы увидели:

Array
(
    [0] => "1"
    [1] => "2"
    [2] => "3"
)
25 мая 2012 г. 00:55:43
Комментарии

Хорошо, если я изменю на это:

<?php $item = get_post_meta($post->ID, 'multiedit_Info', false); ?> <div id="info-col"> <?php print_r( $item ); ?> </div>

Выводится следующее:

Array ( [0] => )

ultraloveninja ultraloveninja
25 мая 2012 г. 01:13:31

OK, это означает, что у вас пустой массив. В этом мета-ключе для данного ID записи ничего не сохранено.

EAMann EAMann
25 мая 2012 г. 01:49:17

Значит, это будет работать для ВСЕХ пользовательских полей на страницах или только для этого одного? Я пытаюсь получить ВСЕ или ЛЮБЫЕ пользовательские поля с этой мета-информацией.

ultraloveninja ultraloveninja
25 мая 2012 г. 02:31:01

get_post_meta() получает метаданные только для отдельного поста/страницы. Я не совсем понимаю, что вы пытаетесь сделать сейчас, и в вашем вопросе это не очень понятно. Не могли бы вы отредактировать свой вопрос, чтобы добавить некоторые уточнения? Не просто перечисляйте, что вы пробовали, а объясните подробно, чего вы пытаетесь достичь.

EAMann EAMann
25 мая 2012 г. 02:39:12

Хорошо, я отредактировал свой вопрос. Надеюсь, это немного поможет.

ultraloveninja ultraloveninja
25 мая 2012 г. 04:05:31
0

Отлично, я нашел решение, которое искал, здесь:

получение всех значений для пользовательского ключа поля (перекрестная публикация).

Используя функцию из указанного выше поста и затем вызывая информацию в моем шаблоне с помощью этого кода:

<?php $my_info = get_meta_values( 'multiedit_Info', 'page' ); ?>

и затем выводя их в цикле foreach:

<?php foreach ( $my_var as $item) :
echo "<p>$item</p>";
endforeach; ?>

Я собрал все пользовательские поля со всех страниц, которые их используют, и вывел их на одной странице.

Спасибо за помощь!

25 мая 2012 г. 18:48:11