İs_page neden function.php dosyasına koyduğumda çalışmıyor?


12

"Apple" adında bir sayfam var, sayfanın kimlik kimliği 2533.

Page.php dosyasında satırım var:

echo $bannerimg 

Ve function.php içindeki bu işlev:

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

Buradaki nokta, Apple, test ve kabul dahil her sayfada $ bannerimg echoes "home.jpg" 'dir.

ID_ $ & $ page-> ID kullanarak tüm kimlikleri bile kontrol ettim. Hiçbir şey değil. Yukarıdaki kodda bir sorun var sanırım?


Aşağıdaki konudaki bir çözüm benzer sorunu
— çözmeme

Yanıtlar:


16

functions.phphangi sayfanın yüklendiğini bilmeden önce işlenir. Değişkene değer atamak yerine kodunuzu işleve yerleştirin ve bu işlevi page.phpşablonda kullanın .


Ben de bir fonksiyonun içinde bu kod ile denedim, ama hiçbir şey döndürüyor gibi görünüyor. Hepsini page.php'ye koymanın yardımcı olacağını biliyorum, ama çok zarif değil.
— Wordpressor

Ben sayfa başvurusu için id kullanmıyorum ama codex sayfanın kimliğinin tek tırnak olmadığını gösterir, bunu denediniz mi? 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.muhtemelen durum böyle değil ama
— denemeye

1
@Martin teklifleri tamamen doğru değil, ancak hiçbir şeyi kırmayacak - varsayılan olarak gevşek olarak karşılaştırılıyor (tür eşleşip eşleşmediğini kontrol etmeden)
— Rarst

Sorguya filtre eklemek isterseniz ne olur? Bunu şablonda yapamazsınız. Ama bunu function.php dosyasında da yapamazsınız!
— reggie

@reggie neden olmasın? Muhtemelen bu konuda yeni bir soru sormalısınız. :)
— Nadir

6

get_header gerektiğini size bunu bırakmak istiyorsanız çalışmakfunctions.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

@Rarst'ın gönderdiği ve yorumladığınız içeriği genişletmek, page.php içinde kendi filtrenizi oluşturmak ve function.php içindeki bir işlevden ona bağlamak için daha zarif bir çözüm olabilir, örneğin:

size page.php

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

ve işlevlerinizde. 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

Bunu function.php dosyasına ekleyin, someCode komut dosyasının adını ve sayfa adını değiştirin:

   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

Sorgu kurulduktan sonra işlevinizi WordPress işleminin bir noktasında çağırmanız gerekir .

İçinde 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;
}

Ardından, page.phpşablon dosyanızda, geri dönmeniz / çıktı almanız gereken her yerde $bannerimg:

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

Ardından, ihtiyacınız olan her şeyi yapabilirsiniz $bannerimg: bir <img>etikete bırakın vb.


0

Temanızda doğru wp_head();vb. Beyan ettiniz mi?

Ayrıca, is_pagetırnak işaretleri olmadan bir kimliği kabul eder.

Sorun, zaten sayfa şablonunda olmanız da olabilir, bu yüzden bir sayfadır, sorguyu sorgulamak $post->IDveya ayarlamak daha iyi olabilirpage-apple.php


is_page()kimliği tamsayı olarak da kabul edebilir
— Bainternet

evet ama bir int alıntı olmamalıdır
— Alex Old

Bu garip, çünkü her yerde alıntılar görüyorum: codex.wordpress.org/Conditional_Tags
— Wordpressor

ve bu kötü bir uygulama.
— Alex Old

Katılıyorum, tamsayı alıntı yapılmamalıdır. Ancak PHP her iki şekilde de umursamaz.
— reggie
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.