Почему add_action и wp_head не выводят содержимое в разделе head

21 июн. 2013 г., 22:16:58
Просмотры: 13.6K
Голосов: 2

У меня серьезная проблема. На странице 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", но ничего не происходит!

1
Комментарии

Вы смогли решить эту проблему? У меня такая же ситуация.

Debbie Kurth Debbie Kurth
9 июн. 2019 г. 00:24:31
Все ответы на вопрос 2
7

Этот код должен выполняться до срабатывания хука wp_head, иначе ничего не произойдет, и при тестировании в файле mu-плагина он действительно работает.

Я подозреваю, что вы пытаетесь подключить эту функцию слишком поздно — возможно, из файла шаблона темы после вызова get_header (в большинстве случаев). Разместите этот код в файле functions.php темы или в файле (mu-)плагина, и он должен работать, по крайней мере, в части вывода содержимого. Я не анализировал его на наличие других ошибок.

21 июн. 2013 г. 22:22:07
Комментарии

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

apanzett apanzett
21 июн. 2013 г. 22:27:02

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

s_ha_dum s_ha_dum
21 июн. 2013 г. 22:33:33

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

apanzett apanzett
21 июн. 2013 г. 22:42:04

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

s_ha_dum s_ha_dum
21 июн. 2013 г. 22:43:53

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

apanzett apanzett
22 июн. 2013 г. 14:03:56

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

s_ha_dum s_ha_dum
22 июн. 2013 г. 18:00:19

Я решил. Проблема была в кеше Facebook :) спасибо

apanzett apanzett
23 июн. 2013 г. 11:02:58
Показать остальные 2 комментариев
2

У меня была такая же проблема. Я решил её, создав собственный хук.

Это в моём файле 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();
}
24 мар. 2016 г. 07:15:32
Комментарии

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

Sumit Sumit
24 мар. 2016 г. 07:38:13

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

Gigi Gerow Gigi Gerow
24 мар. 2016 г. 13:58:39