Почему add_action и wp_head не выводят содержимое в разделе head
У меня серьезная проблема. На странице WordPress есть функция, которая генерирует og мета-теги. Я хочу "добавить" эти сгенерированные мета-теги в раздел head. Для этого я написал такой код:
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');
не выводит $output
. Почему?
Я пробовал даже выводить просто "hello world", но ничего не происходит!
Этот код должен выполняться до срабатывания хука wp_head
, иначе ничего не произойдет, и при тестировании в файле mu-плагина он действительно работает.
Я подозреваю, что вы пытаетесь подключить эту функцию слишком поздно — возможно, из файла шаблона темы после вызова get_header
(в большинстве случаев). Разместите этот код в файле functions.php
темы или в файле (mu-)плагина, и он должен работать, по крайней мере, в части вывода содержимого. Я не анализировал его на наличие других ошибок.

Действительно, я пытаюсь подключить эту функцию в шаблоне страницы :) Спасибо! Попробую изменить завтра и дам знать как можно скорее.

Любой код, от которого зависит этот код, очевидно, должен выполняться раньше, так что подключите этот код к хуку wp_head
или раньше. Если это должно выполняться только в одном шаблоне, вы можете поместить весь свой код перед get_header
в файле шаблона, но я предполагаю, что в вашем случае это не сработает — вероятно, код должен выполняться более глобально.

Если я размещу в functions.php
, смогу ли я извлечь параметр с помощью get_query_var('id')
, чтобы затем в этой функции сформировать MySql запрос по этому id?

get_query_var
зависит от глобального объекта $wp_query
, так что "Да", скорее всего.

Кнопка работает, но Facebook Like Button не отображает правильный контент. Если я вставлю URL в Facebook, я вижу правильный контент, но если я нажму на кнопку Like, контент отображается неверно.

Фраза "контент отображается неверно" довольно бессмысленна, и без кода я больше ничего не могу сказать.

У меня была такая же проблема. Я решил её, создав собственный хук.
Это в моём файле header.php
. Мой хук размещён перед wp_head()
<?php my_doc_head(); ?>
<?php wp_head(); ?>
</head>
Этот хук и функция обратного вызова, добавленная к хуку, определены в моём 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;
//вставьте любой код для формирования $output
echo $output;
wp_reset_query();
}

Ваш ответ не имеет никакого смысла! Не могли бы вы объяснить, почему wp_head
не работает, а ваш пользовательский хук работает?

Я бы с радостью объяснил, но у меня недостаточно опыта и я недостаточно хорошо разбираюсь в WordPress, чтобы это объяснить. Все, что я знаю - моя функция, добавленная как действие к wp_head(), не работала. В ходе исследований я нашел этот пост, прочитал, что сказал s_ha_dum, и подумал: "может быть, именно поэтому моя функция не работает - она выполняется недостаточно рано". Поэтому я создал собственное действие и вставил его перед wp_head(), и вуаля! Возможно, полезно знать, что моя функция получает данные из произвольных полей и вставляет их в head документа (не в шапку WordPress).
