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


18

Ok, j'ai donc enregistré quelques types de messages personnalisés et quelques taxonomies. Maintenant, pour la vie de moi, 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 sur une seule ligne. Mais j'ai également besoin d'avoir des champs séparés pour les types de messages. Donc, disons que le type de message 1 a 3 champs et le type de message 2 a 4 champs mais les champs sont différents.

Tous les conseils pourraient aider J'ai regardé le codex et trouvé quelque chose mais je ne peux pas comprendre ce que je dois ajouter à mon functions.phpfichier


Réponses:


19

C'est probablement plus compliqué que vous ne le pensez, j'examinerais la possibilité d'utiliser un framework:

Si vous voulez écrire le vôtre, voici quelques tutoriels décents:


1
ce serait vraiment si difficile. Je pensais que ce serait aussi simple que d'ajouter un code de registre à mes fonctions comme nous le faisons avec les types de messages et les taxonomies.
xLRDxREVENGEx

1
Je vais ajouter une réponse, mais ce n'est pas trop complexe. Le lien thinkvitamin.com fait un excellent travail expliquant comment ajouter les métaboxes et les enregistrer. Le lien sltaylor.co.uk est un tutoriel génial sur l'utilisation de quelques bonnes pratiques de codage. Ma parole de prudence est de faire attention lors de l'utilisation du save_postcrochet. Cela s'appelle à des moments étranges. Assurez-vous que la variable WP_DEBUG est définie sur true afin de voir les erreurs potentielles qui surviennent lors de son utilisation.
tollmanz

1
Juste une mise à jour, j'ai utilisé le lien thinkvitamin et cela a énormément aidé et c'était une marche à
suivre

25

Ajoutez / modifiez l' supportsargument (tout en l'utilisant register_post_type) pour inclure l' custom-fieldsé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


2
Pouvez-vous expliquer pourquoi cela pourrait résoudre le problème?
s_ha_dum

1
Oui, ça marche. Qui -1 a répondu. Pouvez-vous le reprendre? Cordialement,
Junaid Qadir

6
...puis.........?
Mark

9

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

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

  1. Créez une métabox 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-to-add-an-extra-field-to-a-custom-post-type

Exemple:

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

Ajoutez d'abord la métabox:

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 add_meta_boxes_{custom_post_type}hook est déclenché. Voir http://codex.wordpress.org/Function_Reference/add_meta_box pour la add_meta_box()fonction. Dans l'appel ci - dessus add_meta_box()est - prefix_teammembers_metaboxes_htmlun 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. Lors de l'enregistrement, le save_post_{custom_post_type}crochet est déclenché (depuis la version 3.7, voir: /programming/5151409/wordpress-save-post-action-for-custom-posts ). Vous pouvez accrocher ceci 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' );   

"pourquoi prefix_teammembers_save_post est-il déclenché par add new?" avez-vous trouvé une réponse, je suis également tombé sur un déclencheur de fonction supplémentaire dont je ne me souviens pas?
alex

"Ajoutez un champ personnalisé appelé" fonction "à un type de publication personnalisé appelé" préfixe-membres de l'équipe "." Que signifie "appelé"? Le nom? Le nom_ singulier? L'étiquette? Ou peut-être que ce n'est pas important tant qu'il est cohérent.
arnoldbird

1

Il existe différents plugins pour les métadonnées personnalisées et les champs personnalisés. Si vous regardez un plugin qui se concentre sur les développeurs, vous devriez essayer Meta Box . Il est léger et très puissant.

Si vous êtes à la recherche d'un tutoriel sur la façon d'écrire du code pour un champs de méta boîte / personnalisés, alors c'est un bon début. C'est la première partie d'une série qui pourrait vous aider à affiner le code pour le rendre facile à étendre.


-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' );

Connaissance parfaite

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.