Проверьте, является ли текущая страница страницей блога

33

Я новичок в WordPress. Я ищу способ проверить, является ли текущая страница страницей блога в коде файла заголовка.

Я проверил, но я не могу найти способ. Помоги мне, пожалуйста.

KarSho
источник

Ответы:

42

Если под « страницей блога » вы подразумевали статическую страницу, заданную как страница постов в настройках чтения , вы можете проверить это, выполнив следующее:

if ( is_front_page() && is_home() ) {
  // Default homepage
} elseif ( is_front_page() ) {
  // static homepage
} elseif ( is_home() ) {
  // blog page
} else {
  //everyting else
}

Когда вы используете is_home()и is_front_page(), вы должны использовать их в правильном порядке, чтобы избежать ошибок и протестировать каждую пользовательскую конфигурацию.

(Источник: Условные теги - Страница блога )

Или просто:

if ( !is_front_page() && is_home() ) {
  // blog page
}

Или проще (я полагаю):

if ( is_home() ) {
  // blog page
}
Джиральди
источник
Один из вариантов использования if ( !is_front_page() && is_home() ), по крайней мере, на мой взгляд, заключается в том, что вы распространяете тему с другим стилем макета для домашней страницы по умолчанию и страницы блога .
Джиральди
Я считаю, что is_front_page () вернет true независимо от того, выбран ли архив блога или страница. Нужна проверка. codex.wordpress.org/Function_Reference/is_front_page
atwellpub
19

Вы можете использовать следующее в вашем файле functions.php themes:

function is_blog () {
    return ( is_archive() || is_author() || is_category() || is_home() || is_single() || is_tag()) && 'post' == get_post_type();
}

А затем поместите это в проверяемый файл:

<?php if (is_blog()) { echo 'You are on a blog page'; } ?>

Вы можете использовать Hooks в вашем файле functions.php, чтобы перехватить все вышеперечисленное, чтобы они появлялись на каждой странице.

Vagish
источник
1
Это отличный ответ , если вы хотите , чтобы определить , если вы на на странице блога, но необязательно из страницы блога (как на главной странице блога). Смотрите ответ @ Giraldi за это.
Тим Мэлоун
Я неправильно предположил, что is_blog () существует, потому что is_page () существует. Мне не пришло в голову обратиться к официальному индексу условных тегов WordPress . Мне удалось эффективно применить это решение с помощью плагина Widget Logic.
Кларус Дигнус
11

Если под «страницей блога» вы подразумевали статическую страницу, установленную как страница постов в Рединге:

global $wp_query;

if ( isset( $wp_query ) && (bool) $wp_query->is_posts_page ) {
    //static blog page
}

PS. Это решение также работает с действием template_redirect.

Сергей Репин
источник
Привет repinsa, добро пожаловать в WPSE :) Спасибо за добавление вашего ответа. За него проголосовали немного, возможно потому, что в коде есть синтаксическая ошибка (после него пропущена точка с запятой global $wp_query), а также потому, что он не полностью отвечает на вопрос. Это функция, но ОП спросил, как это решить, в своем заголовочном файле - так что, возможно, понадобится немного больше объяснений о том, что и куда помещать. Снова, добро пожаловать, рад, что вы здесь!
Тим Мэлоун
2
Это на самом деле единственный хороший ответ здесь, должно было иметь больше голосов.
Лачо Томов
2

Чтобы получить страницу индекса блога , я обнаружил, что

if ( !is_front_page() && is_home() ) {
  // blog page
}

у меня не работает, мне пришлось использовать функцию get_option ('page_for_posts'), чтобы идентифицировать страницу блога post_id, мой ответ:

if ( !is_front_page() && is_home() ){  

    if ( empty ( $post_id) ) {
        global $post;
        $post_id =  get_option( 'page_for_posts' );
    }

    //blog page
}
J.Wang
источник
0

Есть хитрый метод.

http://example.com/blog

Предположим, что если у вас есть страница блога blog, вы можете использовать этот код.

global $wp_query;
if($wp_query->query['pagename']=='blog'){
// this is blog page
}
Раджилеш Паноли
источник
0

ГЛАВНАЯ

if(is_home() && is_front_page() || is_front_page()): // static or default hompage
 ...
endif;

БЛОГ

if(is_home() && !is_front_page()): // blog
 ...
endif;
DevWL
источник
0

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

if( is_page('blog') ) {
echo "This is your blog page"; 
}

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

Рахман Зеб
источник
0

Вы можете использовать..

<?php if ( is_single() ) { ?>

Do stuff here

<?php } ?>

чтобы проверить, является ли это единственным сообщением в блоге. Или...

<?php if ( is_home() ) { ?>

Do stuff here

<?php } ?>

проверить, если это домашняя страница блога

Xav
источник
2
Не работает, если вы изменили страницу блога
cdmckay
Это не дает правильного ответа на ФП. Это означает, что вы находитесь на одном посте, а не на «странице блога».
butlerblog
-1

Я использую этот способ

// Get body classes as array
$body_classes = get_body_class();
// Check if "blog" class exists in the array
if(in_array("blog", $body_classes)) {
   // Do stuff
}
Джон Смит
источник