【问题标题】:WordPress checked function with in_arrayWordPress 使用 in_array 检查函数
【发布时间】:2018-08-31 17:05:26
【问题描述】:

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 )

【问题讨论】:

  • 你的print_r($data);数据是什么?
  • 请查看更新
  • 是数组a:2:{s:5:"Radio";s:1:"1";s:8:"Checkbox";s:1:"1";} 吗?
  • 是的。那我错过了什么?
  • 不,这不是一个数组...尝试像这样更改您的获取帖子元get_post_meta(get_the_ID(), 'CMBUserRequestedOption', true)

标签: php wordpress checkbox checked meta-boxes


【解决方案1】:

您的$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).' />';

另见maybe_unserialize()

【讨论】:

  • 感谢您的解释。如果我什么都不检查并将值保存在数据库中,则不会更新。所以由于某种原因,它总是需要检查一个选项?
  • @Interactive 真的很抱歉,但我不知道 Wordpress 是如何工作的,以及它如何将发布的值保存在数据库中。
  • 好的。也许是另一个问题。对我帮助很大。竖起大拇指!
猜你喜欢
  • 1970-01-01
  • 2017-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多