¿Cómo agregar campos personalizados a un tipo de entrada personalizada?

13 may 2011, 04:59:22
Vistas: 160K
Votos: 33

De acuerdo, he registrado algunos tipos de entradas personalizadas y algunas taxonomías. Ahora, por más que lo intento, no puedo encontrar el código necesario para agregar un campo personalizado a mi tipo de entrada 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 entradas. Por ejemplo, el tipo de entrada uno tiene 3 campos y el tipo de entrada 2 tiene 4 campos, pero los campos son diferentes.

Cualquier consejo ayudaría. He revisado el codex y encontré algo pero no puedo entender qué necesito agregar a mi archivo functions.php

1
Comentarios

Usa http://wordpress.org/extend/plugins/types/

Ajay Patel Ajay Patel
30 jul 2012 14:21:57
Todas las respuestas a la pregunta 9
4
38

Añade/edita el argumento supports (al usar register_post_type) para incluir los custom-fields en la pantalla de edición de tu tipo de entrada personalizado:

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

Fuente: https://developer.wordpress.org/reference/functions/register_post_type/#supports

23 abr 2013 17:18:32
Comentarios

¿Podrías explicar por qué esto podría resolver el problema?

s_ha_dum s_ha_dum
23 abr 2013 17:57:06

Sí, esto funciona.

¿Quién le dio -1 a la respuesta? ¿Podrías por favor retirarlo?

Saludos,

Junaid Qadir Shekhanzai Junaid Qadir Shekhanzai
25 jul 2013 11:59:15

...y entonces.........?

Mark Mark
26 oct 2016 21:33:49

Esto no resolverá el problema porque el OP está preguntando cómo agregar campos personalizados con formato específico ("un menú desplegable y un área de texto de una sola línea"), no habilitar la función genérica de "campos personalizados" de WordPress.

tog22 tog22
4 oct 2020 06:18:11
4
26

Esto probablemente sea más complicado de lo que piensas, te recomendaría usar un framework:

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

13 may 2011 06:03:10
Comentarios

realmente sería tan difícil. Pensé que sería tan simple como agregar un código de registro a mis funciones como hacemos con los tipos de post y taxonomías.

xLRDxREVENGEx xLRDxREVENGEx
13 may 2011 06:07:26

Voy a sumarme a esta respuesta, pero no es demasiado complejo. El enlace de thinkvitamin.com hace un gran trabajo explicando cómo añadir los metaboxes y guardarlos. El enlace de sltaylor.co.uk es un tutorial increíble sobre el uso de algunas buenas prácticas de codificación. Mi advertencia es que tengas cuidado al usar el hook save_post. Se llama en momentos extraños. Asegúrate de tener la variable WP_DEBUG configurada como true para ver posibles errores que surjan al usarlo.

tollmanz tollmanz
13 may 2011 06:51:14

Solo una actualización, usé el enlace de thinkvitamin y eso ayudó enormemente y fue pan comido configurar campos personalizados

xLRDxREVENGEx xLRDxREVENGEx
14 may 2011 02:31:37

¿Cómo es esto una respuesta aceptable? ¿Enlaces? ¿En serio?

Bangkokian Bangkokian
24 nov 2020 21:37:11
3
20

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

Básicamente necesitas dos pasos para agregar un Campo Personalizado a un Tipo de Entrada Personalizado:

  1. Crear un metabox que contenga tu Campo Personalizado
  2. Guardar tu Campo Personalizado en la base de datos

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

Ejemplo:

Agregar un Campo Personalizado llamado "función" a un Tipo de Entrada Personalizado llamado "prefix-miembrosdeequipo".

Primero agregar el metabox:

function prefix_teammembers_metaboxes( ) {
   global $wp_meta_boxes;
   add_meta_box('postfunctiondiv', __('Función'), 'prefix_teammembers_metaboxes_html', 'prefix-teammembers', 'normal', 'high');
}
add_action( 'add_meta_boxes_prefix-teammembers', 'prefix_teammembers_metaboxes' );

Si agregas o editas un "prefix-teammembers", se activa el hook add_meta_boxes_{custom_post_type}. Consulta http://codex.wordpress.org/Function_Reference/add_meta_box para la función add_meta_box(). En la llamada anterior de add_meta_box() está prefix_teammembers_metaboxes_html, una función de callback para agregar tu 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>Función:</label><input name="function" value="<?php echo $function; ?>">
<?php
}

En el segundo paso guardas tu campo personalizado en la base de datos. Al guardar, se activa el hook save_post_{custom_post_type} (desde la v3.7, ver: https://stackoverflow.com/questions/5151409/wordpress-save-post-action-for-custom-posts). Puedes engancharte a esto para guardar tu campo personalizado:

function prefix_teammembers_save_post()
{
    if(empty($_POST)) return; //¿por qué prefix_teammembers_save_post se activa al agregar nuevo? 
    global $post;
    update_post_meta($post->ID, "function", $_POST["function"]);
}   

add_action( 'save_post_prefix-teammembers', 'prefix_teammembers_save_post' );   
30 ene 2014 22:46:21
Comentarios

"¿Por qué se activa prefix_teammembers_save_post al agregar nuevo?" ¿Has encontrado una respuesta? También me encuentro con un trigger de función extra que no recuerdo.

alex alex
18 feb 2015 07:15:30

"Agregar un Custom Field llamado 'function' a un Custom Post Type llamado 'prefix-teammembers'". ¿Qué significa "llamado"? ¿El nombre? ¿El singular_name? ¿La etiqueta? Quizás es el string usado como primer argumento en la función register_post_type. O tal vez no importa lo que sea siempre que sea consistente.

arnoldbird arnoldbird
7 oct 2019 20:29:00

Usar el hook de guardado prefix_teammembers_save_post parece hacer imposible insertar nuevos campos de post personalizados programáticamente con wp_update_post y la clave meta_input.

tklodd tklodd
6 ene 2022 19:47:01
1

El enlace a thinkvitamin.com en la respuesta aceptada ya no está activo. Ese sitio web ha cambiado su dominio a treehouse.com. Solo estoy respondiendo aquí porque no tengo suficiente reputación para comentar. El contenido de ese enlace expirado está disponible aquí: https://blog.teamtreehouse.com/create-your-first-wordpress-custom-post-type para cualquiera que lo necesite. ¡Buena suerte!

19 may 2021 02:47:10
Comentarios

¡Gracias! Me estaba volviendo loco porque no podía ver el enlace del que hablaban en los comentarios.

Gerard Reches Gerard Reches
28 ene 2024 09:42:42
0

Existen varios plugins para meta boxes personalizados y campos personalizados. Si buscas un plugin enfocado en desarrolladores, entonces deberías probar Meta Box. Es liviano y muy potente.

Si estás buscando un tutorial sobre cómo escribir código para un meta box / campos personalizados, entonces este es un buen comienzo. Es la primera parte de una serie que podría ayudarte a refinar el código para que sea fácil de extender.

3 ene 2018 06:22:22
0

Sé que esta pregunta es antigua, pero para más información sobre el tema:

WordPress tiene soporte integrado para campos personalizados. Si tienes un tipo de publicación personalizado, lo único que necesitas es incluir 'custom-fields' dentro del array de soporte dentro de register_post_type como respondió @kubante.

Nota que esta opción también está disponible para tipos de publicación nativos como entradas y páginas, solo necesitas activarla.

Este campo personalizado es muy básico y acepta un string como valor. En muchos casos eso está bien, pero para campos más complejos, te recomiendo que uses el plugin 'Advanced Custom Fields'.

12 ago 2020 14:07:42
0

Si crees que has hecho todo correctamente y estás usando WordPress 5.7, probablemente todo lo que necesitas es mostrarlo en el panel adicional.

Haz clic en los 3 puntos verticales en la parte superior izquierda > Preferencias > Paneles

Mostrar panel adicional en WordPress 5.7

Por supuesto, esto es después de asegurarte de que el tipo de publicación tenga la configuración correcta.

21 may 2021 04:27:31
0
function custom_field(){  // Campos personalizados para el tipo de entrada personalizado stackoverflow
     add_meta_box(
         'custom_field',
         'Campo personalizado',
         'custom_field_type',
         'user',
         'normal',
         'low'

     );
 }
 add_action('add_meta_boxes','custom_field');
 
 function custom_field_type($post){
     $state = get_post_meta($post->ID,'state',true);
     $country = get_post_meta($post->ID,'country',true);
     $pincode = get_post_meta($post->ID,'pincode',true);
     $college = get_post_meta($post->ID,'college',true);
     ?>
     <label for = "state"> Estado : </label>
     <input type ="text" name="state" value="<?php echo $state ?>"><br><br>
     <label for = "country"> País : </label>
     <input type ="text" name="country" value="<?php echo $country ?>"><br><br>
     <label for = "pincode"> Código postal : </label>
     <input type ="text" name="pincode" value="<?php echo $pincode?>"><br><br>
     <label for = "college"> Nombre de la universidad : </label>
     <input type ="text" name="college" value="<?php echo $college ?>"><br><br>
     <?php
 }

 function handle_custom_field($post_id){
     if(isset($_POST['state'])){
         $state = $_POST['state'];
         update_post_meta($post_id, 'state', $state);
     }
     if(isset($_POST['country'])){
         $country = $_POST['country'];
         update_post_meta($post_id,'country', $country);
     }
     if(isset($_POST['pincode'])){
         $pincode = $_POST['pincode'];
         update_post_meta($post_id,'pincode',$pincode);
     }
     if(isset($_POST['college'])){
        $college = $_POST['college'];
        update_post_meta($post_id,'college',$college);
    }
 }
 add_action('save_post','handle_custom_field');
6 dic 2024 17:03:53
0
-5
// slider_metaboxes_html , función para crear el HTML
function slider_metaboxes( ) {
   global $wp_meta_boxes;
   add_meta_box('postfunctiondiv', __('Enlace personalizado'), 'slider_metaboxes_html', 'slider', 'normal', 'high');
}

//add_meta_boxes_slider => add_meta_boxes_{tipo de post personalizado}
add_action( 'add_meta_boxes_slider', 'slider_metaboxes' );

Conocimiento perfecto

28 oct 2017 09:11:09