Solución cuando add_action y wp_head no muestran contenido en la sección head

21 jun 2013, 22:16:58
Vistas: 13.6K
Votos: 2

Tengo un gran problema. En una página de WordPress tengo una función que genera meta tags og. Quiero "añadir" esos meta generados en la sección head. Así que escribí este código:

add_action('wp_head', '_set_meta_tag');
function _set_meta_tag()
{
    global $nome;
    global $descr;
    global $file;
    global $path_meta;

    $output = "";
    $output .= '<meta property="og:title" content="'.$nome.'" />';
    $output .= '<meta property="og:type" content="article" />';
    $output .= '<meta property="og:image" content="'; $output .= get_bloginfo('template_url'); $output .= '/includes/img/immagini_evento/'.$file.'" />';
    $output .= '<meta property="og:url" content="'.$path_meta.'" />';
    $output .= '<meta property="og:description" content="'.truncate(htmlentities($descr),200).'" />';
    $output .= '<meta property="og:site_name" content="'; $output .= get_bloginfo('name'); $output .='" />';

    echo $output;}

add_action('wp_head', '_set_meta_tag'); no muestra $output. ¿Por qué?

¡También probé mostrando un simple "hola mundo", pero nada sucedió!

1
Comentarios

¿Alguna vez resolviste esto? Tengo el mismo problema.

Debbie Kurth Debbie Kurth
9 jun 2019 00:24:31
Todas las respuestas a la pregunta 2
7

Ese código debe ejecutarse antes de que se active el hook wp_head o no tendrá efecto alguno, y cuando se probó en un archivo mu-plugin sí funciona.

Sospecho que estás intentando enganchar esa función demasiado tarde, quizás desde dentro de un archivo de plantilla del tema después de get_header (en la mayoría de los casos). Coloca ese código en el functions.php del tema o en un archivo de (mu-)plugin y debería funcionar al menos en cuanto a mostrar contenido. No analicé si tiene otros errores.

21 jun 2013 22:22:07
Comentarios

De hecho, intento enlazar esta función en una página de plantilla :) ¡Gracias! Intentaré cambiarlo mañana y te aviso lo antes posible.

apanzett apanzett
21 jun 2013 22:27:02

Cualquier código del que dependa este código debe ejecutarse antes, obviamente, así que enlaza ese código a wp_head o antes. Si esto solo debe ejecutarse en una plantilla, probablemente puedas colocar todo tu código antes de get_header en el archivo de plantilla, pero supongo que ese no será tu caso, que necesita ejecutarse de manera más global.

s_ha_dum s_ha_dum
21 jun 2013 22:33:33

Si lo coloco en functions.php, ¿puedo extraer un parámetro con get_query_var('id') para luego generar en esa función una consulta MySql a través del id?

apanzett apanzett
21 jun 2013 22:42:04

get_query_var depende del objeto global $wp_query, así que "Sí", probablemente.

s_ha_dum s_ha_dum
21 jun 2013 22:43:53

Funciona, pero el Botón Me Gusta de Facebook no muestra el contenido correcto. Si pego la URL en Facebook, veo el contenido correcto, pero si hago clic en el Botón Me Gusta, el contenido es incorrecto.

apanzett apanzett
22 jun 2013 14:03:56

"El contenido es incorrecto" es una descripción bastante vaga y sin código no hay mucho más que pueda decir.

s_ha_dum s_ha_dum
22 jun 2013 18:00:19

Lo he solucionado. El problema era la caché de Facebook :) gracias

apanzett apanzett
23 jun 2013 11:02:58
Mostrar los 2 comentarios restantes
2

Tuve este mismo problema. Lo resolví creando mi propio hook.

Esto está en mi archivo header.php. Mi hook se coloca antes de wp_head()

<?php my_doc_head(); ?>
<?php wp_head(); ?>
</head>

Este hook y la función callback añadida al hook están definidas en mi function.php.

function my_doc_head() {
    do_action('my_doc_head');
}

add_action('my_doc_head','my_seo_meta');
function my_seo_meta() {
    global $wp_query;
    $postid = $wp_query->post->ID;
    //inserta cualquier código para construir $output 
    echo $output;
    wp_reset_query();
}
24 mar 2016 07:15:32
Comentarios

¡Tu respuesta no tiene ningún sentido! ¿Podrías explicar por qué wp_head no funciona y tu hook personalizado sí?

Sumit Sumit
24 mar 2016 07:38:13

Me encantaría explicarlo, pero no tengo suficiente experiencia y no entiendo WordPress lo suficientemente bien como para hacerlo. Todo lo que sé es que mi función, añadida como acción a wp_head(), no funcionó. En mi investigación, encontré esta publicación, leí lo que dijo s_ha_dum y pensé "tal vez esa es la razón por la que no puedo hacer que mi función funcione, no se está ejecutando lo suficientemente pronto". Así que creé mi acción y la inserté antes de wp_head() y ¡voilà! Tal vez ayude saber que mi función obtiene datos de campos personalizados y los inserta en el head del documento (no en el encabezado de WordPress).

Gigi Gerow Gigi Gerow
24 mar 2016 13:58:39