Criando uma nova página com a página pai pré-definida

2

Eu tenho um blog com uma estrutura de página muito complexa (como 4 níveis de hierarquia).

Ao criar novas páginas, é muito difícil escolher a página pai na lista suspensa, pois ela está em constante crescimento.

Por esse motivo, gostaria de adicionar um botão à barra de administração do frontend que aponta para post-new.php , mas com um parâmetro "ID da página principal". Efetivamente, o botão permite que você navegue até a página pai desejada na primeira página e, em seguida, clique em um link "adicionar nova página aqui" que o leva ao back-end com a página pai pré-selecionada.

No entanto, parece impossível adicionar parâmetros a post-new.php e a solicitação de recurso relacionado foi fechado no trac do WordPress.

Alguém conhece uma solução que não exija a invasão do núcleo? Uma ideia que eu tive foi ligar a um gancho que é acionado antes que um novo item seja criado, puxando a página pai de um parâmetro GET para lá e configurando-o no item a ser. Se isso é uma maneira viável, eu ficaria grato por um ponteiro simples que gancho para usar.

    
por Pekka 웃 03.03.2012 / 18:16

1 resposta

8

Você está certo na marca com GET, que provavelmente seria mais fácil de usar.

Tente isto:

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;
    }
}
    
por Rarst 18.03.2012 / 15:11