¿Hay alguna forma de establecer campos personalizados predeterminados al crear una publicación?

10

Cuando estoy creando una nueva publicación, justo después de hacer clic en "Agregar nueva" , cuando se muestra el editor de la publicación, en lugar de tener que usar el menú desplegable y elegir un campo personalizado para usar, Me gustaría tener algunas entradas de campo personalizadas predeterminadas ya abiertas.

Visualmente, en lugar de:

Megustaríateneralgocomo:

Sé que hay complementos para eso (CPT, Más campos, etc.) pero me gustaría una forma sencilla de hacerlo con una función básica.

Probé algo como esto (estoy usando un tipo de publicación personalizado 'producto'):

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

Pero eso no parece funcionar. Creo que el enlace es probablemente incorrecto (porque edit_post viene después de una actualización), pero no veo ningún enlace para "nueva publicación" (justo después de que el usuario haga clic en "nueva publicación" en wp admin). ¿Hay alguna?

¿O tal vez toda la idea está mal y hay otra manera?

    
pregunta mike23 24.09.2011 - 18:46

5 respuestas

8

El gancho de acción save_post se llama al guardar, pero no sé si puede agregar metadatos en este momento. Pero debería ser posible crear / actualizar sus metadatos después de guardar la publicación con el gancho de acción updated_post_meta .

EDITAR

Para preseleccionar algunos campos de metadatos (campos personalizados) en la pantalla de creación de publicación, primero debe agregar estos valores de metadatos con un valor vacío.

Si observa la función post_custom_meta_box() (que es la devolución de llamada para el metabox usado postcustom ) en el archivo wp-admin/includes/meta-boxes.php , puede ver que la función usa list_meta() para crear el meta preseleccionado. campos.

Ahora echemos un vistazo al flujo del programa hasta que se muestre este metabox (estamos buscando un enlace de acción / filtro que podamos usar aquí):

  1. WordPress carga el archivo post-new.php
  2. Este archivo genera una publicación predeterminada en la base de datos en la línea 39 con la función get_default_post_to_edit() . Eso es bueno. Básicamente, la publicación ya está en la base de datos como borrador automático. Lamentablemente, no hay ningún enlace en este momento para modificar estos datos o agregar algo nuevo.
  3. Como siguiente paso, se incluye el archivo edit-form-advaned.php . Este archivo generará la página de administración de agujeros e incluirá todos los metaboxes necesarios basados en el parámetro supports del tipo de publicación.
  4. En la línea 136 , se incluyen los campos personalizados metabox postcustom y se llama a la función anterior. Nuevamente, no hay gancho de acción que podamos usar.

Conclusión

Creo que la única forma de hacerlo es usar jQuery o sobrecargar el metabox postcustom y agregar los valores meta antes de ejecutar la función list_meta() .

Por ejemplo,

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()
}
    
respondido por el rofflox 24.09.2011 - 19:26
3

Este es el método adecuado para agregar compatibilidad con campos personalizados (no obtiene los campos en blanco al editar publicaciones)

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');
    
respondido por el Yuri Korolov 13.02.2013 - 01:34
1

Debería usar la acción save_post y aislar su operación al verificar el tipo de publicación, ya que esto se ejecuta en todos los tipos de publicación. Obviamente, hay algo más de lógica que tendrás que construir para que te funcione. Probablemente debería establecer un campo meta de publicación que verifique si ha establecido los valores predeterminados una vez para que los usuarios no se sientan frustrados si desean dejar un campo meta de publicación en blanco.

Si desea que los valores predeterminados sean nulos (como se ve en su ejemplo de código), no cree una función porque esto solo agrega sobrecarga y los campos de metadatos posteriores no se rellenan con los valores de forma predeterminada.

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');
    
respondido por el Brian Fegter 25.09.2011 - 06:42
1

Estoy buscando tener una meta descripción única para cada publicación personalizada en un sitio WP que estoy desarrollando. Así que también estaba buscando un campo personalizado predeterminado y aterricé aquí.

Sé que esta es una publicación bastante antigua, pero pensé que publicaría la respuesta simple que encontré en mariokostelac.com .

kg es mi espacio de nombres, puedes nombrar la función como quieras. Soy bastante nuevo en los ganchos y en la personalización de WP en general, pero creo que wp_insert_post es el gancho que estás buscando.

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;
}
    
respondido por el kaplan 13.09.2012 - 14:01
-1

si alguien necesita tomar un campo personalizado por tipo de publicación, dejo el código debajo de la forma en que lo hice y me funciona bien :)

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

    
respondido por el Edgardo Aleman 19.05.2016 - 20:27

Lea otras preguntas en las etiquetas