Mostrar campos personalizados en WordPress
Una de las cosas más desesperantes es cuando quieres mostrar campos personalizados en WordPress.
Esto es especialmente complicado cuando empiezas a trabajar con WordPress. Los campos personalizados están ahí, solo tienes que ir a "Opciones de pantalla" en la parte superior derecha de tu escritorio WP y hacer clic sobre Campos personalizados.
Ahora ya están disponibles en el escritorio, en la parte inferior, pulsamos sobre Nuevo e inmediatamente puedes añadir el Nombre y el Valor del campo. En nuestro ejemplo vamos a poner tres:
- Libro : El vendedor más grande del mundo
- Autor : Og Mandino
- Formato: Pdf
Perfecto damos a Publicar y en ver página (o ver post) no vemos estos campos. ¿Por qué?
La respuesta yo no la sé, pero voy a intentar explicar como solucionar esto.
Hay mucha información en Google y en YouTube sobre ello, pero para la mayoría de personas que utilizan WordPress sin ser programadores ni desarrolladores las explicaciones son bastante complejas.
Yo voy a explicar aquí algunas de la soluciones, que en principio parecen fáciles y sus inconvenientes.
Primera:
Para que esos campos se vean en nuestra web, bastará con insertar el siguiente código en el lugar indicado que en el caso de entradas lo habitual es en:
/wp-content/themes/nombre_tema/page.php o single.php :
<?php the_meta(); ?>
Vale sí, funciona, pero en Twentytwelve, pero en otros temas hay que buscar el sitio apropiado y además si cambiamos de tema no se nos mostrarán los datos y tendremos que volver a averiguar donde hay que poner el código, que además lo correcto sería ponerlo en un tema hijo (child theme).
Podemos ver la información sobre esto en : https://codex.wordpress.org/
Segunda:
Si estás usando el theme Twenty Seventeen y quieres mostrar los campos personalizados entonces las modificaciones tienes que hacerlas en este archivo : template-parts/post/content.php.
En el archivo content.php en la línea 71 aproximadamente, dentro de la condición que usa la función is_single(), puedes agregar el siguiente código:
$cf_libro = get_post_meta( get_the_ID(), 'Libro', true );
$cf_autor = get_post_meta( get_the_ID(), 'Autor', true );
$cf_formato = get_post_meta( get_the_ID(), 'Formato', true );
if ($cf_libro) echo "Libro: ".$cf_libro."<br>";
if ($cf_autor) echo "Autor: ".$cf_autor."<br>";
if ($cf_formato) echo "Formato: ".$cf_formato."<br>";
Bien, sí funciona, pero estamos en lo mismo que el caso anterior.
Está información está en : https://decodecms.com/
Tercera:
Esta solución es usando un "shortcode" y es la que voy a poner en práctica.
Para ello tenemos dos opciones, vamos a Apariencia/ Editor y editamos el fichero functions.php agregando el siguiente código:
add_shortcode('field', 'shortcode_field');
function shortcode_field($atts){
extract(shortcode_atts(array(
'post_id' => NULL,
), $atts));
if(!isset($atts[0])) return;
$field = esc_attr($atts[0]);
global $post;
$post_id = (NULL === $post_id) ? $post->ID : $post_id;
return get_post_meta($post_id, $field, true);
}
La otra, que es la recomendable y la que voy a usar es crear un Snippet , para ello tenemos que subir el plugin Code Snippets y activarlo. Creamos un snippet que podemos darle el nombre de Shortcode, pegamos el código y activamos el Snippet.
Con esta solución aunque actualicemos el tema o que hagamos un cambio de tema, no vamos a perder nada.
Una vez hecho tan sólo nos vamos a la entrada donde queremos añadir los campos personalizados y agregamos los siguientes shortcodes de esta forma:
[field "libro"]
[field "autor"]
[field "formato"]
Perfecto funciona bien y además podemos maquetarlo directamente desde el editor Visual, modificando: tamaño letra, color, etc. etc.
Una opción fácil y que funciona a las mil maravillas, tanto en entradas como en páginas.
Cuarta:
Muy parecida al anterior, pero podemos decir que funciona al revés.
Creamos también un Snippet al que vamos a llamar "Insertar PHP" y le ponemos en siguiente código:
if( ! function_exists('jml_insertar_php') )
{
function jml_insertar_php($content)
{
$jml_content = $content;
preg_match_all('!\[insertar_php[^\]]*\](.*?)\[/insertar_php[^\]]*\]!is',$jml_content,$jml_matches);
$jml_nummatches = count($jml_matches[0]);
for( $jml_i=0; $jml_i<$jml_nummatches; $jml_i++ )
{
ob_start();
eval($jml_matches[1][$jml_i]);
$jml_replacement = ob_get_contents();
ob_clean();
ob_end_flush();
$jml_content = preg_replace('/'.preg_quote($jml_matches[0][$jml_i],'/').'/',$jml_replacement,$jml_content,1);
}
return $jml_content;
}
add_filter( 'the_content', 'jml_insertar_php', 9 );
}
Fuente del código: https://www.willmaster.com
Seguidamente activamos el snippet y ahora vamos a la entrada o página donde queremos mostrar los campos personalizados y ponemos lo siguiente:
[insertar_php]$cf_libro = get_post_meta( get_the_ID(), 'Libro', true );
$cf_autor = get_post_meta( get_the_ID(), 'Autor', true );
$cf_formato = get_post_meta( get_the_ID(), 'Formato', true );if ($cf_libro) echo "Libro: ".$cf_libro."<br>";
if ($cf_autor) echo "Autor: ".$cf_autor."<br>";
if ($cf_formato) echo "Formato: ".$cf_formato."<br>";[/insertar_php]
Este código entre los dos shortcodes ya lo hemos visto anteriormente.
Esto también funciona bien y también podemos añadirle CSS.
Para no perder este código, tenemos la posibilidad de guardarlo en un snippet (el cual no vamos a activar).
Como hemos visto estas dos opciones últimas son parecidas y cada uno puede optar para la que mejor se adapte a su conveniencia.
Espero con este artículo poder ayudar a alguna persona que esté lidiando con este tema de ver la forma de mostrar los campos personalizados en WordPress.
También puedes descargar desde el repositorio de WordPress el plugin WP Documents Library y modificarlo a tu gusto.
Si te ha gustado este artículo, por favor, comparte - Gracias -