WordPress проверил функцию с помощью in_array

Плагин для WordPress
Мне необходимо checked="checked" для флажков. Я храню их в массиве.

У меня проблема в том, что, если флажки сохранены, они не «проверяют» флажок.

 public function display() {

$html = '';
// Add an nonce field so we can check for it later.
wp_nonce_field( basename( __FILE__ ), 'nonce_check_value' );
$html .= '<label for="CMBUserBoxName">Name metabox: </label>';
$html .= '<input type="text" name="CMBUserBoxName" value="' . get_post_meta( get_the_ID(), 'CMBUserBoxName', true ). '">';
$data = get_post_meta(get_the_ID(), 'CMBUserRequestedOption');
echo '<pre>';
print_r($data);
echo '</pre>';

$html .= 'Radio: ';
$html .= '<input type="checkbox" name="CMBUserRequestedOption[Radio]" value="1" '.checked( in_array( 1, $data ), 1, false ).' />';



$html .= '</br>';

$html .= 'Checkbox: ';
$html .= '<input type="checkbox" name="CMBUserRequestedOption[Checkbox]" value="1" '.checked( in_array( 1, $data ), 1, false ).' />';


echo $html;
}

print_r($data) знак равно

Array
(
[0] => a:2:{s:5:"Radio";s:1:"1";s:8:"Checkbox";s:1:"1";}
)

Функция сохранения:

if(isset($_POST['CMBUserRequestedOption'])  ){
$data=serialize($_POST['CMBUserRequestedOption']);

update_post_meta($post_id, 'CMBUserRequestedOption', $data);

я думаю checked() чего-то не хватает
checked( in_array( 1, $data ), 1, false )

0

Решение

Ваш $data содержит сериализованная строка (по индексу 0). Если вы хотите проверить содержащиеся в нем данные, вы должны десериализовать их.

$data = Array(
'a:2:{s:5:"Radio";s:1:"1";s:8:"Checkbox";s:1:"1";}'
);
$data[0] = unserialize($data[0]);

Тогда вы могли бы использовать checked($data[0]['Radio'], 1, false):

$html .= '<input type="checkbox" name="CMBUserRequestedOption[Radio]" value="1" '.checked($data[0]['Radio'], 1, false).' />';
$html .= '<input type="checkbox" name="CMBUserRequestedOption[Checkbox]" value="1" '.checked($data[0]['Checkbox'], 1, false).' />';

Или, как указал @Nawin, вы можете получить данные в виде значения вместо массива:

$data  = get_post_meta(get_the_ID(), 'CMBUserRequestedOption', true);
$data = unserialize($data);
// echo checked($data['Radio'], 1, false);
// echo checked($data['Checkbox'], 1, false);

$html .= '<input type="checkbox" name="CMBUserRequestedOption[Radio]" value="1" '.checked($data['Radio'], 1, false).' />';
$html .= '<input type="checkbox" name="CMBUserRequestedOption[Checkbox]" value="1" '.checked($data['Checkbox'], 1, false).' />';

Смотрите также maybe_unserialize().

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector