add_action și wp_head nu afișează conținut în secțiunea head
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!
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.

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

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.

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?

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

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.

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

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

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ă?

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