¿Cómo implemento campos personalizados sin usar ningún complemento?

2

Estoy intentando crear un directorio de miembros y estoy usando un tipo de publicación personalizada. Estoy familiarizado con el uso del complemento ACF, pero ¿hay algún método para asociar un campo personalizado para un tipo de publicación personalizado específico para tener un cuadro de entrada simple como número de teléfono y dirección?     

pregunta Mac organo 13.12.2015 - 07:02

2 respuestas

2

Si no desea usar un complemento, puede intentar implementar un meta box para asociarse con ese tipo de publicación personalizada. Este es el código que uso si quiero agregar un campo de entrada simple para una publicación determinada. escriba, en el siguiente ejemplo, asumo que member_post_type es su tipo de publicación declarada:

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

Recursos adicionales para los Metabox de WordPress:

consulte la documentación aquí

    
respondido por el Carl Alberto 14.12.2015 - 14:36
2

Como ya he dicho en los comentarios,

  

Los campos personalizados ya son una función integrada. Solo tiene que agregarle soporte al registrar su tipo de publicación personalizada ;-)

Tienes dos opciones aquí:

  • Cuando registre su tipo de publicación personalizada , simplemente agregue custom-fields al parámetro supports

    Ejemplo:

    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 );
    }
    
  • Simplemente puedes usar add_post_type_support() para agregar campos personalizados a tu tipo de publicación personalizada

    Ejemplo:

    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
    }
    
respondido por el Pieter Goosen 14.12.2015 - 20:15

Lea otras preguntas en las etiquetas