De ce nu funcționează is_page când îl pun în fișierul functions.php?
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?

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.

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

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

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!

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

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

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

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

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

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.

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