Я делаю список флажков в метаполе WordPress и не могу получить это значение в своей теме.
я могу получить текстовое значение с помощью этого кода
<? echo get_post_meta($post->ID, $prefix . 'text', true); ?>
Но если я использую этот код в флажке, это даст мне «Массив»
Это мой полный код
$prefix = 'dbt_';
$meta_box = array(
'id' => 'my-meta-box',
'title' => 'Product Information',
'page' => 'post',
'context' => 'normal',
'priority' => 'high',
'fields' => array(
array(
'name' => 'Colors',
'desc' => '',
'id' => $prefix.'colors',
'type' => 'checkbox_group',
'options' => array (
'one' => array (
'label' => 'Black',
'value' => 'one'
),
'two' => array (
'label' => 'White',
'value' => 'two'
),
'three' => array (
'label' => 'Red',
'value' => 'three'
),
'four' => array (
'label' => 'Blue',
'value' => 'four'
),
'five' => array (
'label' => 'Green',
'value' => 'five'
),
'six' => array (
'label' => 'Yellow',
'value' => 'six'
),
'seven' => array (
'label' => 'Brown',
'value' => 'seven'
)
)
)
)
);
add_action('admin_menu', 'mytheme_add_box');
// Add meta box
function mytheme_add_box() {
global $meta_box;
add_meta_box($meta_box['id'], $meta_box['title'], 'mytheme_show_box', $meta_box['page'], $meta_box['context'], $meta_box['priority']);
}
// Callback function to show fields in meta box
function mytheme_show_box() {
global $meta_box, $post;
// Use nonce for verification
echo '<input type="hidden" name="mytheme_meta_box_nonce" value="', wp_create_nonce(basename(__FILE__)), '" />';
echo '<table class="form-table">';
foreach ($meta_box['fields'] as $field) {
// get current post meta data
$meta = get_post_meta($post->ID, $field['id'], true);
echo '<tr>',
'<th style="width:20%"><label for="', $field['id'], '">', $field['name'], '</label></th>',
'<td>';
switch ($field['type']) {
case 'checkbox_group':
foreach ($field['options'] as $option) {
echo '<input type="checkbox" value="'.$option['value'].'" name="'.$field['id'].'[]" id="'.$option['value'].'"',$meta && in_array($option['value'], $meta) ? ' checked="checked"' : '',' />
<label for="'.$option['value'].'">'.$option['label'].'</label><br />';
}
break;
}
echo '</td><td>',
'</td></tr>';
}
echo '</table>';
}add_action('save_post', 'mytheme_save_data');
// Save data from meta box
function mytheme_save_data($post_id) {
global $meta_box;
// verify nonce
if (!wp_verify_nonce($_POST['mytheme_meta_box_nonce'], basename(__FILE__))) {
return $post_id;
}
// check autosave
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return $post_id;
}
// check permissions
if ('page' == $_POST['post_type']) {
if (!current_user_can('edit_page', $post_id)) {
return $post_id;
}
} elseif (!current_user_can('edit_post', $post_id)) {
return $post_id;
}
foreach ($meta_box['fields'] as $field) {
$old = get_post_meta($post_id, $field['id'], true);
$new = $_POST[$field['id']];
if ($new && $new != $old) {
update_post_meta($post_id, $field['id'], $new);
} elseif ('' == $new && $old) {
delete_post_meta($post_id, $field['id'], $old);
}
}
}
Любое тело может дать мне правильный полный код, чтобы получить мои значения, потому что я пытаюсь выучить язык PHP
Это моя первая тема WordPress, и я надеюсь, что смогу закончить ее быстро,
Спасибо
Обычно это происходит, когда вы пытаетесь привести массив в виде строки. Например:
$data = array('one', 'two', 'three');
echo $data;
// will echo Array
Пересмотрите свой цикл и как вы получаете доступ к его значениям. Используйте что-то вроде print_r () или var_dump () для предварительного просмотра данных перед их использованием.
Внутри вашего цикла массива, возможно, добавление второго цикла даст вам необходимые вам значения массива. Кроме того, ваш код внутри цикла на первый взгляд выглядит так, как будто могут быть некоторые синтаксические ошибки.
foreach ($field['options'] as $options) {
foreach ($options as $option) {
...
...
}
}
Не проверено, но вот пример
foreach ($field['options'] as $options) {
foreach ($options as $option) {
$checked = $meta && in_array($option['value'], $meta) ? 'checked="checked"' : '';
echo '<input type="checkbox" value="' . $option["value"] . '" name="' . $field["id"] . '[]" id="' . $option["value"] . ' ' . $checked . ' />';
echo '<label for="' . $option["value"] . '">' . $option["label"] . '</label>';
echo '<br />';
}
}