Wordpress version 4.5.1
Я пытаюсь динамически обновлять заголовки страниц для определенного шаблона. После множества копаний и изучения wp_title()
изменений я пытаюсь их использовать document_title_parts
. Однако я не могу заставить фильтр работать вообще.
Я в детской теме, functions.php
:
add_theme_support( 'title-tag' );
//add_filter("after_setup_theme", function(){ add_theme_support("title-tag"); });
add_filter( 'document_title_parts', function( $title )
{
error_log('here');
return $title;
}, 10, 1 );
Я пробовал оба варианта добавления поддержки тем, как показано выше, но, просматривая мой журнал, ничего не появляется при перезагрузке страницы. Это error_log
работало с другими функциями (такими как wp_title
), поэтому ведение журнала ошибок работает.
Я также пытался pre_get_document_title
, который запускается при загрузке страницы, хотя я не могу заставить его фактически изменить заголовок.
Так! Я неправильно использую фильтр, неправильно настроил тему или что-то еще, о чем я не знаю. Любая помощь будет принята с благодарностью!
изменить, чтобы добавить больше деталей
Попытка инициализировать функцию, но она также не работает: https://gist.github.com/anonymous/6db5af892a4cf4fb029655167d7002a4
Кроме того, хотя я удалил любую ссылку <title>
из header.php
, фактическое название сайта все еще отображается в источнике.
//add_filter("after_setup_theme", function(){ add_theme_support("title-tag"); });
? Это правильное использование добавления поддержки темы.add_theme_support()
функцию в хуке инициализации . Другое дело, чтобы гарантировать, что вы перезаписываете свойheader.php
файл, чтобы не иметь HTML-<title>
тег.<title>
в твоих тегах нетheader.php
? Может быть, попробовать заменить10
наPHP_MAX_INT
. Также переданный параметр является массивом вместо строкового значения.Ответы:
Я запустил ваш фильтр в моей области разработки. Это не сработало. Затем я отключил плагин Yoast SEO, который, как я знал, также портил заголовок страницы. Тогда это сработало. Так что мое предложение было бы другим плагином возиться с ним.
В случае с Yoast это был вызов фильтра для
pre_get_document_title
возврата непустого значения. В этом случаеwp_get_document_title
происходит короткое замыкание, а остальная часть функции, включаяdocuments_title_parts
фильтр, не оценивается, как вы можете видеть из первых строк кода:Итак, я взял твой фильтр и поменял крючок на
pre_get_document_title
. Это не сработало. Затем я изменил приоритет на более высокий уровень, чем тот же фильтр в Yoast. Тогда это сработало. Итак, я не знаю о вашей настройке, но я предлагаю вам попробовать:источник
pre_get_document_title
приоритет 15 достаточно.После некоторых экспериментов я пришел к следующему предложению: может быть,
<title>
тег «жестко закодирован» внутри родительской темыheader.php
? Если это так, вы можете попытаться удалить<title>
тег из дочерней темыheader.php
(скопировать родительский элементheader.php
в папку дочерней темы), а затем добавить поддержку темы обратно черезfunctions.php
:Я попытаюсь объяснить, что привело меня к этому предложению: я попытался, как вы и другие предложили, - но оказалось, что я нашел два
<title>
тега в исходном коде. Первый имел стандартный заголовок , второй - измененный . Но (конечно) в строке заголовка браузера я мог видеть только заголовок по умолчанию.Затем я проверил
header.php
родительскую тему, которую я использовал (двадцать четыре), и<title>
тег был действительно жестко закодирован в этом шаблоне следующим образом:После того, как я удалил его, я добавил следующий код в дочернюю тему,
functions.php
и он заработал:Так что это в основном также работало до удаления
<title>
тега из шаблона - только то, что тогда было два тега,<title>
последний из которых был проигнорирован. Может ли это быть той же проблемой с вашей темой?Начиная с wp 4.4.0, однако,
<title>
тег создается динамически функцией,_wp_render_title_tag()
которая в основном вызывает другую функциюwp_get_document_title()
и оборачивает html-теги вокруг результата. Короче говоря: если в вашей темеheader.php
отсутствует<title>
тег, есть вероятность, что вы можете переопределить заголовок напрямуюpre_get_document_title
илиdocument_title_parts
как описано здесь :1) изменить название напрямую:
2) фильтрация заглавных частей:
источник
Прочитав ваш пост сверху донизу и снизу вверх, вы, вероятно, получите фильтр, который пропускает заголовок через
pre_get_document_title
фильтр. Подсказка здесь следующее утверждение:Глядя на код soure для
wp_get_document_title()
, мы видим следующий код:Это означает, что всякий раз, когда непустое значение проходит через
pre_get_document_title
фильтр,wp_get_document_title()
функция возвращает любое значение, которое было передано черезpre_get_document_title
фильтр. В этом случаеdocument_title_separator
фильтр иdocument_title_parts
фильтр никогда не будут выполнены, поскольку они запускаются только послеpre_get_document_title
фильтра.Глядя на то, что вы сказали немного дальше:
у вас определенно есть
pre_get_document_title
фильтр с полномочиями, который переопределяет ваш экземпляр того же фильтра, и из-за этого фильтра функция возвращает все, что ему передано, что приводит к тому, что вашdocument_title_parts
фильтр не выполняется.Что вам нужно сделать, это использовать либо
grep
хороший редактор, и искатьwp-content
этотpre_get_document_title
фильтр во всей папке . Как только вы нашли этот фильтр, вы можете взять его оттуда, чтобы удалить этот фильтр и заменить его своим собственнымисточник
document_title_parts
илиpre_get_document_title
возвращает 0 результатов. Я использую SublimeText 2 для поиска всего wp-контента ...pre_get_document_title
, что полностью объясняет, почему второй фильтр не срабатывает. Это оставляетpre_get_document_title
фильтр пустым, что означает, что два других фильтра в функции должны срабатывать, но они не работают. Мне остается сделать вывод о поврежденном ядре Wordpress.Если родительская тема не объявляет поддержку,
title-tag
вы можете сделать это следующим образом в дочерней теме.Отфильтруйте
document_title_parts
ожидаемый массив возвращаемого типа, например, обязательно измените условие if в соответствии с вашими требованиями или полностью удалите его, чтобы изменить заголовок по всему сайту только для проверки его работоспособности.Можете ли вы попробовать эти две функции?
источник
add_theme_support_child
вошел в систему.