Почему is_page не работает, когда я помещаю его в файл functions.php?

У меня есть страница под названием «Apple», идентификатор ID страницы 2533.

В файле page.php у меня есть строка:

echo $bannerimg 

И эта функция в functions.php:

 if ( is_page( '2533' ) ) { // also tested with 'Apple' $bannerimg = 'apple.jpg'; } elseif ( is_page( 'test' ) ) { $bannerimg = 'test.jpg'; } elseif ( is_page( 'admissions' ) ) { $bannerimg = 'admissions.jpg'; } else { $bannerimg = 'home.jpg'; } 

Дело в том, что $ bannerimg эхо «home.jpg» на каждой странице, включая Apple, тест и прием.

Я даже проверил все идентификаторы, используя ID_ID и $ page-> ID. Ничего. Итак, я думаю, что что-то не так с кодом выше?

Solutions Collecting From Web of "Почему is_page не работает, когда я помещаю его в файл functions.php?"

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

Расширяя то, что отправил @Rarst и вы прокомментировали, более элегантным решением было бы создать собственный фильтр внутри page.php и подключиться к нему из функции внутри функции functions.php, например:

в вас page.php

 $bannerimg = apply_filters('my_bannerimg','defualt_img.jpg'); 

и в ваших functions.php

 add_filter('my_bannerimg','what_page_is_it'); function what_page_is_it($img){ if ( is_page( '2533' ) ) { return 'apple.jpg'; } elseif ( is_page( 'test' ) ) { return 'test.jpg'; } elseif ( is_page( 'admissions' ) ) { return 'admissions.jpg'; } else { return 'home.jpg'; } } 

get_header должен работать, если вы хотите оставить его в functions.php

 add_action('get_header', function() { if ( is_page( '2533' ) ) { // also tested with 'Apple' $bannerimg = 'apple.jpg'; } elseif ( is_page( 'test' ) ) { $bannerimg = 'test.jpg'; } elseif ( is_page( 'admissions' ) ) { $bannerimg = 'admissions.jpg'; } else { $bannerimg = 'home.jpg'; } }); 

Вы должны вызвать свою функцию в точке процесса WordPress после настройки Query .

В functions.php :

 function mytheme_get_banner_img() { if ( is_page( '2533' ) ) { // also tested with 'Apple' $bannerimg = 'apple.jpg'; } elseif ( is_page( 'test' ) ) { $bannerimg = 'test.jpg'; } elseif ( is_page( 'admissions' ) ) { $bannerimg = 'admissions.jpg'; } else { $bannerimg = 'home.jpg'; } return $bannerimg; } 

Затем, в вашем page.php шаблона page.php , где вам нужно вернуть / вывести $bannerimg :

 <?php $bannerimg = mytheme_get_banner_img(); ?> 

Затем вы можете сделать все, что вам нужно, с помощью $bannerimg : $bannerimg его в <img> и т. Д.

Вы правильно объявили wp_head(); и т. д. в вашей теме?

Кроме того, is_page принимает идентификатор без кавычек.

Проблема также может быть в том, что вы уже находитесь на шаблоне страницы, так что это страница, вам может быть лучше запросить $post->ID или настроить page-apple.php

Добавьте это в свои функции. Php, измените имя скрипта someCode и имя страницы:

  add_action('wp_enqueue_scripts', 'wpt_theme_js'); function wpt_theme_js() { if ( is_page('somePage') ) { wp_enqueue_script('someCode_js', get_template_directory_uri() . '/js/someCode.js', '', '', true); } }