Existe-t-il un moyen de définir des champs personnalisés par défaut lors de la création d'une publication?

10

Lorsque je crée un nouveau message, juste après avoir cliqué sur "Ajouter un nouveau" , lorsque l'éditeur de messages s'affiche, au lieu de devoir utiliser le menu déroulant et de choisir un champ personnalisé, " d aimer avoir des entrées de champs personnalisés par défaut déjà ouvertes.

Visuellement, au lieu de:

J'aimeraisavoirquelquechosecomme:

Je sais qu'il existe des plugins pour cela (CPT, Plus de champs, etc.), mais j'aimerais un moyen simple de le faire avec une fonction de base.

J'ai essayé quelque chose comme ceci (j'utilise un type de produit personnalisé):

function register_custom_fields( $post_ID ) {

    global $wpdb;

        if( !wp_is_post_revision( $post_ID ) ) {

            add_post_meta( $post_ID, 'reference', '', true);
            add_post_meta( $post_ID, 'price', '', true);

        }

}

add_action('edit_product', 'register_custom_fields');

Mais cela ne semble pas fonctionner. Je pense que le hook est probablement faux (car edit_post vient après une mise à jour), mais je ne vois pas de hook pour "nouveau message" (juste après que l'utilisateur clique sur "nouveau message" dans l'administrateur de wp). Est-ce qu'il y en a?

Ou peut-être que l'idée est fausse et qu'il existe un autre moyen?

    
posée mike23 24.09.2011 - 18:46

5 réponses

8

Le crochet d’action save_post est appelé lors de l’enregistrement, mais je ne sais pas si vous pouvez ajouter des métadonnées à ce stade. Mais il devrait être possible de créer / mettre à jour vos métadonnées après l'enregistrement de la publication avec l'action hook updated_post_meta .

EDIT

Pour présélectionner certains méta-champs (champs personnalisés) sur l'écran de post-création, vous devez d'abord ajouter ces méta-valeurs avec une valeur vide.

Si vous regardez la fonction post_custom_meta_box() (qui est le rappel du métabox utilisé postcustom ) dans le fichier wp-admin/includes/meta-boxes.php , vous pouvez voir que la fonction utilise list_meta() pour créer la méta présélectionnée. champs.

Regardons maintenant le déroulement du programme jusqu'à ce que cette métabox soit affichée (nous recherchons un hook action / filtre que nous pouvons utiliser ici):

  1. WordPress charge le fichier post-new.php
  2. Ce fichier génère une publication par défaut dans la base de données à la ligne 39 avec la fonction get_default_post_to_edit() . C'est bien. En gros, la publication est déjà dans la base de données en tant que brouillon automatique. Malheureusement, il n’existe actuellement aucun moyen de modifier ces données ou d’ajouter quelque chose de nouveau.
  3. La prochaine étape consiste à inclure le fichier edit-form-advaned.php . Ce fichier générera la page d’administration de trou et inclut toutes les métaboxes requises en fonction du paramètre supports du type de publication.
  4. Sur la ligne 136 , les champs personnalisés metabox postcustom sont inclus et la fonction ci-dessus est appelée. Encore une fois, aucun crochet d’action que nous pourrions utiliser.

Conclusion

Je pense que le seul moyen de le faire est d'utiliser jQuery ou de surcharger le postcustom metabox et d'ajouter les méta-valeurs avant d'exécuter la fonction list_meta() .

ex.

add_action('admin_menu', 'wpse29358_replaceMetaBoxes'); // maybe add_meta_boxes hook
function wpse29358_replaceMetaBoxes() {
    remove_meta_box('postcustom', {POST_TYPE}, 'normal');
    add_meta_box('postcustom', __('Custom Fields'), 'wpse29358_postcustomMetabox', {POST_TYPE}, 'normal', 'core');
}

function wpse29358_postcustomMetabox($post) {
    // Add your meta data to the post with the ID $post->ID
    add_post_meta($post->ID, 'key', 'value');

    // and then copy&past the metabox content from the function post_custom_meta_box()
}
    
réponse donnée rofflox 24.09.2011 - 19:26
3

Il s'agit de la méthode appropriée pour ajouter la prise en charge des champs personnalisés (vous n'obtenez pas les champs vides lors de la modification des articles)

function set_default_meta($post_ID){
    $current_field_value = get_post_meta($post_ID,'Sort Order',true);
    $default_meta = '100'; // value
    if ($current_field_value == '' && !wp_is_post_revision($post_ID)){
            add_post_meta($post_ID,'Sort Order',$default_meta,true);
    }
    return $post_ID;
}
add_action('wp_insert_post','set_default_meta');
    
réponse donnée Yuri Korolov 13.02.2013 - 01:34
1

Vous devez utiliser l'action save_post et isoler votre opération en vérifiant le type de publication car il est exécuté sur tous les types de publication. De toute évidence, vous devrez intégrer plus de logique pour que cela fonctionne pour vous. Vous devriez probablement définir un champ de méta de publication qui vérifie si vous avez défini les valeurs par défaut une fois pour que vos utilisateurs ne soient pas frustrés s'ils souhaitent laisser un champ de méta de publication vide.

Si vous souhaitez que les valeurs par défaut soient nulles (comme le montre votre exemple de code), ne créez pas de fonction, car cela ne ferait qu'ajouter une surcharge et les champs de méta-post ne seront pas renseignés avec des valeurs.

function register_custom_fields( $post_ID ) {
    //Do nonce checking here
    if( !wp_is_post_revision( $post_ID ) ) {
        if('product' === $_REQUEST['post_type']){
            $reference = $_REQUEST['reference'] ? esc_html($_REQUEST['reference']) : 'default_value';
            $price = $_REQUEST['price'] ? esc_html($_REQUEST['price']) : 'default_value';
            update_post_meta( $post_ID, 'reference', $reference);
            update_post_meta( $post_ID, 'price', $price);
        }
    }
}
add_action('save_post', 'register_custom_fields');
    
réponse donnée Brian Fegter 25.09.2011 - 06:42
1

Je souhaite disposer d'une méta description unique pour chaque publication personnalisée sur un site WP que je développe. Donc, je cherchais aussi un champ personnalisé par défaut et je suis arrivé ici.

Je sais que c'est un très vieux billet, mais je pensais poster la réponse simple que j'ai trouvée sur mariokostelac.com .

kg est mon espace de noms, vous pouvez nommer la fonction comme vous le souhaitez. Je suis assez nouveau pour les crochets et la personnalisation de WP en général, mais je pense que wp_insert_post est le crochet que vous recherchez.

add_action('wp_insert_post', 'kg_set_default_custom_fields');

function kg_set_default_custom_fields($post_id)
{
    if ( $_GET['post_type'] != 'page' ) {
        add_post_meta($post_id, 'meta-description', '', true);
    }

    return true;
}
    
réponse donnée kaplan 13.09.2012 - 14:01
-1

si quelqu'un doit prendre un champ personnalisé par type de message, je laisse le code ci-dessous de la façon dont je l'ai fait et fonctionne très bien pour moi:)

function awh_field_type($post_id){
$awh_f_post = get_post_type($post_id);
$meta_value = '';
$meta_name = 'custom';
    if($awh_f_post == 'product'){
        add_post_meta($post_id,$meta_name,$meta_value,true);
    }
return $awh_f_post;

} add_action ('wp_insert_post', 'awh_field_type');

    
réponse donnée Edgardo Aleman 19.05.2016 - 20:27

Lire d'autres questions sur les étiquettes