WordPress 使用 in_array 检查函数
WordPress checked function with in_array
Wordpress 插件。
我需要 checked="checked"
复选框。我将它们存储在一个数组中。
我遇到的问题是,如果存储了复选框,它们不会 "check" 复选框。
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 )
您的 $data
包含一个 serialized 字符串(在索引 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).' />';
Wordpress 插件。
我需要 checked="checked"
复选框。我将它们存储在一个数组中。
我遇到的问题是,如果存储了复选框,它们不会 "check" 复选框。
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 )
您的 $data
包含一个 serialized 字符串(在索引 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).' />';