WordPress Widget-将多维数组保存到$INSTANCE

时间:2013-08-27 作者:Kurt

在我的wp小部件中,$instance 具有名为order 这将是图书馆/服务的列表顺序。我想存储一个多维关联数组,该数组将保存每个位置/服务的id、其类型(即,如果是位置或服务)及其名称。我希望它看起来像这样:

 array(
     [0] => ( \'id\' => 1, \'type\' => \'location\', \'name\' => \'University Library\'),
     [1] => ( \'id\' => 7, \'type\' => \'service\', \'name\' => \'Circulation Desk\') );
下面是wp小部件管理窗格的html标记,以及$instance[\'order\']:

<label>
  <?php _e( \'Select ordering\', \'olh\' ); ?>:
</label>

<select
  name=\'select-hours-order\'
  class=\'select-hours-order\'>
  <!-- dynamically populated by jQuery -->
</select>

<a 
  class=\'add-location-service\'>
  <i>+</i>
</a>

<ul
  name=\'<?php echo $this->get_field_name( \'order\' ) ?>[]\'
  id=\'<?php echo $this->get_field_id( \'order\' ) ?>\'
  class=\'location-service-order\' >

  <?php 
    foreach ($instance[\'order\'] as $order ) : ?>

    <li
      class="<?php echo $order[\'class\'] ?>"
      value="<?php echo $order[\'value\'] ?>">
      <?php echo $order[\'name\'] ?>
    </li>
  <?php endforeach; ?>

</ul>
用户可以通过多选下拉菜单选择要显示的位置/服务。每当用户选择库/服务时,它都会自动填充select.select-hours-order. 然后,用户可以单击+ 的按钮a.add-location-service 将其添加到ul.location-service-order.

从那里,我想保存li第页,共页ul.location-service-order 使用我上面指定的属性。

谢谢你们提供的所有信息。

1 个回复
SO网友:Kurt

我最终使用了一种变通方法来解决这个问题。我没有像上面所描述的那样尝试存储多维数组,而是存储通过将类型与id相结合创建的值的简单数组。

因此,不是:

array(
   [0] => ( \'id\' => 1, \'type\' => \'location\', \'name\' => \'University Library\'),
   [1] => ( \'id\' => 7, \'type\' => \'service\', \'name\' => \'Circulation Desk\') );
阵列变为:

array( \'L1\', \'S7\' );
对于列表项,我在列表项中嵌套了一个隐藏输入,该输入将附加名称和要存储的值,如下所示:

  <?php 
    foreach( $instance[\'order\'] as $order ) : 
      if( $order ) : ?>

        <li value=\'<?php echo $order ?>\'>
          <span> Library name. </span>
          <input 
            type=\'hidden\'
            name=\'<?php echo $this->get_field_name( \'order\' ) ?>[]\'
            value=\'<?php echo $order ?>\'
          />

          <a class=\'destroy_parent\'>X</a>
        </li>

  <?php 
    endif;
  endforeach; ?>
请注意input\'s名称及其值。这个[] 名称末尾表示将存储一个值数组。

结束