add_action e wp_head non mostrano il contenuto nella sezione head

21 giu 2013, 22:16:58
Visualizzazioni: 13.6K
Voti: 2

Ho un grosso problema. In una pagina WordPress ho una funzione che genera meta tag og. Voglio "aggiungere" questi meta generati nella sezione head. Quindi, ho scritto questo codice:

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'); non mostra $output. Perché?

Ho provato anche a visualizzare un semplice "hello world", ma non è successo nulla!

1
Commenti

hai mai risolto questo problema? Ho lo stesso identico problema.

Debbie Kurth Debbie Kurth
9 giu 2019 00:24:31
Tutte le risposte alla domanda 2
7

Quel codice deve essere eseguito prima che il hook wp_head venga attivato, altrimenti non accadrà nulla, e quando testato in un file mu-plugin funziona correttamente.

Sospetto che tu stia tentando di agganciare quella funzione troppo tardi— forse all'interno di un file template del tema dopo get_header (nella maggior parte dei casi). Inserisci quel codice nel functions.php del tema o in un file (mu-)plugin e dovrebbe funzionare almeno per quanto riguarda l'output del contenuto. Non ho analizzato il codice per altri eventuali bug.

21 giu 2013 22:22:07
Commenti

Infatti, provo ad agganciare questa funzione in una pagina template :) Grazie! Proverò a cambiare domani e ti farò sapere il prima possibile.

apanzett apanzett
21 giu 2013 22:27:02

Ovviamente, qualsiasi codice da cui dipende questo codice deve essere eseguito prima di questo, quindi aggancia quel codice a wp_head o prima. Se questo deve essere eseguito solo su un template, puoi probabilmente mettere tutto il tuo codice prima di get_header nel file del template, ma immagino che nel tuo caso non funzionerà—che deve essere eseguito più globalmente.

s_ha_dum s_ha_dum
21 giu 2013 22:33:33

Se lo metto in functions.php, posso estrarre un parametro con get_query_var('id') per generare successivamente in quella funzione una query MySql attraverso l'id?

apanzett apanzett
21 giu 2013 22:42:04

get_query_var dipende dall'oggetto global $wp_query, quindi "Sì", probabilmente.

s_ha_dum s_ha_dum
21 giu 2013 22:43:53

Funziona, ma il pulsante Mi Piace di Facebook non mostra il contenuto corretto. Se incollo l'URL su Facebook, vedo il contenuto giusto, ma se clicco sul pulsante Mi Piace, il contenuto è sbagliato.

apanzett apanzett
22 giu 2013 14:03:56

"Il contenuto è sbagliato" è una descrizione piuttosto priva di significato e senza codice non c'è molto altro che io possa dire.

s_ha_dum s_ha_dum
22 giu 2013 18:00:19

Ho risolto. Il problema era la cache di Facebook :) grazie

apanzett apanzett
23 giu 2013 11:02:58
Mostra i restanti 2 commenti
2

Ho avuto lo stesso problema. Ho risolto creando il mio hook personalizzato.

Questo è nel mio file header.php. Il mio hook è posizionato prima di wp_head()

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

Questo hook e la funzione di callback aggiunta all'hook sono definiti nel mio 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;
    //inserisci qualunque codice per costruire $output 
    echo $output;
    wp_reset_query();
}
24 mar 2016 07:15:32
Commenti

La tua risposta non ha alcun senso! Potresti spiegare perché wp_head non funziona e il tuo hook personalizzato sì?

Sumit Sumit
24 mar 2016 07:38:13

Mi piacerebbe spiegarlo, ma non ho abbastanza esperienza e non conosco WordPress a sufficienza per farlo. Tutto quello che so è che la mia funzione aggiunta come azione a wp_head() non funzionava. Nella mia ricerca, ho trovato questo post, ho letto ciò che ha detto s_ha_dum e ho pensato "forse è per questo che non riesco a far funzionare la mia funzione, non viene attivata abbastanza presto". Quindi ho creato la mia azione e l'ho inserita prima di wp_head() e voilà! Forse aiuta sapere che la mia funzione recupera dati da campi personalizzati e li inserisce nell'head del documento (non nell'header di WordPress).

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