İ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.