Dlaczego nie działa strona, kiedy umieszczam ją w pliku functions.php?


11

Mam stronę o nazwie „Apple”, której identyfikator to strona 2533.

W pliku page.php mam wiersz:

echo $bannerimg 

I ta funkcja w 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';
}  

Chodzi o to, że $ bannerimg echo „home.jpg” na każdej stronie, w tym Apple, test i wstępy.

Sprawdziłem nawet wszystkie identyfikatory za pomocą identyfikatora_ID i $ page-> ID. Nic. Więc chyba coś jest nie tak z powyższym kodem?


Rozwiązanie w następującym wątku pomogło mi rozwiązać podobny problem: wordpress.stackexchange.com/questions/225359/…
Lefan 19.01.19

Odpowiedzi:


16

functions.phpjest przetwarzany na długo, zanim dowiesz się, która strona jest ładowana. Zamiast przypisywać wartość zmiennej, wstaw kod do funkcji i użyj tej funkcji w page.phpszablonie.


Próbowałem również z tym kodem wewnątrz funkcji, ale wygląda na to, że nic nie zwraca. Wiem, że umieszczenie tego wszystkiego w page.php powinno pomóc, ale nie jest tak eleganckie.
Wordpressor,

Nie używam identyfikatorów do odwoływania się do strony, ale kodeks pokazuje, że identyfikator strony nie zawiera pojedynczych cudzysłowów, próbowałeś tego? 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.prawdopodobnie nie jest to przypadek, ale warto
spróbować

1
Cytaty @Martin nie są do końca poprawne, ale też niczego nie psują - jest domyślnie luźno porównywane (bez sprawdzania, czy typ pasuje)
Rarst

Co jeśli chcesz dodać filtr do zapytania? Nie możesz tego zrobić w szablonie. Ale nie można tego zrobić również w pliku functions.php!
reggie

@reggie dlaczego nie? Prawdopodobnie powinieneś zadać o to nowe pytanie. :)
Rarst

5

get_header powinien działać, jeśli chcesz go zostawić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

Rozszerzając to, co @Rarst opublikował i skomentowałeś, bardziej eleganckim rozwiązaniem byłoby utworzenie własnego filtra wewnątrz page.php i połączenie go z funkcją wewnątrz funkcji.php, na przykład:

w tobie page.php

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

i w twoich funkcjach. 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

Dodaj to do swojego functions.php, zmień nazwę skryptu someCode i nazwę strony:

   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

Musisz wywołać swoją funkcję w punkcie procesu WordPress po skonfigurowaniu zapytania .

W 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;
}

Następnie w page.phppliku szablonu, gdziekolwiek chcesz zwrócić / wydrukować $bannerimg:

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

Następnie możesz zrobić, co chcesz $bannerimg: upuścić w <img>tagu itp.


0

Czy poprawnie zadeklarowałeś wp_head();itp. W swoim motywie?

Również is_pageakceptuje identyfikator bez cudzysłowów.

Problemem może być również fakt, że jesteś już w szablonie strony, więc jest to strona, lepiej wypytaj $post->IDlub skonfigurujpage-apple.php


is_page()może również zaakceptować identyfikator jako liczbę całkowitą
Bainternet

tak, ale int nie powinien być cytowany
Alex Older

To dziwne, ponieważ wszędzie widzę cytaty: codex.wordpress.org/Conditional_Tags
Wordpressor,

i to zła praktyka.
Alex Older

Zgadzam się, liczba całkowita nie powinna być cytowana. Ale PHP nie będzie miało nic przeciwko.
reggie
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.