Удалить заголовок страницы со статической главной страницы
Я хочу удалить заголовок записи только с моей статической главной страницы. Только с этой страницы. Я создал дочернюю тему на основе бесплатной темы Press75. Поэтому я хочу внести это изменение в файл function.php моей дочерней темы.
Я использовал этот код, но он удаляет заголовок со всех страниц, записей и даже навигации:
add_filter( 'the_title', 'remove_page_title' );
function remove_page_title() {
if(is_page('138')) {
}
return '';
}
Я думал, что он удалит заголовок только со страницы с ID 138. Что я делаю неправильно?
Спасибо!
оберните вызов функции add_filter в условный тег и используйте встроенную функцию return false:
if ( is_page('138') ) // Проверяем, является ли текущая страница страницей с ID 138
{
add_filter( 'the_title', '__return_false' ); // Отключаем вывод заголовка для этой страницы
}
Мне нравится это предложение, но разве использование if ( ! is_front_page() ) не будет лучше, чем жестко заданный ID страницы, например if ( is_page( '138' ) )?
Chip Bennett
@Chip Bennett - Конечно, лучше. Но исходя из вопроса, ответ хорошо подходит. По моему мнению, лучше предлагать решение, максимально близкое к вопросу, даже когда есть множество более оптимальных решений. У нас есть поговорка: "Что русскому хорошо, то немцу смерть".
kaiser
Но вот в чем была исходная проблема: "Я хочу убрать заголовок записи со статической главной страницы. Только с этой страницы." В таком случае я определенно рекомендовал бы решение с файлом шаблона front-page.php. В любом случае, ваш ответ получил мой голос.
Chip Bennett
Я добавляю этот код, используя ID страницы или is_front_page, и ничего не происходит...
Intrepid Realist
Вы почти поняли!
Вот ваш исходный код:
add_filter( 'the_title', 'remove_page_title' );
function remove_page_title() {
if(is_page('138')) {
}
return '';
}
Что он делает: добавляет фильтр на the_title, который не принимает никаких параметров. Это ваша первая ошибка. Фильтр the_title на самом деле принимает два параметра — заголовок страницы/записи и её ID. Итак, сначала перепишем наш хук:
add_filter( 'the_title', 'remove_page_title', 10, 2 );
function remove_page_title( $title, $id ) {
}
Это устанавливает наш фильтр с приоритетом 10 и позволяет нам принимать оба параметра, передаваемые фильтром. Затем мы указываем параметры, которые принимает наша функция.
Внутри функции мы хотим проверить, находимся ли мы на нужной странице. Если да, возвращаем '', если нет — возвращаем заголовок:
if( '138' == $id ) return '';
return $title;
Ваша исходная функция всегда возвращала '', когда срабатывал фильтр. Вот почему у вас был пустой заголовок на каждой странице, а не только на нужной.
Полный код
Итак, полный фильтр, переписанный для принятия параметров и использования правильной логики:
add_filter( 'the_title', 'remove_page_title', 10, 2 );
function remove_page_title( $title, $id ) {
if( '138' == $id ) return '';
return $title;
}
Вот способ удалить основной заголовок (не тег) с главной страницы в теме 2020, при этом не удаляя the_title из пунктов меню:
function no_title_front_page( $title, $id = null ) {
// Если это главная страница и передан ID, возвращаем пустую строку
if (is_front_page() && !is_null( $id )) {
return '';
}
return $title;
}
add_filter( 'the_title', 'no_title_front_page', 10, 2 );
function wpse309151_remove_title_filter_nav_menu( $nav_menu, $args ) {
// Работаем с меню, поэтому удаляем фильтр заголовка
remove_filter( 'the_title', 'no_title_front_page', 10, 2 );
return $nav_menu;
}
// Этот фильтр срабатывает перед созданием пунктов меню
add_filter( 'pre_wp_nav_menu', 'wpse309151_remove_title_filter_nav_menu', 10, 2 );
function wpse309151_add_title_filter_non_menu( $items, $args ) {
// Завершили работу с меню, возвращаем фильтр заголовка
add_filter( 'the_title', 'no_title_front_page', 10, 2 );
return $items;
}
// Этот фильтр срабатывает после создания пунктов меню
add_filter( 'wp_nav_menu_items', 'wpse309151_add_title_filter_non_menu', 10, 2 );
Код основан на этом ответе.
<title> !== the_title(); Смотрите: http://codex.wordpress.org/Function_Reference/the_title Более того, это именно то, что @Chip Bennett предложил в комментарии к моему ответу.
kaiser
Боже. Я ответил до того, как Chip опубликовал свой комментарий. Я также уточнил свой ответ словами "если я правильно вас понял", что явно было не так.
Ryan
@Ryan: Извините, если я вас обидел. Я просто сравнил время, и разница была 2 минуты.
kaiser
Надеюсь, что ответы, голосование, репутация и т.д. здесь не вызывают сильных разногласий? Я не слишком беспокоюсь об этом; главное, чтобы люди получали помощь в решении своих проблем, верно?
Chip Bennett
@kaiser: Спасибо за понимание — я больше расстроен собой за то, что не прочитал вопрос, на который ты правильно ответил. Было неожиданно, будучи новичком на этом сайте, получить минус, но, как говорит Chip, главное — помочь людям получить ответы. :)
Ryan
Я совершенно запутался в том, как работает этот сайт. Ответ Ryan совсем не похож на ответ Chip, как мне кажется. Ryan предлагает добавить это в файл шаблона, а не в functions.php. Возможно, я ошибаюсь, но я хотел внести это изменение с помощью хука или фильтра. Я совсем не понимаю, почему это так сложно, ведь я уже делал это раньше с помощью Hybrid Theme Framework. Может быть, это потому, что в моей текущей теме нет нужного хука? И лучший вариант пока что — это комментарий к моему исходному посту, а не один из ответов, так как же мне отметить заслуги?
Intrepid Realist
@Intrepid Realist, когда я давал этот ответ, я не внимательно прочитал ваш вопрос. Мое решение заключается в изменении шаблона header.php, а не functions.php, как вы просили. Поскольку я неправильно понял ваш вопрос, я бы прокомментировал ответ, который ближе всего к тому, что вам нужно. Если вы поставите символ @ перед именем человека, это уведомит его о комментарии, чтобы он мог вам ответить (например, @kaiser, я не совсем понимаю...).
Ryan