Mengapa is_page tidak berfungsi saat saya meletakkannya di file functions.php?


11

Saya memiliki halaman bernama "Apple", ID halaman id 2533.

Dalam file page.php saya memiliki baris:

echo $bannerimg 

Dan fungsi ini di functions.php:

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

Intinya adalah $ bannerimg gema "home.jpg" pada setiap halaman, termasuk Apple, tes, dan penerimaan.

Saya bahkan sudah memeriksa semua ID menggunakan ID & $ page-> ID__. Tidak ada. Jadi saya kira ada yang salah dengan kode di atas?


Sebuah solusi dalam utas berikut membantu saya memecahkan masalah yang serupa: wordpress.stackexchange.com/questions/225359/…
Lefan

Jawaban:


16

functions.phpdiproses sebelum Anda dapat mengetahui halaman mana yang sedang dimuat. Alih-alih memberikan nilai ke variabel, masukkan kode Anda ke dalam fungsi dan gunakan fungsi itu di page.phptemplat.


Saya sudah mencoba dengan kode ini di dalam fungsi juga, tetapi sepertinya tidak mengembalikan apa pun. Saya tahu memasukkan semuanya ke page.php seharusnya membantu, tetapi tidak begitu elegan.
Wordpressor

Saya tidak menggunakan id untuk referensi halaman tetapi codex menunjukkan bahwa id halaman tidak memiliki tanda kutip tunggal, sudahkah Anda mencobanya? 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.mungkin tidak demikian halnya tetapi patut dicoba
MartinJJ

1
Kutipan @Martin tidak sepenuhnya benar, tetapi tidak akan merusak apa pun juga - itu secara longgar dibandingkan secara default (tanpa memeriksa apakah jenisnya cocok)
Rarst

Bagaimana jika Anda ingin menambahkan filter ke kueri? Anda tidak dapat melakukannya di templat. Tetapi Anda tidak dapat melakukannya di file functions.php!
Reggie

@reggie kenapa tidak? Anda mungkin harus mengajukan pertanyaan baru tentang hal itu. :)
Rarst

5

get_header harus berfungsi jika Anda ingin meninggalkannyafunctions.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

Memperluas apa yang diposting oleh @Rarst dan Anda berkomentar, solusi yang lebih elegan adalah membuat filter Anda sendiri di dalam page.php dan kaitkan dengan itu dari fungsi di dalam functions.php, misalnya:

di halaman Anda.php

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

dan di functions.php Anda

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

Tambahkan ini ke functions.php Anda, ubah nama skrip someCode dan nama halaman:

   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

Anda perlu memanggil fungsi Anda pada suatu titik dalam proses WordPress setelah Kueri diatur .

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

Kemudian, dalam page.phpfile template Anda , di mana pun Anda perlu mengembalikan / output $bannerimg:

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

Kemudian, Anda dapat melakukan apa pun yang Anda butuhkan dengan $bannerimg: letakkan di <img>tag, dll.


0

Sudahkah Anda menyatakan dengan benar wp_head();dll dalam tema Anda?

Juga, is_pagemenerima ID tanpa tanda kutip.

Masalahnya mungkin juga fakta bahwa Anda sudah berada di templat halaman sehingga merupakan halaman, Anda mungkin lebih baik menanyakan $post->IDatau mengaturpage-apple.php


is_page()dapat menerima ID sebagai integer juga
Bainternet

ya tapi int tidak boleh dikutip
Alex Older

Itu aneh, karena saya melihat tanda kutip di mana-mana: codex.wordpress.org/Conditional_Tags
Wordpressor

dan itu praktik yang buruk.
Alex Lebih Tua

Saya setuju, bilangan bulat tidak boleh dikutip. Tapi PHP tidak akan keberatan.
Reggie
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.