首页 > 解决方案 > 使用 Wordpress 设置 API 存储数组有奇怪的行为

问题描述

我使用 Wordpress 设置 API 来存储我的插件的一些设置。用户可以放置一些关于公寓的信息(如大小、级别等)。在我的设置清理回调中,我想创建一个数组,因为用户可以存储多个单位。这是我的回调函数。如果该选项不存在,则创建一个新数组。如果它已经存在,则将新平面附加到数组中。

  public function flatSanitize($input) {

    echo '<pre>';
    var_dump($input);
    echo '</pre>';

    $output = get_option('flat_option');

    if ( !$output ) {
      $output = array(
        $input
      );
      echo '<br><pre>';
      var_dump($output);
      echo '</pre>';
      die();
      return $output;
    }


    $output[] = array($input);
    return $output;
  }

此脚本的输出是正确的:

输入:

array(5) {
  ["squaremeter"]=> string(2) "50"
  ["level"] => string(9) "1st floor"
}

输出:

array(1) {
  [0]=>
      array(5) {
          ["squaremeter"] => string(2) "50"
          ["level"]=> string(9) "1st floor"
      }
}

但是,如果我将选项放入数据库并稍后通过 get_option('flat_option') 进行查询,这就是我得到的:

array(1) {
  [0]=>
  array(1) {
    [0]=>
      array(5) {
          ["squaremeter"] => string(2) "50"
          ["level"]=> string(9) "1st floor"
      }
  }
}

如您所见,它总是在数组中放置另一个级别。我无法控制这种行为。对于另一个选项,它总是将它再次放入另一个数组并为此数组使用一个空的“”键,如下所示:

array(1) {
  "" =>
  array(1) {
    [0]=>
      array(5) {
          ["squaremeter"] => string(2) "50"
          ["level"]=> string(9) "1st floor"
      }
  }
}

我怎么解决这个问题?

谢谢你。

标签: phpwordpress

解决方案


我找到了问题的解决方案。在您的插件激活例程中,您应该使用一个空数组的默认值来初始化您的选项,您可以稍后将您的值附加到该数组中:

    if ( ! get_option( 'flat_options' ) ) {
        update_option( 'flat_options', array() );
    }

然后在您的清理回调中,您可以检查数组的计数并附加到数组:

if (count($output) == 0 ) {
  $output[] = $input;
  return $output;
}

推荐阅读