1

I would like to have a metabox for the user to be able to select from a dropdown list one page from the website. I need to save the user choice, so I can use it later. So, my question is how can I create a metabox that will list all my pages?

1 Answer 1

3

You can use wp_dropdown_pages. For example

 add_action( 'add_meta_boxes', 'myplugin_add_custom_box' );

/* Adds a box to the main column on the Post edit screens */
function myplugin_add_custom_box() {
    add_meta_box( 
        'myplugin_sectionid',
        __( 'My Post Section Title', 'myplugin_textdomain' ),
        'myplugin_inner_custom_box',
        'post' 
    );
}

/* Prints the box content */
function myplugin_inner_custom_box( $post ) {

     $dropdown_args = array(
        'post_type'        => 'page'
        'name'             => 'myplugin[page]',
        'sort_column'      => 'menu_order, post_title',
        'echo'             => 1,
    );

         // Use nonce for verification
         wp_nonce_field( plugin_basename( __FILE__ ), 'myplugin_noncename');

         //Dropdown of pages
         wp_dropdown_pages( $dropdown_args );
}

See also the Codex on handling metabox data.

4
  • Sorry, I wasn't clear enough. This metabox will be use for a theme and not in a plugin.
    – Old Castle
    Commented Jul 3, 2012 at 10:03
  • This will work in functions.php too - but it is recommended to have things like this in a plug-in. Commented Jul 3, 2012 at 10:07
  • Last question. How can I retrieve the user choice?
    – Old Castle
    Commented Jul 3, 2012 at 10:10
  • Hook onto save_post then (after checking its not a revision, and checking nonce, permissions etc - see example on Codex). Inspect $_POST. In this example $_POST['myplugin']['page'] will hold the ID of the selected page. Commented Jul 3, 2012 at 10:15

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.