Почему is_page не работает при размещении в файле functions.php?

29 июн. 2011 г., 11:35:45
Просмотры: 45.2K
Голосов: 15

У меня есть страница под названием "Apple" с ID 2533.

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

echo $bannerimg 

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

if ( is_page( '2533' ) ) {    
    // также тестировал с '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, test и admissions.

Я даже проверил все ID используя the_ID и $page->ID. Безрезультатно. Похоже, что-то не так с кодом выше?

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

Решение в следующей ветке помогло мне решить похожую проблему: https://wordpress.stackexchange.com/questions/225359/is-page-template-is-page-in-functions-php-not-working/225369

Oleksa O. Oleksa O.
19 янв. 2019 г. 05:39:41
Все ответы на вопрос 9
5
17

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

29 июн. 2011 г. 11:41:38
Комментарии

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

Wordpressor Wordpressor
29 июн. 2011 г. 12:01:59

Я не использую id для ссылок на страницы, но кодекс показывает, что id страницы не должен быть в кавычках, вы пробовали без них? `is_page(); // Когда отображается любая одиночная страница.

is_page(42); // Когда отображается страница с ID 42.

is_page('Contact'); // Когда отображается страница с post_title "Contact".

is_page('about-me'); // Когда отображается страница с post_name (слагом) 'about-me'.

is_page(array(42,'about-me','Contact')); // Возвращает true, когда отображаемая страница имеет ID 42.` Возможно, это не ваш случай, но стоит попробовать

MartinJJ MartinJJ
29 июн. 2011 г. 12:09:55

@Martin Кавычки не совсем корректны, но и не сломают ничего - по умолчанию используется нестрогое сравнение (без проверки совпадения типов)

Rarst Rarst
29 июн. 2011 г. 13:42:20

Что делать, если вы хотите добавить фильтр к запросу? Вы не можете сделать это в шаблоне. Но вы также не можете сделать это в файле functions.php!

reggie reggie
17 апр. 2015 г. 11:16:15

@reggie почему нет? Возможно, вам стоит задать новый вопрос об этом. :)

Rarst Rarst
17 апр. 2015 г. 11:17:49
1
10

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

add_action('get_header', function() {
    if ( is_page( '2533' ) ) {    
    // также проверено с 'Apple'
        $bannerimg = 'apple.jpg';

    } elseif ( is_page( 'test' ) ) {    
        $bannerimg = 'test.jpg';

    } elseif ( is_page( 'admissions' ) ) { 
        $bannerimg = 'admissions.jpg';

    } else { 
        $bannerimg = 'home.jpg';
    }  
});
6 мар. 2016 г. 04:17:35
Комментарии

Почему именно это работает? Это единственное, что мы нашли, чтобы успешно использовать is_page() в файле функций.

Ian Tearle Ian Tearle
23 нояб. 2022 г. 11:47:06
0

Расширяя то, что опубликовал @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';
    }  
}
29 июн. 2011 г. 12:24:29
0

Добавьте это в ваш functions.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);
        }
    }
12 мая 2017 г. 21:02:33
0

В файле functions.php использование is_page() вместе с add_action('wp', 'your_function_name'); работает корректно.

10 янв. 2021 г. 07:38:44
5

Вы правильно объявили wp_head(); и другие необходимые функции в вашей теме?

Также учтите, что is_page принимает ID без кавычек.

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

29 июн. 2011 г. 12:38:34
Комментарии

is_page() может принимать ID как целое число

Bainternet Bainternet
29 июн. 2011 г. 12:41:21

да, но целое число не должно быть в кавычках

Alex Older Alex Older
29 июн. 2011 г. 12:51:07

Это странно, потому что я везде вижу кавычки: http://codex.wordpress.org/Conditional_Tags

Wordpressor Wordpressor
29 июн. 2011 г. 15:45:21

и это плохая практика.

Alex Older Alex Older
29 июн. 2011 г. 18:12:42

Согласен, целое число не должно быть в кавычках. Но PHP не будет возражать в любом случае.

reggie reggie
17 апр. 2015 г. 11:24:42
0

Вам необходимо вызвать вашу функцию в момент процесса WordPress после настройки запроса.

В файле functions.php:

function mytheme_get_banner_img() {
    if ( is_page( '2533' ) ) {    
        // также протестировано с '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, где вам нужно вернуть/вывести $bannerimg:

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

После этого вы можете делать с $bannerimg всё, что вам нужно: поместить её в тег <img> и т.д.

29 июн. 2011 г. 16:11:48
1
if( is_page('Vehicle') ) {
    // код здесь
}

это точно сработает в файле page.php, пожалуйста, перейдите туда и проверьте.

[Примечание]: // замените ваш идентификатор страницы | ярлык | массив на Vehicle

24 окт. 2021 г. 21:16:11
Комментарии

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

Rup Rup
25 окт. 2021 г. 11:49:28
0

Вам необходимо подключить функцию wp.

Важное примечание: Обратите внимание, что если вы подключитесь к функции init, is_page не будет работать

add_filter('wp', 'pre_fix_function_is_page');

function pre_fix_function_is_page()
{

    if ( is_page( '2533' ) ) {
        // также протестировано с 'Apple'
        $bannerimg = 'apple.jpg';

    } elseif ( is_page( 'test' ) ) {
        $bannerimg = 'test.jpg';

    } elseif ( is_page( 'admissions' ) ) {
        $bannerimg = 'admissions.jpg';

    } else {
        $bannerimg = 'home.jpg';
    }
}
29 нояб. 2022 г. 17:20:24