在我的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提供的所有信息。
答案 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
的名称及其值。名称末尾的[]
表示将存储一组值。