Cum implementez câmpuri personalizate fără a folosi plugin-uri?
Î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ă?

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

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?

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 parametrulsupports
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 }
