Пишу плагин под вп. В каждом посте есть метабокс и чекбоксами (пока сделал только один чекбокс). При нажатии на опубликовать пост я вижу на странице, что впринципе данные то сохранились, но в каком то странном виде. Плюс не видно, что чекбоксы выбраны в админке в посте. Вот мой код:
<?php
/*
* Plugin Name: metatest
*/
function ipchecker_add_custom_box()
{
$screens = ['post', 'ipchecker_cpt'];
foreach ($screens as $screen) {
add_meta_box(
'ipchecker_box_id', // Unique ID
'Custom Meta Box Title', // Box title
'ipchecker_custom_box_html', // Content callback, must be of type callable
$screen // Post type
);
}
}
add_action('add_meta_boxes', 'ipchecker_add_custom_box');
function ipchecker_custom_box_html($post)
{
?>
<label for="OS_checkbox">Выберите ОС</label>
<div>Windows 10<input type="checkbox" name="OS_checkbox[]" id="OS_checkbox" value="Windows10" /></div>
<div>Windows 8.0<input type="checkbox" name="OS_checkbox[]" id="OS_checkbox" value="Windows8" /></div>
<?php
}
function ipchecker_save_postdata($post_id)
{
if (array_key_exists('OS_checkbox', $_POST)) {
update_post_meta(
$post_id,
'OS_checked',
$_POST['OS_checkbox']
);
}
}
add_action('save_post', 'ipchecker_save_postdata');
add_filter( 'the_content', 'wfm_sign_content' );
function wfm_sign_content($content){
if( !is_single() ) return $content;
$sss = get_post_custom();
$sss = $sss['OS_checkbox'][0];
$wfm_sign = '<div class="alignright"><em>hi<pre>'.print_r(get_post_custom()).'</pre></em></div><div class="alignright"><em>hif'.$sss.'</em></div>';
return $content . $wfm_sign;
}
?>
И вот что выдает print_r(get_post_custom()):
Array ( [_edit_lock] => Array ( [0] => 1503687167:1 ) [_edit_last] => Array ( [0] => 1 ) [_wporg_meta_key] => Array ( [0] => something ) [featured-checkbox] => Array ( [0] => yes ) [OS_checked] => Array ( [0] => a:1:{i:0;s:8:"Windows8";} ) )
То есть вместо [OS_checked] => Array ( [0] => "Windows8") вылазит краказябра непонятная. Вопрос как это поправить, и чтобы в даминке в разделе поста чекбоксы при выборе оставались выбранными всегда
Использование update_post_meta($post_id, $meta_key, $meta_value, $prev_value);
Если в $meta_value(строка/массив) передать массив, то значение будет серриализованно в строку.
Вам выдало сериализованный массив, то есть его нужно десериализовать
Сделайте такие изменения в коде:
$sss = get_post_custom();
$sss = unserialize($sss);
$sss = $sss[0];
в результате $sss должно быть равно "Windows8"
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Записывал данные в бд, русские символы как обычно превращались в "кракозябру"Дописал строчку
Как можно дописать недостающие числа в массив и в foreach определить что это число было дописано в массив?