Cum implementez câmpuri personalizate fără a folosi plugin-uri?

13 dec. 2015, 08:02:49
Vizualizări: 24.9K
Voturi: 3

Încerc să creez un director de membri folosind un tip de postare personalizată (custom post type) pentru membri. Sunt familiarizat cu modul de utilizare al plugin-ului ACF, dar există vreo metodă de a asocia un câmp personalizat pentru un anumit tip de postare personalizată pentru a avea o casetă de input simplă precum număr de telefon și adresă?

2
Comentarii

Câmpurile personalizate sunt deja o funcționalitate integrată. Trebuie doar să adaugi suport pentru ele atunci când înregistrezi tipul tău de postare personalizată ;-)

Pieter Goosen Pieter Goosen
13 dec. 2015 08:18:30

Mulțumesc Pieter, dar există vreo modalitate de a adăuga un cod astfel încât să nu fie nevoie să selectăm câmpul personalizat pentru fiecare adăugare a unei noi intrări? Voi încerca mai întâi codul lui Carl să văd dacă funcționează

Mac organo Mac organo
14 dec. 2015 15:49:38
Toate răspunsurile la întrebare 2
2

Dacă nu dorești să folosești un plugin, poți încerca să implementezi o cutie meta pentru a fi asociată cu acel tip de postare personalizată. Acesta este codul pe care îl folosesc dacă vreau să adaug un câmp simplu de introducere pentru un anumit tip de postare, în exemplul de mai jos, presupun că member_post_type este tipul tău de postare declarat:

function member_add_meta_box() {
//aceasta va adăuga cutia meta pentru tipul de postare member
$screens = array( 'member_post_type' );

foreach ( $screens as $screen ) {

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

/**
 * Afișează conținutul cutiei.
 *
 * @param WP_Post $post Obiectul pentru postarea/pagina curentă.
 */
function member_meta_box_callback( $post ) {

// Adaugă un câmp nonce pentru a putea verifica mai târziu.
wp_nonce_field( 'member_save_meta_box_data', 'member_meta_box_nonce' );

/*
 * Folosește get_post_meta() pentru a prelua o valoare existentă
 * din baza de date și folosește valoarea pentru formular.
 */
$value = get_post_meta( $post->ID, '_my_meta_value_key', true );

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

/**
 * Când postarea este salvată, salvează datele noastre personalizate.
 *
 * @param int $post_id ID-ul postării care se salvează.
 */
 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;
 }

 // Verifică permisiunile utilizatorului.
 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' );

Resurse suplimentare pentru cutiile meta WordPress:

te rugăm să consulți documentația aici

14 dec. 2015 15:36:52
Comentarii

Am încercat să adaug codul tău în fișierul function.php al temei mele și acum am o nouă metabox în tipul meu de postare personalizată. Știi cumva dacă pot controla și ordinea metabox-ului, dacă va fi afișat primul sau la final?

Mac organo Mac organo
14 dec. 2015 15:56:17

@Macorgano Da, poți. Al cincilea parametru al funcției add_meta_box indică poziția dorită, iar al șaselea parametru indică prioritatea.

Ar trebui cu adevărat să consulți documentația.

Ezra Obiwale Ezra Obiwale
5 iun. 2019 09:07:09
0

După cum am menționat deja în comentarii,

Câmpurile personalizate sunt deja o funcționalitate integrată. Trebuie doar să adaugi suportul pentru aceasta în timpul înregistrării tipului tău de postare personalizată ;-)

Aveți două opțiuni aici:

  • Când înregistrați tipul de postare personalizată, pur și simplu adăugați custom-fields la parametrul supports

    Exemplu:

    add_action( 'init', 'codex_custom_init' );
    function codex_custom_init() {
        $args = [
          'public' => true,
          'label'  => 'Cărți',
          'supports' => ['title', 'editor', 'author', 'thumbnail', 'excerpt', 'custom-fields']
        ];
        register_post_type( 'book', $args );
    }
    
  • Puteți pur și simplu folosi add_post_type_support() pentru a adăuga câmpuri personalizate la tipul de postare personalizată

    Exemplu:

    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' ); // Schimbați cpt cu tipul dvs. de postare
    }
    
14 dec. 2015 21:15:54