web-dev-qa-db-fra.com

Comment ajouter des champs personnalisés à un type de publication personnalisé?

D'accord, j'ai donc enregistré quelques types de messages personnalisés et quelques taxonomies. Maintenant, pour ma vie, je ne peux pas comprendre le code dont j'ai besoin pour ajouter un champ personnalisé à mon type de publication personnalisé.

J'ai besoin d'une liste déroulante et d'une zone de texte d'une seule ligne. Mais je dois aussi avoir des champs séparés pour les types d'articles. Donc, disons que le type de message un a 3 champs et le type de message 2 a 4 champs mais les champs sont différents.

Des astuces pourraient m'aider. J'ai consulté le codex et trouvé quelque chose, mais je ne peux pas comprendre ce que je dois ajouter à mon fichier functions.php.

17
xLRDxREVENGEx
16
Wyck

Ajoutez/modifiez l'argument supports (lors de l'utilisation de register_post_type) afin d'inclure le custom-fields pour publier l'écran d'édition de votre type de publication personnalisé:

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

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

22
kubante

Bien que vous deviez ajouter une validation, cette action ne semble pas compliquée pour la version actuelle de WordPress.

En gros, vous avez besoin de deux étapes pour ajouter un champ personnalisé à un type de publication personnalisé:

  1. Créer une metabox contenant votre champ personnalisé
  2. Enregistrez votre champ personnalisé dans la base de données

Ces étapes sont décrites globalement ici: http://wordpress.org/support/topic/is-it-possible-tadd-an-extra-field-to-a-custom-post-type

Exemple:

Ajoutez un champ personnalisé appelé "fonction" à un type de message personnalisé appelé "préfixe-membres de l'équipe".

Ajoutez d'abord le 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' );

Si vous ajoutez ou modifiez un "prefix-teammembers", le hook add_meta_boxes_{custom_post_type} est déclenché. Voir http://codex.wordpress.org/Function_Reference/add_meta_box pour la fonction add_meta_box(). Dans l'appel ci-dessus de add_meta_box() est prefix_teammembers_metaboxes_html, un rappel pour ajouter votre champ de formulaire:

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
}

Dans la deuxième étape, vous avez votre champ personnalisé dans la base de données. L'enregistrement du hook save_post_{custom_post_type} est déclenché (depuis la version 3.7, voir: https://stackoverflow.com/questions/5151409/wordpress-save-post-action-for-custom-posts ). Vous pouvez y accéder pour enregistrer votre champ personnalisé:

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' );   
6
Bass Jobsen

Il existe différents plug-ins pour les boîtes à méta personnalisées et les champs personnalisés. Si vous regardez un plugin qui se concentre sur les développeurs, vous devriez alors essayer Meta Box . C'est léger et très puissant.

Si vous cherchez un tutoriel sur la façon d'écrire du code pour une méta-zone/des champs personnalisés, alors this est un bon début. C'est la première partie d'une série qui pourrait vous aider à affiner le code pour faciliter son extension.

1
Anh Tran