将is_page放到functions.php文件中时,为什么is_page无法正常工作?


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在每个页面(包括Apple,测试和录取)上都回显“ home.jpg”。

我什至使用the_ID&$ page-> ID检查了所有ID。没有。所以我想上面的代码有问题吗?


以下线程中的解决方案帮助我解决了类似的问题:wordpress.stackexchange.com/questions/225359/…–
Lefan

Answers:


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.可能并非如此,但值得一

1
@Martin的报价并非完全正确,但也不会破坏任何内容-默认情况下会对其进行
粗略

如果要向查询添加过滤器怎么办?您无法在模板中执行此操作。但是,您也不能在functions.php文件中做到这一点!
reggie 2015年

@reggie为什么不呢?您可能应该问一个新的问题。:)
拉斯特2015年

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内的函数挂接到它,例如:

在您的page.php中

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

并在您的functions.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

将此添加到您的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();在主题中正确声明了etc?

另外,is_page接受没有引号的ID。

问题可能还在于您已经在页面模板上,因此它是一个页面,您最好查询$post->ID或设置page-apple.php


is_page()可以接受ID作为整数以及
Bainternet

是的,但不应该引用int
Alex Older

这很奇怪,因为我到处都看到引号:codex.wordpress.org/Conditional_Tags
Wordpressor

这是一个坏习惯。
Alex Older

我同意,不应使用整数。但是PHP都不介意。
reggie 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.