Como adicionar campos personalizados a um tipo de postagem personalizado?

18

Ok, registrei alguns tipos de postagem personalizados e algumas taxonomias. Agora, para minha vida, não consigo descobrir o código necessário para adicionar um campo personalizado ao meu tipo de postagem personalizada.

Preciso de uma lista suspensa e de uma área de texto de linha única. Mas também preciso ter campos separados para os tipos de postagem. Portanto, digamos que o tipo de postagem 1 tenha 3 campos e o tipo de postagem 2 tenha 4 campos, mas os campos são diferentes.

Alguma dica ajudaria eu olhei para o códice e encontrei algo, mas não consigo entender o que preciso adicionar ao meu functions.phparquivo

xLRDxREVENGEx
fonte

Respostas:

19

Provavelmente isso é mais complicado do que você pensa, eu usaria uma estrutura:

Se você quiser escrever o seu próprio, aqui estão alguns tutoriais decentes:

Wyck
fonte
11
realmente seria tão difícil. Eu pensei que seria tão simples quanto adicionar um código de registro às minhas funções, como fazemos com tipos de post e taxonomias.
XLRDxREVENGEx
11
Mais uma resposta, mas não é muito complexa. O link thinkvitamin.com faz um ótimo trabalho explicando como adicionar os metaboxes e salvá-los. O link sltaylor.co.uk é um tutorial incrível sobre o uso de ótimas práticas de codificação. Minha palavra de cautela é ter cuidado ao usar o save_postgancho. É chamado em momentos estranhos. Certifique-se de que a variável WP_DEBUG esteja configurada como true para ver possíveis erros que surgem ao usá-la.
Tollmanz
11
Apenas uma atualização eu usei o link thinkvitamin e que ajudou tremendamente e foi uma caminhada do bolo sobre a criação de campos personalizados
xLRDxREVENGEx
25

Adicione / edite o supportsargumento (enquanto estiver usando register_post_type) para incluir a custom-fieldstela de edição de postagem do seu tipo de postagem personalizado:

'supports' => array( 
  'title', 
  'editor', 
  'excerpt', 
  'thumbnail', 
  'custom-fields', 
  'revisions' 
)

Fonte: https://codex.wordpress.org/Using_Custom_Fields#Displaying_Custom_Fields

kubante
fonte
2
Você pode explicar por que isso pode resolver o problema?
s_ha_dum
11
Sim, isso funciona. Quem -1'ed a resposta. Por favor, você pode devolvê-lo? Saudações,
Junaid Qadir
6
...e depois.........?
Mark
9

Embora você deva adicionar alguma validação, esta ação não parece ser complicada para a versão atual do WordPress.

Basicamente, você precisa de duas etapas para adicionar um campo personalizado a um tipo de postagem personalizada:

  1. Crie uma metabox que mantenha seu campo personalizado
  2. Salve seu campo personalizado no banco de dados

Essas etapas são descritas globalmente aqui: http://wordpress.org/support/topic/is-it-possible-to-add-an-extra-field-to-a-custom-post-type

Exemplo:

Adicione um campo personalizado chamado "function" a um tipo de postagem personalizado chamado "prefix-teammembers".

Primeiro adicione o metabox:

function prefix_teammembers_metaboxes( ) {
   global $wp_meta_boxes;
   add_meta_box('postfunctiondiv', __('Function'), 'prefix_teammembers_metaboxes_html', 'prefix_teammembers', 'normal', 'high');
}
add_action( 'add_meta_boxes_prefix-teammembers', 'prefix_teammembers_metaboxes' );

Se você adicionar ou editar um "prefix-teammembers", o add_meta_boxes_{custom_post_type}gancho será acionado. Veja http://codex.wordpress.org/Function_Reference/add_meta_box para a add_meta_box()função. Na chamada de add_meta_box()is acima prefix_teammembers_metaboxes_html, um retorno de chamada para adicionar seu campo de formulário:

function prefix_teammembers_metaboxes_html()
{
    global $post;
    $custom = get_post_custom($post->ID);
    $function = isset($custom["function"][0])?$custom["function"][0]:'';
?>
    <label>Function:</label><input name="function" value="<?php echo $function; ?>">
<?php
}

Na segunda etapa, você tem seu campo personalizado para o banco de dados. Ao salvar, o save_post_{custom_post_type}gancho é acionado (desde a versão 3.7, consulte: /programming/5151409/wordpress-save-post-action-for-custom-posts ). Você pode conectar isso para salvar seu campo personalizado:

function prefix_teammembers_save_post()
{
    if(empty($_POST)) return; //why is prefix_teammembers_save_post triggered by add new? 
    global $post;
    update_post_meta($post->ID, "function", $_POST["function"]);
}   

add_action( 'save_post_prefix-teammembers', 'prefix_teammembers_save_post' );   
Bass Jobsen
fonte
"por que o prefix_teammembers_save_post é acionado ao adicionar novo?" você encontrou uma resposta, eu também estou tropeçando em um gatilho de função extra que não consigo me lembrar?
Alex
"Adicione um campo personalizado chamado 'função" a um tipo de postagem personalizado chamado' prefix-teammembers '. "O que" chamado "significa? O nome? O nome_ singular? O rótulo? Talvez seja a sequência usada como o primeiro argumento no register_post_type . função Ou talvez não importa o que é tão longo como é consistente.
arnoldbird
1

Existem vários plugins para meta boxes e campos personalizados. Se você olhar para um plugin focado nos desenvolvedores, tente o Meta Box . É leve e muito poderoso.

Se você está procurando um tutorial sobre como escrever código para uma caixa meta / campos personalizados, este é um bom começo. É a primeira parte de uma série que pode ajudá-lo a refinar o código para facilitar a extensão.

Anh Tran
fonte
-6
// slider_metaboxes_html , function for create HTML 
function slider_metaboxes( ) {
   global $wp_meta_boxes;
   add_meta_box('postfunctiondiv', __('Custom link'), 'slider_metaboxes_html', 'slider', 'normal', 'high');
}

//add_meta_boxes_slider => add_meta_boxes_{custom post type}
add_action( 'add_meta_boxes_slider', 'slider_metaboxes' );

Conhecimento perfeito

DTIndia
fonte