ทำไม is_page จึงไม่ทำงานเมื่อฉันใส่มันลงในไฟล์ functions.php


11

ฉันมีหน้าชื่อ "Apple" ID ของหน้า 2533

ในไฟล์ page.php ฉันมีบรรทัด:

echo $bannerimg 

และฟังก์ชั่นนี้ใน 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';
}  

ประเด็นคือ $ bannerimg echoes "home.jpg" ในทุกหน้ารวมถึง Apple การทดสอบและการสมัคร

ฉันได้ตรวจสอบ ID ทั้งหมดโดยใช้ the_ID & $ page-> ID ไม่มีอะไร ดังนั้นฉันเดาว่ามีบางอย่างผิดปกติกับรหัสข้างต้นหรือไม่


การแก้ปัญหาในหัวข้อต่อไปนี้ช่วยฉันแก้ปัญหาที่คล้ายกัน: wordpress.stackexchange.com/questions/225359/…
Lefan

คำตอบ:


16

functions.phpมีการประมวลผลวิธีก่อนที่คุณจะสามารถทราบได้ว่าหน้าใดที่กำลังโหลด แทนที่จะกำหนดค่าให้กับตัวแปรให้ใส่โค้ดของคุณลงในฟังก์ชั่นและใช้ฟังก์ชันนั้นในpage.phpเทมเพลต


ฉันได้ลองใช้โค้ดนี้ในฟังก์ชั่นด้วย แต่ดูเหมือนว่ามันจะไม่ส่งคืนอะไรเลย ฉันรู้ว่าการใส่ทุกอย่างไว้ใน page.php น่าจะช่วยได้
Wordpressor

ฉันไม่ได้ใช้ id เพื่อการอ้างอิงหน้าเว็บ แต่ codex แสดงว่า id ของหน้าไม่มีราคาเดียวคุณเคยลองไหม 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.อาจไม่ใช่กรณี แต่ควรค่าแก่การยิง
MartinJJ

1
@ Martin คำพูดที่ไม่ถูกต้องทั้งหมด แต่จะไม่ผิดอะไรอย่างใดอย่างหนึ่ง - มันเป็นอย่างหลวม ๆ เมื่อเทียบเป็นค่าเริ่มต้น (โดยไม่ต้องตรวจสอบว่าตรงกับประเภท)
Rarst

ถ้าคุณต้องการเพิ่มตัวกรองในแบบสอบถาม คุณไม่สามารถทำได้ในเทมเพลต แต่คุณไม่สามารถทำได้ในไฟล์ functions.php เช่นกัน!
เรกกี

@reggie ทำไมไม่ คุณควรถามคำถามใหม่เกี่ยวกับมัน :)
Rarst

5

get_header ควรทำงานถ้าคุณต้องการที่จะทิ้งมันไว้functions.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 โพสต์และคุณแสดงความคิดเห็นทางออกที่ดีกว่าคือการสร้างตัวกรองของคุณเองภายใน page.php และขอไปที่มันจากฟังก์ชั่นภายใน functions.php เช่น:

ในหน้าคุณ

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

และในฟังก์ชั่นของคุณ

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

เพิ่มสิ่งนี้ไปยัง functions.php ของคุณเปลี่ยนชื่อสคริปต์ someCode และชื่อหน้า:

   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

คุณจำเป็นต้องเรียกใช้ฟังก์ชันของคุณที่จุดในกระบวนการ WordPress ที่หลังจากการแบบสอบถามมีการตั้งค่า

ใน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;
}

จากนั้นในpage.phpไฟล์เทมเพลตของคุณไม่ว่าคุณต้องการส่งคืน / ส่งออกที่ไหน$bannerimg:

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

จากนั้นคุณสามารถทำสิ่งที่คุณจำเป็นต้องมี$bannerimg: วางไว้ใน<img>แท็ก ฯลฯ


0

คุณประกาศwp_head();ฯลฯอย่างถูกต้องในชุดรูปแบบของคุณ?

นอกจากนี้is_pageยอมรับ ID ไม่ทราบราคา

ปัญหาอาจเกิดจากข้อเท็จจริงที่ว่าคุณอยู่ในเทมเพลตหน้าดังนั้นมันจึงเป็นหน้าคุณอาจจะดีกว่าในการสืบค้น$post->IDหรือตั้งค่าpage-apple.php


is_page()สามารถรับรหัสเป็นจำนวนเต็มเช่นกัน
Bainternet

ใช่ แต่ไม่ควรพูดถึงความตั้งใจ
อเล็กซ์แก่กว่า

แปลกเพราะฉันเห็นคำพูดทุกที่: codex.wordpress.org/Conditional_Tags
Wordpressor

และมันก็เป็นการฝึกฝนที่ไม่ดี
อเล็กซ์แก่กว่า

ฉันเห็นด้วยไม่ควรเสนอจำนวนเต็ม แต่ PHP จะไม่รังเกียจวิธีใด
reggie
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.