wordpress не работают checkbox'ы

222
27 августа 2017, 05:25

Пишу плагин под вп. В каждом посте есть метабокс и чекбоксами (пока сделал только один чекбокс). При нажатии на опубликовать пост я вижу на странице, что впринципе данные то сохранились, но в каком то странном виде. Плюс не видно, что чекбоксы выбраны в админке в посте. Вот мой код:

<?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") вылазит краказябра непонятная. Вопрос как это поправить, и чтобы в даминке в разделе поста чекбоксы при выборе оставались выбранными всегда

Answer 1

Использование 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"

READ ALSO
Неправильная кодировка в БД

Неправильная кодировка в БД

Записывал данные в бд, русские символы как обычно превращались в "кракозябру"Дописал строчку

184
Дописать недостающие числа в массив и проверить в foreach

Дописать недостающие числа в массив и проверить в foreach

Как можно дописать недостающие числа в массив и в foreach определить что это число было дописано в массив?

273