web-dev-qa-db-fra.com

Comment puis-je implémenter des champs personnalisés sans utiliser de plugins?

J'essaie de créer un répertoire de membres et d'utiliser un type de membre personnalisé. Je sais comment utiliser le plug-in ACF, mais existe-t-il des méthodes permettant d'associer un champ personnalisé à un type de message personnalisé spécifique pour avoir un champ de saisie simple comme un numéro de téléphone et une adresse?

3
Mac organo

Si vous ne souhaitez pas utiliser de plug-in, vous pouvez essayer d'implémenter une méta-boîte à associer à ce type de publication personnalisé. Ceci est le code que j'utilise si je souhaite ajouter un champ de saisie simple pour un certain type de publication, en Dans l'exemple ci-dessous, je suppose que le type member_post_type est votre type de message déclaré:

function member_add_meta_box() {
//this will add the metabox for the member post type
$screens = array( 'member_post_type' );

foreach ( $screens as $screen ) {

    add_meta_box(
        'member_sectionid',
        __( 'Member Details', 'member_textdomain' ),
        'member_meta_box_callback',
        $screen
    );
 }
}
add_action( 'add_meta_boxes', 'member_add_meta_box' );

/**
 * Prints the box content.
 *
 * @param WP_Post $post The object for the current post/page.
 */
function member_meta_box_callback( $post ) {

// Add a nonce field so we can check for it later.
wp_nonce_field( 'member_save_meta_box_data', 'member_meta_box_nonce' );

/*
 * Use get_post_meta() to retrieve an existing value
 * from the database and use the value for the form.
 */
$value = get_post_meta( $post->ID, '_my_meta_value_key', true );

echo '<label for="member_new_field">';
_e( 'Phone Number', 'member_textdomain' );
echo '</label> ';
echo '<input type="text" id="member_new_field" name="member_new_field" value="' . esc_attr( $value ) . '" size="25" />';
}

/**
 * When the post is saved, saves our custom data.
 *
 * @param int $post_id The ID of the post being saved.
 */
 function member_save_meta_box_data( $post_id ) {

 if ( ! isset( $_POST['member_meta_box_nonce'] ) ) {
    return;
 }

 if ( ! wp_verify_nonce( $_POST['member_meta_box_nonce'], 'member_save_meta_box_data' ) ) {
    return;
 }

 if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
    return;
 }

 // Check the user's permissions.
 if ( isset( $_POST['post_type'] ) && 'page' == $_POST['post_type'] ) {

    if ( ! current_user_can( 'edit_page', $post_id ) ) {
        return;
    }

 } else {

    if ( ! current_user_can( 'edit_post', $post_id ) ) {
        return;
    }
 }

 if ( ! isset( $_POST['member_new_field'] ) ) {
    return;
 }

 $my_data = sanitize_text_field( $_POST['member_new_field'] );

 update_post_meta( $post_id, '_my_meta_value_key', $my_data );
}
add_action( 'save_post', 'member_save_meta_box_data' );

Ressources supplémentaires pour les métaboxes WordPress:

veuillez consulter la documentation ici

4
Carl Alberto

Comme je l'ai déjà dit dans les commentaires,

Les champs personnalisés sont déjà une fonctionnalité intégrée. Vous devez juste ajouter un support pour cela lors de l'enregistrement de votre type de message personnalisé ;-)

Vous avez deux options ici:

  • Lorsque vous enregistrez votre type de message personnalisé , ajoutez simplement custom-fields au paramètre supports

    Exemple:

    add_action( 'init', 'codex_custom_init' );
    function codex_custom_init() {
        $args = [
          'public' => true,
          'label'  => 'Books',
          'supports' => ['title', 'editor', 'author', 'thumbnail', 'excerpt', 'custom-fields']
        ];
        register_post_type( 'book', $args );
    }
    
  • Vous pouvez simplement utiliser add_post_type_support() pour ajouter des champs personnalisés à votre type de message personnalisé

    Exemple:

    add_action( 'init', 'wpcodex_add_custom_fileds_support_for_cpt', 11 );
    function wpcodex_add_custom_fileds_support_for_cpt() {
        add_post_type_support( 'cpt', 'custom-fields' ); // Change cpt to your post type
    }
    
2
Pieter Goosen