Почему фильтр the_title () также применяется в заголовке меню?
4663 просмотра
5 ответа
Я создал ниже функцию, чтобы скрыть заголовок страницы. Но когда я его выполню, он также скрывает название меню. Может ли кто-нибудь помочь в этом, он будет высоко оценен.
function wsits_post_page_title( $title ) {
if( is_admin())
return $title;
$selected_type = get_option('wsits_page_show_hide');
if(!is_array($selected_type)) return $title;
if ( ( in_array(get_post_type(), $selected_type ) ) && get_option('wsits_page_show_hide') )
{
$title = '';
}
return $title;
}
add_filter( 'the_title', array($this, 'wsits_post_page_title') );
Автор: softsdev
Источник
Размещён: 17.05.2019 03:36
Ответы (5)
11 плюса
Никола прав:
Потому что пункты меню также имеют заголовки, и их нужно фильтровать :).
Чтобы сделать этот единственный вызов в сообщениях, а не в меню, вы можете добавить чек in_the_loop()
- если это правда, вы находитесь в сообщении.
Поэтому измените первую строку функции:
if( is_admin() || !in_the_loop() )
и все должно быть хорошо.
Автор: Paul Gregory Размещён: 19.11.2012 03:434 плюса
Вы можете сделать что-то вроде этого:
В вашем function.php
:
add_filter( 'the_title', 'ze_title');
function ze_title($a) {
global $dontTouch;
if(!$dontTouch && !is_admin())
$a = someChange($a);
return $a;
}
В вашем шаблоне:
$dontTouch = 1;
wp_nav_menu( array('menu' => 'MyMenu') );
$dontTouch = 0;
Автор: Cyril
Размещён: 11.12.2012 10:09
4 плюса
Это немного взломать, но вы можете решить эту проблему, добавив свое действие в loop_start.
function make_custom_title( $title, $id ) {
// Your Code Here
}
function set_custom_title() {
add_filter( 'the_title', 'make_custom_title', 10, 2 );
}
add_action( 'loop_start', 'set_custom_title' );
Встраивая фильтр the_title внутри действия loop_start, мы избегаем переписывания атрибутов заголовка меню.
Автор: Imperative Размещён: 16.10.2014 08:521 плюс
Проводя этот ответ, потому что это был результат поиска, я в конечном итоге нажал, ища поиск касательно привязки фильтра the_title
, игнорируя эффект фильтра для элементов навигации.
Я работал над разделом в теме, в которой я хотел добавить кнопки в заголовок страницы в заголовке одного тега.
Он выглядел примерно так:
<?php echo '<h1>' . apply_filters( 'the_title', $post->post_title ) . '</h1>'.PHP_EOL; ?>
Я тогда «подключался» следующим образом:
add_filter( 'the_title', 'my_callback_function' );
Тем не менее, вышеупомянутые цели буквально все, что вызывает the_title
фильтр-крючок, и это включает в себя элементы навигации.
Я изменил определение крючка фильтра следующим образом:
<?php echo '<h1>' . apply_filters( 'the_title', $post->post_title, $post->ID, true ) . '</h1>'.PHP_EOL; ?>
Практически каждый вызов the_title
фильтра передает параметр 1 как $post->post_title
параметр и параметр 2 в качестве $post->ID
. Найдите основной код WordPress, apply_filters( 'the_title'*
и вы сами увидите.
Поэтому я решил добавить третий параметр для ситуаций, когда я хочу настроить таргетинг на определенные элементы, которые вызывают the_title
фильтр. Таким образом, я по-прежнему получаю выгоду от всех обратных вызовов, которые применяются к the_title
фильтру по умолчанию, а также имеет возможность полу-однозначно нацеливать элементы, которые используют the_title
привязку фильтра к третьему параметру.
Это простой boolean
параметр:
/**
* @param String $title
* @param Int $object_id
* @param bool $theme
*
* @return mixed
*/
function filter_the_title( String $title = null, Int $object_id = null, Bool $theme = false ) {
if( ! $object_id ){
return $title;
}
if( ! $theme ){
return $title;
}
// your code here...
return $title;
}
add_filter( 'the_title', 'filter_the_title', 10, 3 );
Обозначьте переменные, как хотите. Это то, что сработало для меня, и оно делает именно то, что мне нужно для этого. Этот ответ может быть не 100% релевантным заданному вопросу, но именно здесь я пришел, когда искал решение этой проблемы. Надеюсь, это поможет кому-то в подобной ситуации.
Автор: Michael Ecklund Размещён: 23.01.2017 11:010 плюса
Глобальный $ dontTouch; решение почему-то не сработало для меня. Поэтому я просто удалил фильтр вокруг меню, таким образом, в header.php :
remove_filter( 'the_title', 'change_title' );
get_template_part( 'template-parts/navigation/navigation', 'top' );
add_filter( 'the_title', 'change_title' );
И все хорошо.
Автор: arathra Размещён: 20.11.2018 03:34Вопросы из категории :
- php Как вы отлаживаете PHP-скрипты?
- php Заставьте XAMPP / Apache обслуживать файл вне htdocs
- php Как включить файлы PHP, которые требуют абсолютного пути?
- php Скрипт входа со скрытыми кнопками
- wordpress Могу ли я установить / обновить плагины WordPress без предоставления доступа по FTP?
- wordpress Фильтр Wordpress для изменения окончательного вывода html
- wordpress Неустранимая ошибка Wordpress php: вызов неопределенной функции language_attributes ()?
- wordpress Какой тип хэша использует WordPress?
- filter Каков наилучший способ фильтрации коллекции Java?
- filter Пролог: фильтрация списка?
- filter Как перевернуть строки текстового файла?
- filter MDX: Фильтрация члена, заданного значениями таблицы меры
- themes Каковы возможные классы для функции OpenThemeData?
- themes Кто-нибудь знает, какие настройки IDE использует Скотт Гатри?
- themes Как программно изменить текущую тему Windows?
- themes Eclipse Gurus: где я могу найти информацию для создания темы для IDE? (Желаю похож на Chrome)
- wrap Как настроить ckeditor, чтобы не переносить содержимое в блок <p>?
- wrap Алгоритм рекурсивного Word Wrap
- wrap Запретить перенос встроенного блока, но разрешить перенос содержимого
- wrap CSS вертикальный центр по кругу