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 -->
} ?>`
jarrodwhitley
Да, вы можете вызвать свою функцию в <!-- do your stuff here -->
Waqas Shakeel
Всегда ли доступна глобальная переменная $post? Будет ли она всегда объектом с ID? А как насчет страниц архива?
Firsh - justifiedgrid.com
@Firsh-justifiedgrid.com да, переменная всегда доступна, независимо от того, является ли это страницей, записью, вложением или любым пользовательским типом записи.
Waqas Shakeel
Более простым решением будет передать title или slug в качестве аргумента в is_page(). У вас не возникнет проблем, если вы продублируете эту страницу на другом сервере.
<?php
if (is_page( 'Page Title' ) ):
# Выполняйте ваши действия
endif;
?>
Если администратор решит изменить ярлык записи в будущем, нарушит ли это условие?
Viktor Borítás
@ViktorBorítás Да, нарушит. Если вы обычно используете функции импорта/экспорта WordPress во время разработки, нет гарантии, что на всех ваших серверах будет один и тот же ID страницы. Если вы каждый раз разворачиваете всю базу данных, тогда вы получите тот же ID страницы. В противном случае можно использовать заголовок страницы или ярлык.
RRikesh
@RRikesh верно, однако, по моему мнению, ссылка на ID страницы по-прежнему является самой безопасной стратегией в долгосрочной перспективе (особенно если встроенное перенаправление WP было переопределено разработчиками), чтобы сломать как можно меньше элементов при возможном изменении слага/заголовка/имени. Это может произойти слишком легко. ;) Полагаю/надеюсь, что в большинстве случаев разработчики обычно зеркалируют всю БД, поэтому ID страниц остаются неизменными.
Viktor Borítás
Хуки, такие как 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') - оба варианта должны работать