add_action e wp_head non mostrano il contenuto nella sezione head
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!
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.

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

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.

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?

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

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.

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

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();
}

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

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).
