Perché is_page non funziona quando lo inserisco nel file functions.php?

29 giu 2011, 11:35:45
Visualizzazioni: 45.2K
Voti: 15

Ho una pagina chiamata "Apple", l'ID della pagina è 2533.

Nel file page.php ho la riga:

echo $bannerimg 

E questa funzione in functions.php:

if ( is_page( '2533' ) ) {    
    // testato anche con 'Apple'
    $bannerimg = 'apple.jpg';

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

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

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

Il problema è che $bannerimg mostra "home.jpg" su ogni pagina, incluse Apple, test e admissions.

Ho anche controllato tutti gli ID usando the_ID e $page->ID. Niente. Quindi immagino ci sia qualcosa che non va nel codice sopra?

1
Commenti

Una soluzione nel seguente thread mi ha aiutato a risolvere un problema simile: https://wordpress.stackexchange.com/questions/225359/is-page-template-is-page-in-functions-php-not-working/225369

Oleksa O. Oleksa O.
19 gen 2019 05:39:41
Tutte le risposte alla domanda 9
5
17

Il file functions.php viene elaborato molto prima che tu possa sapere quale pagina viene caricata. Invece di assegnare un valore a una variabile, inserisci il tuo codice in una funzione e utilizza quella funzione nel template page.php.

29 giu 2011 11:41:38
Commenti

Ho provato anche con questo codice all'interno di una funzione, ma sembra che non restituisca nulla. So che inserire tutto in page.php potrebbe aiutare, ma non è molto elegante.

Wordpressor Wordpressor
29 giu 2011 12:01:59

Non uso gli ID per riferirmi alle pagine, ma il codex mostra che l'ID della pagina non ha apici singoli, hai provato così? `is_page(); // Quando viene visualizzata qualsiasi singola Pagina.

is_page(42); // Quando viene visualizzata la Pagina 42 (ID).

is_page('Contact'); // Quando viene visualizzata la Pagina con post_title "Contact".

is_page('about-me'); // Quando viene visualizzata la Pagina con post_name (slug) 'about-me'.

is_page(array(42,'about-me','Contact')); // Restituisce true quando la Pagina visualizzata è l'ID 42.` probabilmente non è il caso, ma vale la pena provare

MartinJJ MartinJJ
29 giu 2011 12:09:55

@Martin gli apici non sono del tutto corretti, ma non romperanno nulla - il confronto è fatto in modo lasco per impostazione predefinita (senza verificare la corrispondenza dei tipi)

Rarst Rarst
29 giu 2011 13:42:20

Cosa succede se vuoi aggiungere un filtro alla query? Non puoi farlo nel template. Ma non puoi farlo nemmeno nel file functions.php!

reggie reggie
17 apr 2015 11:16:15

@reggie perché no? Probabilmente dovresti fare una nuova domanda al riguardo. :)

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

get_header dovrebbe funzionare se vuoi lasciarlo nel file functions.php

add_action('get_header', function() {
    if ( is_page( '2533' ) ) {    
    // testato anche con '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
Commenti

Perché funziona esattamente? È l'unica cosa che abbiamo trovato per far funzionare correttamente is_page() all'interno del file functions.

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

Estendendo ciò che @Rarst ha pubblicato e tu hai commentato, una soluzione più elegante sarebbe creare il tuo filtro all'interno di page.php e agganciarlo da una funzione all'interno del functions.php, ad esempio:

nel tuo page.php

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

e nel tuo 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 giu 2011 12:24:29
0

Aggiungi questo al tuo functions.php, modifica il nome dello script someCode e il nome della pagina:

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

In functions.php is_page() con add_action('wp', 'nome_tua_funzione'); funziona correttamente.

10 gen 2021 07:38:44
5

Hai correttamente dichiarato wp_head(); ecc. nel tuo tema?

Inoltre, is_page accetta un ID senza virgolette.

Il problema potrebbe anche essere il fatto che sei già sul template della pagina, quindi è una pagina, potresti fare meglio interrogando l'$post->ID o impostando page-apple.php

29 giu 2011 12:38:34
Commenti

is_page() può accettare l'ID anche come intero

Bainternet Bainternet
29 giu 2011 12:41:21

sì ma un intero non dovrebbe essere tra virgolette

Alex Older Alex Older
29 giu 2011 12:51:07

È strano, perché vedo le virgolette ovunque: http://codex.wordpress.org/Conditional_Tags

Wordpressor Wordpressor
29 giu 2011 15:45:21

ed è una cattiva pratica.

Alex Older Alex Older
29 giu 2011 18:12:42

Sono d'accordo, l'intero non dovrebbe essere quotato. Ma PHP non avrà problemi in entrambi i casi.

reggie reggie
17 apr 2015 11:24:42
0

Devi chiamare la tua funzione in un punto del processo di WordPress dopo che la Query è stata impostata.

In functions.php:

function mytheme_get_banner_img() {
    if ( is_page( '2533' ) ) {    
        // testato anche con 'Apple'
        $bannerimg = 'apple.jpg';

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

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

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

Poi, nel tuo file template page.php, ovunque tu abbia bisogno di restituire/visualizzare $bannerimg:

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

Quindi, puoi fare ciò che vuoi con $bannerimg: inserirla in un tag <img>, ecc.

29 giu 2011 16:11:48
1
if( is_page('Veicolo') ) {
    // codice qui
}

questo funzionerà sicuramente nel file page.php, per favore spostati lì e verifica.

[Nota Bene]: // sostituisci il tuo ID pagina | slug | array con Veicolo

24 ott 2021 21:16:11
Commenti

Non credo che questo aggiunga qualcosa alle risposte esistenti, e secondo me la risposta accettata lo spiega meglio.

Rup Rup
25 ott 2021 11:49:28
0

Devi agganciare la funzione wp.

Nota importante: Tieni presente che se ti agganci alla funzione init, is_page non funzionerà

add_filter('wp', 'pre_fix_function_is_page');

function pre_fix_function_is_page()
{

    if ( is_page( '2533' ) ) {
        // testato anche con '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