add_action și wp_head nu afișează conținut în secțiunea head

21 iun. 2013, 22:16:58
Vizualizări: 13.6K
Voturi: 2

Am o problemă mare. Într-o pagină Wordpress am o funcție care generează meta tag-uri OG. Vreau să "adaug" acele meta tag-uri generate în secțiunea head. Așadar, am scris acest cod:

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'); nu afișează $output. De ce?

Am încercat să afișez un simplu "hello world", dar nu s-a întâmplat nimic!

1
Comentarii

ai rezolvat vreodată asta? Am aceeași problemă.

Debbie Kurth Debbie Kurth
9 iun. 2019 00:24:31
Toate răspunsurile la întrebare 2
7

Acel cod trebuie să ruleze înainte ca hook-ul wp_head să fie declanșat, altfel nu se va întâmpla nimic, iar atunci când am testat într-un fișier mu-plugin, funcționează.

Bănuiesc că încerci să atașezi acea funcție prea târziu - poate din interiorul unui fișier de șablon al temei după get_header (în majoritatea cazurilor). Plasează acel cod în functions.php al temei sau într-un fișier (mu-)plugin și ar trebui să funcționeze cel puțin în ceea ce privește afișarea conținutului. Nu l-am analizat pentru alte bug-uri.

21 iun. 2013 22:22:07
Comentarii

Într-adevăr, încerc să conectez această funcție într-o pagină de șablon :) Mulțumesc! Voi încerca să modific mâine și vă voi anunța cât mai curând posibil.

apanzett apanzett
21 iun. 2013 22:27:02

Orice cod de care depinde acest cod trebuie să ruleze înaintea acestuia, evident, așa că conectați acel cod la wp_head sau mai devreme. Dacă acest cod trebuie să ruleze doar pe un singur șablon, puteți probabil să puneți tot codul înainte de get_header în fișierul șablon, dar presupun că în cazul vostru acest lucru nu va funcționa - că are nevoie să ruleze mai global decât atât.

s_ha_dum s_ha_dum
21 iun. 2013 22:33:33

Dacă plasez în functions.php, pot extrage un parametru cu get_query_var('id') pentru a genera ulterior în acea funcție o interogare MySql prin id?

apanzett apanzett
21 iun. 2013 22:42:04

get_query_var depinde de obiectul global $wp_query, deci "Da", probabil.

s_ha_dum s_ha_dum
21 iun. 2013 22:43:53

Funcționează, dar Facebook Like Button nu afișează conținutul corect. Dacă lipesc URL-ul pe Facebook, văd conținutul corect, dar dacă dau clic pe butonul Like, conținutul este greșit.

apanzett apanzett
22 iun. 2013 14:03:56

"Conținutul este greșit" este o descriere destul de neclară și fără cod nu prea am ce altceva să spun.

s_ha_dum s_ha_dum
22 iun. 2013 18:00:19

Am rezolvat. Problema era cache-ul de la Facebook :) mulțumesc

apanzett apanzett
23 iun. 2013 11:02:58
Arată celelalte 2 comentarii
2

Am avut aceeași problemă. Am rezolvat-o prin crearea propriului meu hook.

Acesta se află în fișierul meu header.php. Hook-ul meu este plasat înainte de wp_head()

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

Acest hook și funcția de callback atașată hook-ului sunt definite în fișierul meu 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;
    //inserează orice cod pentru a construi $output 
    echo $output;
    wp_reset_query();
}
24 mar. 2016 07:15:32
Comentarii

Răspunsul tău nu are niciun sens! Ai vrea să explici de ce wp_head nu funcționează și cârligul tău personalizat funcționează?

Sumit Sumit
24 mar. 2016 07:38:13

Aș fi încântat să explic, dar nu am suficientă experiență și nu înțeleg WordPress suficient de bine pentru a explica. Tot ce știu este că funcția mea adăugată ca acțiune la wp_head() nu a funcționat. În cercetările mele, am găsit acest post, am citit ce a spus s_ha_dum și m-am gândit "poate de aceea nu pot să fac funcția mea să funcționeze, nu se declanșează suficient de devreme". Așa că am creat propria mea acțiune și am inserat-o înainte de wp_head() și voila! Poate ajută să știi că funcția mea obține date din câmpuri personalizate și le inserează în head-ul documentului (nu în header-ul WordPress).

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