Вопрос или проблема
У меня есть несколько проблем с отображением информации из моего пользовательского метабокса в отдельном посте моего пользовательского типа. Я использую Reusable Custom WordPress Meta Boxes от Тэмми Харт.
Я могу отображать текстовые поля, используя этот код:
<?php echo get_post_meta($post->ID, $prefix.'hjemmeside', true); ?>
Но я не могу отобразить изображение, вместо этого DEBUG говорит мне, что это “Неопределенная переменная: post_meta_data”. В настоящее время я использую этот скрипт:
<?php
$custom_image = $post_meta_data['image'][0];
echo wp_get_attachment_image($custom_image, 'thumbnail');
?>
Это неправильно? ID для метаполя изображения – “image”.
Это мой файл functions.php (только часть с метабоксом):
include (TEMPLATEPATH . '/metaboxes/meta_box.php');
$prefix = 'sample_';
$fields = array(
array( // Hjemmeside
'label' => 'Hjemmeside', // <label>
'desc' => 'Введите адрес веб-сайта магазина здесь.', // описание
'id' => $prefix.'hjemmeside', // id и имя поля
'type' => 'text' // тип поля
),
array( // Facebook
'label' => 'Facebook', // <label>
'desc' => 'Введите адрес вашей страницы в Facebook здесь.', // описание
'id' => $prefix.'facebook', // id и имя поля
'type' => 'text' // тип поля
),
array( // Телефон
'label' => 'Телефон', // <label>
'desc' => 'Введите номер телефона магазина здесь.', // описание
'id' => $prefix.'telefon', // id и имя поля
'type' => 'text' // тип поля
),
array( // Email
'label' => 'Email', // <label>
'desc' => 'Введите адрес электронной почты магазина здесь.', // описание
'id' => $prefix.'mailadresse', // id и имя поля
'type' => 'text' // тип поля
),
array( // Расположение в центре
'label' => 'Расположение в центре', // <label>
'desc' => 'Введите, где магазин расположен в центре.', // описание
'id' => $prefix.'senterbeliggenhet', // id и имя поля
'type' => 'textarea' // тип поля
),
array( // Логотип
'label' => 'Логотип', // <label>
'desc' => 'Загрузите логотип магазина здесь.', // описание
'id' => $prefix.'image', // id и имя поля
'type' => 'image' // тип поля
),
);
/**
* Создание экземпляра класса со всеми переменными для создания метабокса
* var $id string id метабокса
* var $title string заголовок
* var $fields array поля
* var $page string|array тип поста, к которому нужно добавить метабокс
* var $js bool подключение javascript или нет
*/
$sample_box = new custom_add_meta_box( 'sample_box', 'Информация о магазине', $fields, 'butikker', true );
Также, вот ссылка на файл meta_box.php, который содержит все коды, относящиеся к метабоксам 🙂
Вот вывод var_dump(get_post_custom($post->ID));
array(11) {
["_edit_last"]=> array(1) {
[0]=> string(1) "1"
}
["_edit_lock"]=> array(1) {
[0]=> string(12) "1363962761:1"
}
["_thumbnail_id"]=> array(1) {
[0]=> string(2) "58"
}
["sample_text"]=> array(1) {
[0]=> string(11) "99 88 99 88"
}
["sample_image"]=> array(1) {
[0]=> string(1) "0"
}
["sample_hjemmeside"]=> array(1) {
[0]=> string(21) "www.ethic-clinique.no"
}
["sample_facebook"]=> array(1) {
[0]=> string(31) "www.facebook.com/ethic-clinique"
}
["sample_telefon"]=> array(1) {
[0]=> string(11) "99 88 99 88"
}
["sample_mailadresse"]=> array(1) {
[0]=> string(22) "[email protected]"
}
["sample_senterbeliggenhet"]=> array(1) {
[0]=> string(42) "Третий магазин справа на втором этаже."
}
["sample_logo"]=> array(1) {
[0]=> string(42) "Третий магазин справа на втором этаже."
}
}
Новый var_dump:
array(12) {
["_edit_last"]=> array(1) { [0]=> string(1) "1" }
["_edit_lock"]=> array(1) { [0]=> string(12) "1363964314:1" }
["_thumbnail_id"]=> array(1) { [0]=> string(2) "58" }
["sample_text"]=> array(1) { [0]=> string(11) "99 88 99 88" }
["sample_image"]=> array(1) { [0]=> string(2) "58" }
["sample_hjemmeside"]=> array(1) { [0]=> string(21) "www.ethic-clinique.no" }
["sample_facebook"]=> array(1) { [0]=> string(31) "www.facebook.com/ethic-clinique" }
["sample_telefon"]=> array(1) { [0]=> string(11) "99 88 99 88" }
["sample_mailadresse"]=> array(1) { [0]=> string(22) "[email protected]" }
["sample_senterbeliggenhet"]=> array(1) { [0]=> string(42) "Третий магазин справа на втором этаже." }
["sample_logo"]=> array(1) { [0]=> string(42) "Третий магазин справа на втором этаже." }
["sample_repeatable"]=> array(1) { [0]=> string(74) "a:1:{i:0;a:3:{s:5:"image";s:2:"89";s:5:"title";s:0:"";s:4:"desc";s:0:"";}}" }
}
Буду признателен за любую помощь по этому вопросу 🙂
Я не знаю точно, как работает этот плагин, и вы опубликовали код, который, вероятно, не имеет контекста, но вам нужно определить $post_meta_data
перед выполнением строки:
$custom_image = $post_meta_data['image'][0];
Кажется, что плагин использует мета-посты, поэтому вам нужно нечто подобное:
<?php echo get_post_meta($post->ID, $prefix.'hjemmeside', true); ?>
Но переписать, чтобы сохранить данные в переменной вместо echo
. Судя по коду, который вы опубликовали, я считаю, вам нужно:
$post_meta_data = get_post_meta($post->ID, $prefix.'image', true);
if (!empty($post_meta_data[0])) {
$custom_image = wp_get_attachment_image($post_meta_data[0], 'thumbnail');
}
echo $custom_image; // если необходимо
Не проверено, но имеет хорошие шансы сработать.
Попробуйте это:
get_post_meta(get_the_id(),'hjemmeside', true);
Предполагает, что hjemmeside – это название вашего ключа пользовательского поля.
Ответ или решение
Чтобы отобразить изображение из вашего пользовательского метабокса в одиночном представлении пользовательского типа записи, используя плагин "Reusable Custom WordPress Meta Boxes" от Тэмми Харт, вам необходимо убедиться, что вы правильно обращаетесь к метаданным поста. Поскольку вы получаете ошибку "Неопределенная переменная: post_meta_data", это указывает на то, что переменная не была корректно инициализирована перед ее использованием.
Вот шаги, которые необходимо предпринять для исправления этой проблемы:
-
Объявите переменную для метаданных поста. Вам нужно получить метаданные вашего поста, используя функцию
get_post_meta
, и сохранить их в переменной. -
Используйте правильный ключ. Убедитесь, что вы используете правильный ключ для доступа к вашему изображению. В вашей таблице
var_dump
указано, что изображение хранится под ключомsample_image
. -
Вывод изображения. После получения идентификатора изображения вам нужно использовать
wp_get_attachment_image
, передав идентификатор и размер изображения.
Вот скорректированный код, который поможет вам решить вашу проблему:
<?php
// Получаем идентификатор текущего поста
$post_id = get_the_ID();
// Получаем метаданные поста для поля "sample_image"
$post_meta_data = get_post_meta($post_id, $prefix.'image', true);
// Проверяем, существует ли идентификатор изображения
if (!empty($post_meta_data[0])) {
// Получаем изображение по идентификатору и выводим его
echo wp_get_attachment_image($post_meta_data[0], 'thumbnail');
} else {
// Здесь можно вывести сообщение, если изображение не задано
echo 'Изображение не найдено.';
}
?>
Объяснение кода:
$post_id = get_the_ID();
– Получаем идентификатор текущего поста.$post_meta_data = get_post_meta($post_id, $prefix.'image', true);
– Загружаем метаданные, используя корректный ключ.- Проверка и вывод – Если данные метаданных не пустые, то выводим изображение. Если изображение отсутствует, выводим сообщение об этом.
Дополнительные рекомендации:
- Убедитесь, что вы правильно указали префикс в переменной
$prefix
, чтобы избежать ошибок при доступе к метаданным. - Также проверьте, что ваше поле изображения в метабоксе правильно сохранено и содержит актуальный идентификатор вложения.
Следуя этим шагам, вы сможете успешно отобразить изображение из вашего пользовательского метабокса в шаблоне одиночного поста. Если у вас возникнут дополнительные вопросы или проблемы, не стесняйтесь спрашивать.