Удалить заголовок страницы со статической главной страницы
Я хочу удалить заголовок записи только с моей статической главной страницы. Только с этой страницы. Я создал дочернюю тему на основе бесплатной темы 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 - Конечно, лучше. Но исходя из вопроса, ответ хорошо подходит. По моему мнению, лучше предлагать решение, максимально близкое к вопросу, даже когда есть множество более оптимальных решений. У нас есть поговорка: "Что русскому хорошо, то немцу смерть".

Но вот в чем была исходная проблема: "Я хочу убрать заголовок записи со статической главной страницы. Только с этой страницы." В таком случае я определенно рекомендовал бы решение с файлом шаблона front-page.php. В любом случае, ваш ответ получил мой голос.

Я добавляю этот код, используя ID страницы или is_front_page, и ничего не происходит...

Вы почти поняли!
Вот ваш исходный код:
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 предложил в комментарии к моему ответу.

Боже. Я ответил до того, как Chip опубликовал свой комментарий. Я также уточнил свой ответ словами "если я правильно вас понял", что явно было не так.

@Ryan: Извините, если я вас обидел. Я просто сравнил время, и разница была 2 минуты.

Надеюсь, что ответы, голосование, репутация и т.д. здесь не вызывают сильных разногласий? Я не слишком беспокоюсь об этом; главное, чтобы люди получали помощь в решении своих проблем, верно?

@kaiser: Спасибо за понимание — я больше расстроен собой за то, что не прочитал вопрос, на который ты правильно ответил. Было неожиданно, будучи новичком на этом сайте, получить минус, но, как говорит Chip, главное — помочь людям получить ответы. :)

Я совершенно запутался в том, как работает этот сайт. Ответ Ryan совсем не похож на ответ Chip, как мне кажется. Ryan предлагает добавить это в файл шаблона, а не в functions.php. Возможно, я ошибаюсь, но я хотел внести это изменение с помощью хука или фильтра. Я совсем не понимаю, почему это так сложно, ведь я уже делал это раньше с помощью Hybrid Theme Framework. Может быть, это потому, что в моей текущей теме нет нужного хука? И лучший вариант пока что — это комментарий к моему исходному посту, а не один из ответов, так как же мне отметить заслуги?

@Intrepid Realist, когда я давал этот ответ, я не внимательно прочитал ваш вопрос. Мое решение заключается в изменении шаблона header.php, а не functions.php, как вы просили. Поскольку я неправильно понял ваш вопрос, я бы прокомментировал ответ, который ближе всего к тому, что вам нужно. Если вы поставите символ @ перед именем человека, это уведомит его о комментарии, чтобы он мог вам ответить (например, @kaiser, я не совсем понимаю...).
