Hi,
I just want to know how can I achieve a multiple checkbox combining settings API and get_pages(). I want to have some page listing.
For now I got something like this:
$pages = get_pages('sort_column=post_parent,menu_order');
$value = get_option('my_settings');
foreach ( $pages as $page ) :
$checked = '';
$checked = ( $page->ID == $value ) ? 'checked="checked"': '';?>
<label><input type="checkbox" name="my_settings[]" value="<?php echo $page->ID; ?>" <?php echo $checked; ?> /> <?php echo $page->post_title; ?></label><br />
<?php endforeach;
But I just have one value if I echo my option. Any hint?
Expert answers:
<?php
$pages = get_pages('sort_column=post_parent,menu_order');
$value = maybe_unserialize( get_option('my_settings') );
foreach ( $pages as $page ) :
$checked = '';
if( is_array( $value ) ) {
$checked = in_array($page->ID, $value ) ? 'checked="checked"' : '';
} else {
$checked = ( $page->ID == $value ) ? 'checked="checked"': '';
}
?>
<label>
<input type="checkbox" name="my_settings[]" value="<?php echo $page->ID; ?>" <?php echo $checked; ?> />
<?php echo $page->post_title; ?>
</label>
<br />
<?php
endforeach;
?>
Clothilde comments:
Thanks, the checked is showing up again but I still get only one value, I want multiple choices.
Expert comments:
Can you replace this line with below code and see if it prints an array ??
$value = maybe_unserialize( get_option('my_settings') );
Debug code:
$value = maybe_unserialize( get_option('my_settings') );
print_r( $value );
Else provide here the full code of yours, so we can have a better understanding of form processing.
Expert comments:
Yes, paste the code of this callback function " my_settings_callback " here.
Clothilde comments:
I've post[[LINK href="http://pastebin.com/iUSNLPXb"]] here[[/LINK]]
Clothilde comments:
Here is the code :
function my_settings_callback($inputs)
{
if( !isset( $_POST['settings_nonce'] ) || !wp_verify_nonce( $_POST['settings_nonce'], 'my_settings_nonce' ) ) return;
return $inputs;
}
Clothilde comments:
I need this to work to be used in a is_page() condition. Would be nice if you can do this.
Expert comments:
<?php
switch ( $args['type'] ) :
case 'checkbox' :
?>
<legend class="screen-reader-text"><span><?php echo $args['label_screen']; ?></span></legend>
<?php
$pages = get_pages();
$value = maybe_unserialize( get_my_option($args['name'], '' ) );
foreach ( $pages as $page ) :
$checked = '';
if( is_array( $value ) ) {
$checked = in_array($page->ID, $value ) ? 'checked="checked"' : '';
} else {
$checked = ( $page->ID == $value ) ? 'checked="checked"': '';
}
?>
<label>
<input type="checkbox" id="<?php echo $args['name']; ?>" name="my_settings[<?php echo $args['name']; ?>][]" value="<?php echo $page->ID; ?>" <?php echo $checked; ?>/>
<?php echo $page->post_title; ?>
</label>
<br />
<?php endforeach;
echo $description; ?>
<?php
break;
Expert comments:
Can you check with the above code ?
This is the change done : name="my_settings[<?php echo $args['name']; ?>][]"
Clothilde comments:
You're the best !
Expert comments:
Please upvote my answer !! :)
Clothilde comments:
I can't ! Sorry
Arnav Joy answers:
try this
<?php
$pages = get_pages('sort_column=post_parent,menu_order');
$value = get_option('my_settings');
foreach ( $pages as $page ) :
$checked = '';
$checked = ( @in_array( $page->ID , $value ) ) ? 'checked="checked"': '';?>
<label><input type="checkbox" name="my_settings[]" value="<?php echo $page->ID; ?>" <?php echo $checked; ?> /> <?php echo $page->post_title; ?></label><br />
<?php endforeach;
?>
Clothilde comments:
Thanks but I'm still getting the same, only the last value and nothing is checked now.
Arnav Joy comments:
can you show full code of how you are saving the value?
Clothilde comments:
It's a generic function I made to iterate fields in my callback => case 'checkbox', case 'textarea', etc. I'm saving all values in one function :
add_action( 'admin_init', 'my_register_setting' );
function my_register_setting()
{
register_setting( 'my_slug', my_settings', 'my_settings_callback' );
}
Clothilde comments:
Here is the function @Arnav :
[[LINK href="http://pastebin.com/iUSNLPXb"]]pastebin code[[/LINK]]