if (is_page(**PAGE ID**)) не работает

19 мар. 2014 г., 13:03:51
Просмотры: 230K
Голосов: 7

Я следую этому руководству по добавлению кода Google Content Experiments в header.php.

Я добавил следующий код в header.php:

<?php if (is_page('346') ):?>
    <!-- Код эксперимента Google Analytics -->
        ...
    <!-- Конец кода эксперимента Google Analytics -->
<?php endif; ?>

Это не отобразило код эксперимента на фронтенде. Я попробовал:

<?php if (is_page(346) ):?>
    <!-- Код эксперимента Google Analytics -->
        ...
    <!-- Конец кода эксперимента Google Analytics -->
<?php endif; ?>

Это тоже не сработало.

Можете подсказать, почему этот код не работает? Спасибо.

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

Вы ведь проверили, что находитесь на странице с ID 346, верно?

kraftner kraftner
19 мар. 2014 г. 13:11:15

Если это другой тип контента, попробуйте использовать if ( get_the_ID() == 346 ).

fischi fischi
19 мар. 2014 г. 13:13:45

Да, kraftner. Я изменил подход и начал использовать WP Content Experiments & Event Tracking, что работает для меня.

Steve Steve
19 мар. 2014 г. 13:15:26
Все ответы на вопрос 8
5
18

вы можете использовать это для

<?php 
// получаем глобальную переменную post
global $post;

if( $post->ID == 346) { ?>

      <!-- здесь размещаете ваш код -->

<?php } ?>

вы можете использовать это в любом месте, будь то в шапке сайта или где-либо еще.

6 янв. 2017 г. 11:43:52
Комментарии

Что если я хочу добавить PHP функцию в <!-- do stuff -->? Мне просто использовать `<?php if( $post->ID == 346) {

  <!-- do your stuff here -->

} ?>`

jarrodwhitley jarrodwhitley
16 нояб. 2018 г. 20:43:44

Да, вы можете вызвать свою функцию в <!-- do your stuff here -->

Waqas Shakeel Waqas Shakeel
17 нояб. 2018 г. 07:50:03

Хм. У меня не работает. Пожалуй, я создам пост.

jarrodwhitley jarrodwhitley
19 нояб. 2018 г. 17:07:09

Всегда ли доступна глобальная переменная $post? Будет ли она всегда объектом с ID? А как насчет страниц архива?

Firsh - justifiedgrid.com Firsh - justifiedgrid.com
5 янв. 2022 г. 01:02:28

@Firsh-justifiedgrid.com да, переменная всегда доступна, независимо от того, является ли это страницей, записью, вложением или любым пользовательским типом записи.

Waqas Shakeel Waqas Shakeel
6 янв. 2022 г. 09:47:42
4

Более простым решением будет передать title или slug в качестве аргумента в is_page(). У вас не возникнет проблем, если вы продублируете эту страницу на другом сервере.

<?php
if (is_page( 'Page Title' ) ):
  # Выполняйте ваши действия
endif;
?>
19 мар. 2014 г. 15:32:42
Комментарии

Использование ярлыка (slug) - лучшее решение

Rob Rob
10 авг. 2018 г. 07:43:10

Если администратор решит изменить ярлык записи в будущем, нарушит ли это условие?

Viktor Borítás Viktor Borítás
15 апр. 2020 г. 11:16:32

@ViktorBorítás Да, нарушит. Если вы обычно используете функции импорта/экспорта WordPress во время разработки, нет гарантии, что на всех ваших серверах будет один и тот же ID страницы. Если вы каждый раз разворачиваете всю базу данных, тогда вы получите тот же ID страницы. В противном случае можно использовать заголовок страницы или ярлык.

RRikesh RRikesh
21 апр. 2020 г. 07:45:45

@RRikesh верно, однако, по моему мнению, ссылка на ID страницы по-прежнему является самой безопасной стратегией в долгосрочной перспективе (особенно если встроенное перенаправление WP было переопределено разработчиками), чтобы сломать как можно меньше элементов при возможном изменении слага/заголовка/имени. Это может произойти слишком легко. ;) Полагаю/надеюсь, что в большинстве случаев разработчики обычно зеркалируют всю БД, поэтому ID страниц остаются неизменными.

Viktor Borítás Viktor Borítás
28 апр. 2020 г. 13:36:18
0

Хуки, такие как init, не будут работать вообще.

Вам необходимо использовать хук как минимум на parse_query.

Всё нижеперечисленное будет работать:

is_page(198); # ID (целое число)
is_page('198'); # ID (строка)
is_page('Some Title'); # Заголовок, с учетом регистра
is_page('some-title'); # Ярлык

Но это должно быть подключено как минимум в parse_query или любом другом хуке после него. Вы можете увидеть порядок хуков WordPress здесь: https://codex.wordpress.org/Plugin_API/Action_Reference

4 авг. 2018 г. 16:36:22
0

Сначала вам нужно понять разницу между страницей и записью. После этого вы сможете выбрать, использовать ли is_page или is_single.

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

<?php if (is_page( array( 1, 529, 'или заголовок страницы'  ) ) ) : ?>
    <!-- Ничего не делать -->
<?php else : ?>
    <!-- Вставьте ваш код здесь -->
<?php endif; ?>

Но если вам нужно, чтобы код также работал с записями, добавьте эти строки:

<?php if (is_single( array( 1, 529, 'или заголовок записи'  ) ) ) : ?>
    <!-- Ничего не делать -->
<?php else : ?>
    <!-- Вставьте ваш код здесь -->
<?php endif; ?>
5 окт. 2019 г. 04:30:05
0

попробуйте использовать is_single($post)

в вашем случае is_single(346) или is_single('346') - оба варианта должны работать

подробнее здесь

16 мар. 2017 г. 13:36:49
0

Для отдельных записей используйте

if ( is_single( '1346' ) )

Для отдельных страниц используйте

if ( is_page( '1346' ) )

Где '1346' - это ID вашей записи или страницы.

is_page НЕ будет работать с отдельными записями, а is_single не будет работать с отдельными страницами.

28 янв. 2020 г. 10:56:14
1

Пожалуйста, попробуйте убрать '' (одинарные кавычки) из номера ID и это будет работать:

is_page(34)
29 авг. 2016 г. 17:38:39
Комментарии

Этот ответ требует более подробного объяснения

cjbj cjbj
29 авг. 2016 г. 17:42:52
0
-1
function test_run(){

   if (is_page( 'Заголовок страницы' ) ): //вы можете использовать is_page(целочисленный post id/slug/название)
      # Выполните ваш код
   endif;

}

add_action('parse_query', 'test_run');

дополняя ответ @Lucas Bustamante

28 янв. 2020 г. 09:11:23