web-dev-qa-db-fra.com

Création d'une nouvelle page avec une page parent prédéfinie

J'ai un blog avec une structure de page très complexe (par exemple, 4 niveaux de hiérarchie).

Lors de la création de nouvelles pages, il est très fastidieux de sélectionner la page parente dans la liste déroulante, car elle est en constante augmentation.

Pour cette raison, j'aimerais ajouter un bouton à la barre d'administration frontale qui pointe sur post-new.php, mais avec un paramètre "parent ID". Effectivement, le bouton vous permettrait de naviguer vers la page parent souhaitée sur la page d'accueil, puis de cliquer sur le lien "ajouter une nouvelle page ici" qui vous mènera au back-end avec la page parent présélectionnée.

Cependant, il semble impossible d'ajouter des paramètres à post-new.php et une demande de fonctionnalité associée a été fermée dans le compte WordPress.

Est-ce que quelqu'un connaît une solution qui ne nécessite pas de piratage du noyau? Une de mes idées était de créer un crochet qui se déclenche avant la création d'un nouvel élément, d'extraire la page parent d'un paramètre GET et de la définir dans l'élément à être. Si c'est un moyen viable, je vous serais reconnaissant de choisir un pointeur simple, quel crochet utiliser.

2
Pekka 웃

Avec GET, vous avez raison, ce serait probablement le plus facile à utiliser.

Essaye ça:

Add_Child_Page::on_load();

class Add_Child_Page {

    static function on_load() {

        add_action( 'init', array( __CLASS__, 'init' ) );
        add_action( 'admin_init', array( __CLASS__, 'admin_init' ) );
    }

    static function init() {

        add_action( 'admin_bar_menu', array( __CLASS__, 'admin_bar_menu' ), 90 );
    }

    static function admin_bar_menu( $wp_admin_bar ) {

        if( is_page() ) {

            $wp_admin_bar->add_node( array(
                'id'    => 'add_child_page',
                'title' => 'Add Child Page',
                'href'  => add_query_arg( array( 'post_type'   => 'page', 'page_parent' => get_the_ID() ), admin_url( 'post-new.php' ) ),
            ) );
        }
    }

    static function admin_init() {

        add_filter( 'page_attributes_dropdown_pages_args', array( __CLASS__, 'page_attributes_dropdown_pages_args' ) );
    }

    static function page_attributes_dropdown_pages_args( $dropdown_args ) {

        if ( ! empty($_REQUEST['page_parent']) )
            $dropdown_args['selected'] = (int) $_REQUEST['page_parent'];

        return $dropdown_args;
    }
}
8
Rarst