Wordpress小部件 - 将多维数组保存到$ instance中

时间:2013-08-27 18:45:14

标签: wordpress-plugin wordpress

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

 array(
     [0] => ( 'id' => 1, 'type' => 'location', 'name' => 'University Library'),
     [1] => ( 'id' => 7, 'type' => 'service', 'name' => 'Circulation Desk') );

以下是wp小部件管理窗格和$instance['order']的html标记:

<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。然后,用户可以点击+的{​​{1}}按钮将其添加到a.add-location-service

从那里开始,我想将ul.location-service-order li的{​​{1}}与我上面指定的属性一起保存。

感谢gals / guys提供的所有信息。

1 个答案:

答案 0 :(得分:2)

我最终使用解决方法来解决此问题。我没有尝试存储如上所述的多维数组,而是存储通过将类型与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的名称及其值。名称末尾的[]表示将存储一组值。