functions.phpファイルに配置するとis_pageが機能しないのはなぜですか?


11

「Apple」というページがあり、そのページのID 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"をエコーすることです。

_IDと$ page-> IDを使用してすべての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内の関数からそれにフックすることです。次に例を示します。

あなたの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();テーマなどで正しく宣言しましたか?

また、is_page引用符なしのIDを受け入れます。

問題は、あなたがすでにページテンプレートにいるためにページであるという事実である可能性があります。クエリを実行する$post->IDか、page-apple.php


is_page()IDを整数として受け入れることもできます
Bainternet

そうですが、intは引用されるべきではありません
Alex Older

どこにでも引用があるので、それは奇妙です。codex.wordpress.org
Wordpressor

そしてそれは悪い習慣です。
Alex Older

私は同意します、整数は引用されるべきではありません。しかし、PHPはどちらの方法でもかまいません。
レジー2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.