Чому is_page не працює, коли я поміщаю його у файл function.php?


11

У мене сторінка під назвою "Apple", ідентифікатор сторінки 2533.

У файлі page.php у мене є рядок:

echo $bannerimg 

І ця функція у function.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. Нічого. Тож я думаю, що з кодом вище щось не так?


Рішення в наступній темі допомогло мені вирішити подібне питання: wordpress.stackexchange.com/questions/225359/…
Лефан

Відповіді:


16

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


Я також намагався з цим кодом всередині функції, але здається, що він нічого не повертає. Я знаю, що все це в 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.Мабуть, не так, але варто постріляти
MartinJJ

1
@Martin цитати не зовсім коректні, але нічого не порушить - це порівняно за замовчуванням (без перевірки відповідності типу)
Rarst

Що робити, якщо ви хочете додати фільтр до запиту? Ви не можете цього зробити в шаблоні. Але ви також не можете цього зробити у файлі function.php!
реггі

@reggie чому б і ні? Вам, мабуть, слід задати нове запитання щодо цього. :)
Рарст

6

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 і підключити його до функції, яка знаходиться всередині funk.php, наприклад:

у вас page.php

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

і у своїх функціях.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';
    }  
}

1

Додайте це до своїх функцій.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 після налаштування Запиту .

В 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()можна також прийняти ідентифікатор як ціле число
Bainternet

так, але інт не слід цитувати
Алекс Старший

Це дивно, бо я бачу цитати скрізь: codex.wordpress.org/Conditional_Tags
Wordpressor

і це погана практика.
Олексій Старший

Я згоден, ціле число не слід цитувати. Але PHP не буде проти цього.
реггі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.