web-dev-qa-db-fra.com

add_menu_page Fonction de rappel: Ignorer le contenu de la page?

Je veux avoir un élément de menu qui, en un clic, ajoutera une page avec certains arguments.

Dans sa simplicité, j'ai:

function av_subscribe_create_menu(){
// Create top-level menu
add_menu_page( 'Add Comment Feed', 'Add Comment Feed', 'manage_options', __FILE__, 
    'av_subscribe_create_feed_page', '' );
}
add_action( 'admin_menu', 'av_subscribe_create_menu' );

function av_subscribe_create_feed_page(){

    $page = array(
      'post_type' => 'page',
      'post_status' => 'publish',
      'post_parent' => 13570
    );

    $new_page_id = wp_insert_post($page, false);

}

Cela ne fonctionne pas et même si cela fonctionnait, je ne crois pas que cela me mènerait à l'écran d'édition. Existe-t-il un moyen d'utiliser une fonction pour ajouter un message et accéder directement à l'écran d'édition?

Question bonus également: si vous ne spécifiez pas de titre, mais que vous spécifiez le post_status comme publication, cela créera-t-il automatiquement un slug pour vous? Je ne veux pas d'un slug auto-généré d'un charabia. Merci d'avance.

1
AlxVallejo
add_action( 'admin_menu', 'av_subscribe_create_menu' );

function av_subscribe_create_menu()
{
    $hook = add_menu_page(
        'Add Comment Feed',
        'Add Comment Feed',
        'manage_options',
        'av-create-feed', // Don't use __FILE__ as the slug, keep it short 'n sweet!
        '__return_true' // We need a callback otherwise WP won't properly handle the page, though it's never seen
    );


    if ( $hook ) // Current user has the right caps
        add_action( "load-$hook", 'av_subscribe_create_feed_page' ); // This runs before header output 
}

function av_subscribe_create_feed_page()
{
    $page_id = wp_insert_post( array(
        'post_status' => 'publish',
        'post_parent' => 13570,
        'post_title' => 'My Title',
        'post_type' => 'page',
    ));

    if ( $edit_url = get_edit_post_link( $page_id, 'raw' ) )
        wp_redirect( $edit_url );
    else
        wp_redirect( admin_url( "edit.php?post_type=page" ) ); // Fallback

    exit;
}

Si vous ne spécifiez pas de titre, mais que vous spécifiez post_status comme publication, cela créera-t-il automatiquement un slug pour vous?

Ce sera certainement le cas! Vérifiez le code source pour wp_insert_post().

2
TheDeadMedic