In my wp widget, $instance
has an attribute called order
which will the listing order of libraries/services. I’d like to store a multidimensional associative array that will hold the id of each location/service, its type (i.e. if it’s a location or a service), and it’s name. I’d like it to look something like this:
array(
[0] => ( 'id' => 1, 'type' => 'location', 'name' => 'University Library'),
[1] => ( 'id' => 7, 'type' => 'service', 'name' => 'Circulation Desk') );
Below is the html markup for the wp widget admin pane and $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>
The user can choose what locations/services s/he wants to display with a multi-select dropdown. Whenever the user selects a library/service, it automatically populates select.select-hours-order
. The user can then click the +
button of a.add-location-service
to add it to ul.location-service-order
.
From there, I’d like to save the li
s of ul.location-service-order
with the attributes I specified above.
Thank you gals/guys for any and all info.
I ended up using a workaround to solve this problem. Instead of attempting to store a multidimensional array as described above, I instead store a simple array of values created by combining the type with the id.
So, instead of:
The array becomes:
For the list items, I nested a hidden input inside the list item that will has the name attached and the value I want to store, like so:
Notice the
input
‘s name and it’s value. The[]
at the end of the name indicates that an array of values will be stored.