Perché is_page non funziona quando lo inserisco nel file functions.php?
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?

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.

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

@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)

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

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';
}
});

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

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

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

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

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.

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