Удалить заголовок страницы со статической главной страницы

29 мар. 2011 г., 23:08:59
Просмотры: 7.91K
Голосов: 2

Я хочу удалить заголовок записи только с моей статической главной страницы. Только с этой страницы. Я создал дочернюю тему на основе бесплатной темы Press75. Поэтому я хочу внести это изменение в файл function.php моей дочерней темы.

Я использовал этот код, но он удаляет заголовок со всех страниц, записей и даже навигации:

add_filter( 'the_title', 'remove_page_title' );

function remove_page_title() {
    if(is_page('138')) {
    }
    return '';
}

Я думал, что он удалит заголовок только со страницы с ID 138. Что я делаю неправильно?

Спасибо!

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

Создать шаблон front-page.php и удалить заголовок?

t31os t31os
30 мар. 2011 г. 01:59:22

Это было самое простое решение. Но создавать целый шаблон только для удаления заголовка кажется избыточным. В Hybrid Framework я могу сделать это в functions.php, используя один из хуков Джастина.

Intrepid Realist Intrepid Realist
1 апр. 2011 г. 00:10:52

Столкнулся с точно такой же проблемой. Попробовал подход Kaiser-Chip, который сработал нормально - за исключением того, что он также удалил все пункты меню + все заголовки записей в виджете боковой панели. Кроме того, хотя он удалил заголовок страницы, стилизация заголовка осталась - включая отступы и границу снизу.

Есть ли другое решение?

User User
30 мар. 2011 г. 13:32:16

@Anders Можешь удалить этот ответ и добавить его как новый вопрос.

Chris_O Chris_O
6 апр. 2011 г. 11:56:30
Все ответы на вопрос 5
5

оберните вызов функции add_filter в условный тег и используйте встроенную функцию return false:

if ( is_page('138') ) // Проверяем, является ли текущая страница страницей с ID 138
{
      add_filter( 'the_title', '__return_false' ); // Отключаем вывод заголовка для этой страницы
}
29 мар. 2011 г. 23:22:05
Комментарии

Мне нравится это предложение, но разве использование if ( ! is_front_page() ) не будет лучше, чем жестко заданный ID страницы, например if ( is_page( '138' ) )?

Chip Bennett Chip Bennett
29 мар. 2011 г. 23:30:21

@Chip Bennett - Конечно, лучше. Но исходя из вопроса, ответ хорошо подходит. По моему мнению, лучше предлагать решение, максимально близкое к вопросу, даже когда есть множество более оптимальных решений. У нас есть поговорка: "Что русскому хорошо, то немцу смерть".

kaiser kaiser
29 мар. 2011 г. 23:57:22

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

Chip Bennett Chip Bennett
30 мар. 2011 г. 06:10:18

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

Intrepid Realist Intrepid Realist
1 апр. 2011 г. 00:11:42

Я не уверен насчет функции __return_false. Возможно, она называется похожим образом. Вы также можете написать небольшую функцию самостоятельно, которая возвращает false, и добавить её. В любом случае, комментарий Chip'а — лучшее решение.

kaiser kaiser
1 апр. 2011 г. 05:04:54
0

Вы почти поняли!

Вот ваш исходный код:

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;
}
16 дек. 2011 г. 20:51:48
0

Вот способ удалить основной заголовок (не тег) с главной страницы в теме 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 );

Код основан на этом ответе.

12 июн. 2020 г. 13:18:10
0

Один из способов для header.php:

<?php if (is_page('138')) { echo'
<style type="text/css" title="text/css">
yourpagetitleselector {display:none;}
</style>'
; ?>
29 мар. 2011 г. 23:15:55
7
-1

Если я правильно вас понял — вы не хотите отображать <title> на главной странице — вы можете использовать:

<title><?php if ( ! is_front_page() ) { the_title(); } ?></title>
29 мар. 2011 г. 23:26:21
Комментарии

<title> !== the_title(); Смотрите: http://codex.wordpress.org/Function_Reference/the_title Более того, это именно то, что @Chip Bennett предложил в комментарии к моему ответу.

kaiser kaiser
29 мар. 2011 г. 23:58:58

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

Ryan Ryan
30 мар. 2011 г. 00:12:43

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

kaiser kaiser
30 мар. 2011 г. 01:18:22

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

Chip Bennett Chip Bennett
30 мар. 2011 г. 06:15:39

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

Ryan Ryan
30 мар. 2011 г. 07:45:32

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

Intrepid Realist Intrepid Realist
1 апр. 2011 г. 00:19:52

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

Ryan Ryan
4 апр. 2011 г. 04:17:22
Показать остальные 2 комментариев