De ce nu funcționează is_page când îl pun în fișierul functions.php?

29 iun. 2011, 11:35:45
Vizualizări: 45.2K
Voturi: 15

Am o pagină numită "Apple", cu ID-ul 2533.

În fișierul page.php am linia:

echo $bannerimg 

Și această funcție în functions.php:

if ( is_page( '2533' ) ) {    
    // testat și cu 'Apple'
    $bannerimg = 'apple.jpg';

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

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

} else { 
    $bannerimg = 'home.jpg';
}  

Problema este că $bannerimg afișează "home.jpg" pe fiecare pagină, inclusiv pe paginile Apple, test și admissions.

Am verificat chiar și toate ID-urile folosind the_ID și $page->ID. Nimic. Deci presupun că este ceva în neregulă cu codul de mai sus?

1
Comentarii

O soluție din discuția următoare m-a ajutat să rezolv o problemă similară: https://wordpress.stackexchange.com/questions/225359/is-page-template-is-page-in-functions-php-not-working/225369

Oleksa O. Oleksa O.
19 ian. 2019 05:39:41
Toate răspunsurile la întrebare 9
5
17

functions.php este procesat mult înainte de a putea ști ce pagină se încarcă. În loc să atribuiți valoare unei variabile, puneți codul într-o funcție și folosiți acea funcție în șablonul page.php.

29 iun. 2011 11:41:38
Comentarii

Am încercat și cu acest cod în interiorul unei funcții, dar se pare că nu returnează nimic. Știu că dacă aș pune totul în page.php ar ajuta, dar nu este foarte elegant.

Wordpressor Wordpressor
29 iun. 2011 12:01:59

Eu nu folosesc ID-uri pentru referințe de pagini, dar codex-ul arată că ID-ul paginii nu are ghilimele simple, ai încercat așa? `is_page(); // Când este afișată orice pagină singulară.

is_page(42); // Când este afișată pagina cu ID-ul 42.

is_page('Contact'); // Când este afișată pagina cu titlul (post_title) "Contact".

is_page('about-me'); // Când este afișată pagina cu slug-ul (post_name) 'about-me'.

is_page(array(42,'about-me','Contact')); // Returnează true când pagina afișată este fie cu ID-ul 42.` probabil nu este cazul, dar merită încercat

MartinJJ MartinJJ
29 iun. 2011 12:09:55

@Martin ghilimelele nu sunt în întregime corecte, dar nici nu vor strica nimic - este comparat lax în mod implicit (fără a verifica dacă tipurile se potrivesc)

Rarst Rarst
29 iun. 2011 13:42:20

Ce se întâmplă dacă doriți să adăugați un filtru la interogare? Nu puteți face asta în șablon. Dar nici în fișierul functions.php nu puteți face asta!

reggie reggie
17 apr. 2015 11:16:15

@reggie de ce nu? Probabil ar trebui să pui o nouă întrebare despre asta. :)

Rarst Rarst
17 apr. 2015 11:17:49
1
10

get_header ar trebui să funcționeze dacă doriți să-l lăsați în functions.php

add_action('get_header', function() {
    if ( is_page( '2533' ) ) {    
    // testat și cu 'Apple'
        $bannerimg = 'apple.jpg';

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

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

    } else { 
        $bannerimg = 'home.jpg';
    }  
});
6 mar. 2016 04:17:35
Comentarii

De ce funcționează exact acest lucru? Este singurul lucru pe care l-am găsit pentru a face is_page() să funcționeze cu succes în fișierul functions.

Ian Tearle Ian Tearle
23 nov. 2022 11:47:06
0

Extindând ceea ce a postat @Rarst și ai comentat tu, o soluție mai elegantă ar fi să creezi propriul tău filtru în interiorul page.php și să-l conectezi dintr-o funcție din functions.php, de exemplu:

în page.php

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

și în 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 iun. 2011 12:24:29
0

Adaugă acest cod în functions.php, schimbă numele scriptului someCode și numele paginii:

   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 mai 2017 21:02:33
0

În functions.php is_page() cu add_action('wp', 'numele_functiei_tale'); funcționează corect.

10 ian. 2021 07:38:44
5

Ai declarat corect wp_head(); etc în tema ta?

De asemenea, is_page acceptă un ID fără ghilimele.

Problema ar putea fi și faptul că ești deja pe template-ul paginii, deci este o pagină, poate ar fi mai bine să interoghezi $post->ID sau să configurezi page-apple.php

29 iun. 2011 12:38:34
Comentarii

is_page() poate accepta ID-ul ca întreg de asemenea

Bainternet Bainternet
29 iun. 2011 12:41:21

da, dar un întreg nu ar trebui să fie între ghilimele

Alex Older Alex Older
29 iun. 2011 12:51:07

Este ciudat, pentru că văd ghilimele peste tot: http://codex.wordpress.org/Conditional_Tags

Wordpressor Wordpressor
29 iun. 2011 15:45:21

și este o practică proastă.

Alex Older Alex Older
29 iun. 2011 18:12:42

Sunt de acord, întregul nu ar trebui să fie între ghilimele. Dar PHP nu va avea nicio problemă în ambele cazuri.

reggie reggie
17 apr. 2015 11:24:42
0

Trebuie să apelezi funcția ta într-un punct al procesului WordPress după ce interogarea este configurată.

În functions.php:

function mytheme_get_banner_img() {
    if ( is_page( '2533' ) ) {    
        // testat și cu 'Apple'
        $bannerimg = 'apple.jpg';

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

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

    } else { 
        $bannerimg = 'home.jpg';
    }  
    return $bannerimg;
}

Apoi, în fișierul șablon page.php, oriunde ai nevoie să returnezi/afișezi $bannerimg:

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

Apoi, poți face orice ai nevoie cu $bannerimg: să o plasezi într-un tag <img>, etc.

29 iun. 2011 16:11:48
1
if( is_page('Vehicul') ) {
    // codul aici
}

acest cod va funcționa cu siguranță în fișierul page.php, te rog să te muți acolo și să verifici.

[Notă importantă]: // înlocuiește ID-ul paginii | slug-ul | array-ul cu Vehicul

24 oct. 2021 21:16:11
Comentarii

Nu cred că acest lucru aduce ceva nou față de răspunsurile existente, iar după părerea mea, răspunsul acceptat explică mai bine.

Rup Rup
25 oct. 2021 11:49:28
0

Trebuie să conectezi funcția wp.

Notă importantă: Atenție, dacă te conectezi la funcția init, is_page nu va funcționa

add_filter('wp', 'pre_fix_function_is_page');

function pre_fix_function_is_page()
{

    if ( is_page( '2533' ) ) {
        // de asemenea testat cu 'Apple'
        $bannerimg = 'apple.jpg';

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

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

    } else {
        $bannerimg = 'home.jpg';
    }
}
29 nov. 2022 17:20:24