¿Cómo agregar campos personalizados a un tipo de mensaje personalizado?

18

Ok, entonces he registrado algunos tipos de publicaciones personalizadas y algunas taxonomías. Ahora, por mi vida, no puedo entender el código que necesito para agregar un campo personalizado a mi tipo de publicación personalizada.

Necesito un menú desplegable y un área de texto de una sola línea. Pero también necesito tener campos separados para los tipos de publicación. Entonces, digamos que el tipo de publicación uno tiene 3 campos y el tipo de publicación 2 tiene 4 campos, pero los campos son diferentes.

Cualquier consejo ayudaría. He examinado el códice y encontrado algo, pero no puedo entender qué necesito agregar a mi functions.phparchivo.

xLRDxREVENGEx
fuente

Respuestas:

19

Esto es probablemente más complicado de lo que piensas, me gustaría considerar el uso de un marco:

Si quieres escribir el tuyo, aquí hay algunos tutoriales decentes:

Wyck
fuente
1
Realmente sería tan difícil. Pensé que sería tan simple como agregar un código de registro a mis funciones como lo hacemos con los tipos de publicaciones y las taxonomías.
xLRDxREVENGEx
1
Voy a añadir uno más esta respuesta, pero no es demasiado complejo. El enlace thinkvitamin.com hace un gran trabajo explicando cómo agregar los metaboxes y guardarlos. El enlace sltaylor.co.uk es un tutorial increíble sobre el uso de algunas buenas prácticas de codificación. Mi palabra de precaución es tener cuidado al usar el save_postgancho. Se llama en momentos extraños. Asegúrese de tener la variable WP_DEBUG establecida en true para ver los posibles errores que surgen al usarla.
tollmanz
1
Solo una actualización, utilicé el enlace thinkvitamin y me ayudó muchísimo, y fue muy
sencillo
25

Agregue / edite el supportsargumento (durante el uso register_post_type) para incluir la custom-fieldspantalla de edición de publicaciones de su tipo de publicación personalizada:

'supports' => array( 
  'title', 
  'editor', 
  'excerpt', 
  'thumbnail', 
  'custom-fields', 
  'revisions' 
)

Fuente: https://codex.wordpress.org/Using_Custom_Fields#Displaying_Custom_Fields

kubante
fuente
2
¿Puede explicar por qué esto podría resolver el problema?
s_ha_dum
1
Si, esto funciona. Quien respondió la respuesta. ¿Puedes por favor recuperarlo? Saludos,
Junaid Qadir
66
...y entonces.........?
Mark
9

Aunque debería tener que agregar alguna validación, esta acción no parece ser complicada para la versión actual de WordPress.

Básicamente, necesita dos pasos para agregar un campo personalizado a un tipo de publicación personalizada:

  1. Cree un metabox que contenga su campo personalizado
  2. Guarde su campo personalizado en la base de datos

Estos pasos se describen globalmente aquí: http://wordpress.org/support/topic/is-it-possible-to-add-an-extra-field-to-a-custom-post-type

Ejemplo:

Agregue un campo personalizado llamado "función" a un tipo de mensaje personalizado llamado "prefix-teammembers".

Primero agregue el metabox:

function prefix_teammembers_metaboxes( ) {
   global $wp_meta_boxes;
   add_meta_box('postfunctiondiv', __('Function'), 'prefix_teammembers_metaboxes_html', 'prefix_teammembers', 'normal', 'high');
}
add_action( 'add_meta_boxes_prefix-teammembers', 'prefix_teammembers_metaboxes' );

Si agrega o edita un "prefix-teammembers", add_meta_boxes_{custom_post_type}se activa el gancho. Ver http://codex.wordpress.org/Function_Reference/add_meta_box para la add_meta_box()función. En la llamada anterior de add_meta_box()is prefix_teammembers_metaboxes_html, una devolución de llamada para agregar su campo de formulario:

function prefix_teammembers_metaboxes_html()
{
    global $post;
    $custom = get_post_custom($post->ID);
    $function = isset($custom["function"][0])?$custom["function"][0]:'';
?>
    <label>Function:</label><input name="function" value="<?php echo $function; ?>">
<?php
}

En el segundo paso tiene su campo personalizado para la base de datos. Al guardar el save_post_{custom_post_type}gancho se activa (desde v 3.7, consulte: /programming/5151409/wordpress-save-post-action-for-custom-posts ). Puede conectar esto para guardar su campo personalizado:

function prefix_teammembers_save_post()
{
    if(empty($_POST)) return; //why is prefix_teammembers_save_post triggered by add new? 
    global $post;
    update_post_meta($post->ID, "function", $_POST["function"]);
}   

add_action( 'save_post_prefix-teammembers', 'prefix_teammembers_save_post' );   
Bass Jobsen
fuente
"¿por qué prefix_teammembers_save_post se activa al agregar nuevo?" ¿ha encontrado una respuesta, también estoy tropezando con un disparador de función adicional que no puedo recordar?
alex
"Agregue un campo personalizado llamado 'función' a un tipo de mensaje personalizado llamado 'prefix-teammembers'." ¿Qué significa "llamado"? ¿El nombre? ¿El nombre_ singular? ¿La etiqueta? o tal vez no importa lo que sea, siempre y cuando sea consistente.
arnoldbird
1

Hay varios complementos para meta cuadros personalizados y campos personalizados. Si miras un complemento que se centra en los desarrolladores, entonces deberías probar Meta Box . Es ligero y muy potente.

Si está buscando un tutorial sobre cómo escribir código para un cuadro de meta / campos personalizados, este es un buen comienzo. Es la primera parte de una serie que podría ayudarlo a refinar el código para facilitar su extensión.

Anh Tran
fuente
-6
// slider_metaboxes_html , function for create HTML 
function slider_metaboxes( ) {
   global $wp_meta_boxes;
   add_meta_box('postfunctiondiv', __('Custom link'), 'slider_metaboxes_html', 'slider', 'normal', 'high');
}

//add_meta_boxes_slider => add_meta_boxes_{custom post type}
add_action( 'add_meta_boxes_slider', 'slider_metaboxes' );

Conocimiento perfecto

DTIndia
fuente