if (is_page(**PAGE ID**)) не работает
Я следую этому руководству по добавлению кода 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; ?>
Это тоже не сработало.
Можете подсказать, почему этот код не работает? Спасибо.

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

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

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

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

Более простым решением будет передать title
или slug
в качестве аргумента в is_page()
. У вас не возникнет проблем, если вы продублируете эту страницу на другом сервере.
<?php
if (is_page( 'Page Title' ) ):
# Выполняйте ваши действия
endif;
?>

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

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

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

Хуки, такие как 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

Сначала вам нужно понять разницу между страницей и записью. После этого вы сможете выбрать, использовать ли 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; ?>

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

