Tại sao is_page không hoạt động khi tôi đặt nó vào tệp tin.php.


11

Tôi có trang gọi là "Apple", ID id của trang 2533.

Trong tệp page.php tôi có dòng:

echo $bannerimg 

Và chức năng này trong hàm.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';
}  

Điểm đáng chú ý là $ bannerimg lặp lại "home.jpg" trên mỗi trang, bao gồm cả Apple, kiểm tra và tuyển sinh.

Tôi thậm chí đã kiểm tra tất cả các ID bằng cách sử dụng_ID & $ page-> ID. Không có gì. Vì vậy, tôi đoán có điều gì đó sai với mã ở trên?


Một giải pháp trong chủ đề sau đã giúp tôi giải quyết vấn đề tương tự: wordpress.stackexchange.com/questions/225359/
mẹo

Câu trả lời:


16

functions.phpđược xử lý trước khi bạn có thể biết trang nào đang được tải. Thay vì gán giá trị cho biến, hãy đặt mã của bạn vào hàm và sử dụng hàm đó trong page.phpmẫu.


Tôi cũng đã thử với mã này bên trong một hàm, nhưng có vẻ như nó không trả về gì cả. Tôi biết đặt tất cả vào page.php sẽ giúp ích, nhưng nó không thanh lịch.
Wordpressor

Tôi không sử dụng id để tham khảo trang nhưng codex cho thấy id của trang không có dấu ngoặc đơn, bạn đã thử chưa? 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.có lẽ không phải như vậy nhưng đáng để bắn
MartinJJ

1
Các trích dẫn @Martin không hoàn toàn chính xác, nhưng cũng sẽ không phá vỡ bất cứ điều gì - nó được so sánh một cách lỏng lẻo (không kiểm tra xem có khớp với loại nào không)
Rarst

Nếu bạn muốn thêm bộ lọc vào truy vấn thì sao? Bạn không thể làm điều đó trong mẫu. Nhưng bạn cũng không thể làm điều đó trong tệp tin.php.
reggie

@reggie tại sao không? Bạn có lẽ nên đặt câu hỏi mới về nó. :)
Rarst

5

get_header nên làm việc nếu bạn muốn để nó trongfunctions.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

Mở rộng những gì @Rarst đã đăng và bạn nhận xét, một giải pháp thanh lịch hơn sẽ là tạo bộ lọc của riêng bạn bên trong page.php và nối với nó từ một chức năng bên trong hàm.php, ví dụ:

trong trang của bạn.php

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

và trong hàm của bạn.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

Thêm phần này vào hàm.php của bạn, thay đổi tên của tập lệnh someCode và tên của trang:

   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

Bạn cần gọi chức năng của mình tại một điểm trong quy trình WordPress sau khi Truy vấn được thiết lập .

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

Sau đó, trong page.phptệp mẫu của bạn , bất cứ nơi nào bạn cần trả về / đầu ra $bannerimg:

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

Sau đó, bạn có thể làm bất cứ điều gì bạn cần với $bannerimg: thả nó vào một <img>thẻ, v.v.


0

Bạn đã tuyên bố chính xác wp_head();vv trong chủ đề của bạn?

Ngoài ra, is_pagechấp nhận một ID mà không có dấu ngoặc kép.

Vấn đề cũng có thể là do bạn đã ở trên mẫu trang nên đó là một trang, bạn có thể truy vấn $post->IDhoặc thiết lập tốt hơnpage-apple.php


is_page()cũng có thể chấp nhận ID dưới dạng số nguyên
Bai Internet

vâng nhưng một int không nên được trích dẫn
Alex Cũ hơn

Điều đó thật lạ, bởi vì tôi thấy các trích dẫn ở khắp mọi nơi: codex.wordpress.org/Conditable_Tags
Wordpressor

và đó là một thực tế xấu.
Alex Cũ hơn

Tôi đồng ý, số nguyên không nên được trích dẫn. Nhưng PHP cũng không bận tâm.
reggie
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.