Redesenhando a página "Adicionar novo" do tipo de postagem personalizada

8

Eu tenho navegado em todo o google para uma solução para isso. Estou escrevendo um plug-in personalizado de tipos de postagem para trabalhar com os visitantes que obtemos. Inicialmente, escrevi uma maquete sem tipos de postagem personalizados, depois vim por aqui a partir de uma pesquisa no google e vi uma captura de tela que mostrava um exemplo de tipos de postagem personalizados para armazenar informações sobre advogados. Ele mostrou que alguém redesenhou a página "adicionar novo" / "editar" para tipos de postagem personalizados com uma interface totalmente nova.

Eu queria saber se o wordpress @ stackexchange teria recursos para redesenhar as páginas personalizadas "adicionar / editar" dos tipos de postagem personalizados.

Não me lembro dos termos de pesquisa que fiz para encontrar esse artigo.

Obrigado,
-Zack

Zack
fonte

Respostas:

11

A pergunta / resposta a que você está se referindo foi Dicas para usar o WordPress como um CMS .

As capturas de tela publicadas nessa resposta foram criadas usando o register_meta_box_cbargumento disponível para tipos de postagem personalizados.

register_meta_box_cb deve especificar uma função de retorno de chamada que contenha o código para a meta box.

Para criar a meta box, você pode usar a função add_meta_box do WordPress, que também requer uma função para salvar os dados inseridos quando a postagem é salva.

Aqui está um código de exemplo que eu criei para adicionar duas meta boxes personalizadas ao tipo de postagem do meu portfólio que eu uso no meu site pessoal.

O tipo de postagem "Projetos" que criei continha este argumento:

'register_meta_box_cb' => 'c3m_project_meta',

A primeira função abaixo é a função de retorno de chamada para register_meta_box_cb. Os 2 a seguir exibem o html para as meta boxes na página de postagem de adição e os 2 últimos salvam os dados inseridos.

function c3m_project_meta() {
        add_meta_box('_c3m_project_url', __('Enter Website Url') , 'c3m_project_url', 'project', 'side', 'low');
        add_meta_box('_c3m_project_work', __('Enter Work Done on Project') , 'c3m_project_work', 'project', 'side', 'low');

        }


    function c3m_project_url($post) {
        global $post;
        echo  '<input type="hidden" name="banner-buttonmeta_noncename" id="banner-buttonmeta_noncename" value="' .
        wp_create_nonce( plugin_basename(__FILE__) ) . '" />';
        $projecturl = get_post_meta($post->ID, '_projecturl', true);
        echo '<input type="text" name="_projecturl" value="' . $projecturl . '" class="widefat" />' ; 
        }

    function c3m_project_work($post) {
        global $post;
        echo  '<input type="hidden" name="banner-buttonmeta_noncename" id="banner-buttonmeta_noncename" value="' .
        wp_create_nonce( plugin_basename(__FILE__) ) . '" />';
        $projectwork = get_post_meta($post->ID, '_projectwork', true);
        echo '<input type="text" name="_projectwork" value="' . $projectwork . '" class="widefat" />' ; 
        }


    add_action('admin_init', 'c3m_project_meta');



    function c3m_save_project_meta( $post_id , $post ) { 

        if ( !wp_verify_nonce( $_POST [ 'banner-buttonmeta_noncename' ], plugin_basename( __FILE__ ) )) { return $post ->ID; 

        }

        if ( !current_user_can( 'edit_post' , $post ->ID )) return $post ->ID; 
        $c3m_projecturl [ '_projecturl' ] = $_POST [ '_projecturl' ]; 
                    foreach ( $c3m_projecturl as $key => $value ) { 
                    if ( $post ->post_type == 'revision' ) return ; 

                    $value = implode( ',' , ( array ) $value );
                    if (get_post_meta( $post ->ID, $key , FALSE)) { 
                    update_post_meta( $post ->ID, $key , $value ); } else { 
                    add_post_meta( $post ->ID, $key , $value ); } if (! $value ) delete_post_meta( $post ->ID, $key ); 

                    }

        $c3m_projectwork [ '_projectwork' ] = $_POST [ '_projectwork' ]; 
                    foreach ( $c3m_projectwork as $key => $value ) { 
                    if ( $post ->post_type == 'revision' ) return ; 

                    $value = implode( ',' , ( array ) $value );
                    if (get_post_meta( $post ->ID, $key , FALSE)) { 
                    update_post_meta( $post ->ID, $key , $value ); } else { 
                    add_post_meta( $post ->ID, $key , $value ); } if (! $value ) delete_post_meta( $post ->ID, $key ); 

                    }
        }

   add_action( 'save_post' , 'c3m_save_project_meta' , 1, 2); 
Chris_O
fonte
Aha, ok, então foi apenas uma meta box que eu vi. Eu achei que era algum tipo de "hack" para wordpress, lol. Obrigado!
Zack
4

Quando eu estava analisando o mesmo assunto, achei este artigo bastante interessante:

Como criar uma caixa de meta personalizada do WordPress em vez de usar campos personalizados do WordPress

Aprender a criar metaboxes personalizados do WordPress permite criar elementos profissionais da interface do usuário para você e seus clientes. Este tutorial de meta-caixa do WordPress mostrará como adicionar elementos de interface do usuário de administrador às telas de edição / página de edição.

Chris está certo, apesar de um recurso adicional não machucar :)

Noel Tock
fonte