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

11

У меня есть страница под названием «Apple», идентификатор страницы 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, тесты и допуски.

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

Wordpressor
источник
Решение в следующей ветке помогло мне решить аналогичную проблему: wordpress.stackexchange.com/questions/225359/…
Лефан

Ответы:

16

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

Rarst
источник
Я также пытался использовать этот код внутри функции, но, похоже, он ничего не возвращает. Я знаю, что поместить все это в page.php должно помочь, но это не так элегантно.
Wordpressor
Я не использую идентификаторы для ссылки на страницу, но кодекс показывает, что идентификатор страницы не имеет одинарных кавычек, вы пробовали это? is_page(); // When any single Page is being displayed. is_page(42); // When Page 42 (ID) is being displayed. is_page('Contact'); // When the Page with a post_title of "Contact" is being displayed. is_page('about-me'); // When the Page with a post_name (slug) of "about-me" is being displayed. is_page(array(42,'about-me','Contact')); // Returns true when the Pages displayed is either post ID 42.вероятно, не тот случай, но стоит
попробовать
1
Кавычки @Martin не совсем корректны, но они тоже ничего не нарушат - по умолчанию они свободно сравниваются (без проверки соответствия типов)
Первый
Что если вы хотите добавить фильтр к запросу? Вы не можете сделать это в шаблоне. Но вы не можете сделать это в файле functions.php!
Реджи
@reggie, почему бы и нет? Возможно, вам следует задать новый вопрос об этом. :)
Первый день
5

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';
    }  
});
Брайан Уиллис
источник
4

Расширяя то, что написал @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';
    }  
}
Bainternet
источник
1

Добавьте это в ваш 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);
        }
    }
Василий Гутник
источник
0

Вам нужно вызывать свою функцию в точке процесса 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файле шаблона, куда вам нужно вернуть / вывести $bannerimg:

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

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

Чип Беннетт
источник
0

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

Также is_pageпринимает идентификатор без кавычек.

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

Алекс Олд
источник
is_page()также может принимать ID как целое число
Bainternet
да, но int не следует цитировать
Алекс
Это странно, потому что я вижу цитаты везде: codex.wordpress.org/Conditional_Tags
Wordpressor
и это плохая практика.
Алекс старше
Я согласен, целое число не должно быть в кавычках. Но PHP не будет возражать в любом случае.
Реджи