web-dev-qa-db-ja.com

is_home、およびis_front_page条件付き問題

このスニペットは "portfolio-loop.php"ファイルにあります。私はget_template_partを使ってフロントページと他のページにループを表示します。

ループ内にこれがあります。

<?php if( !is_home() || !is_front_page() ) { ?>
  <p><?php the_time('F Y'); ?></p>
<?php endif } ?>

フロントページを除外するようには思われません。それはそれ自身のテンプレートの中にあるからでしょうか?

編集

わかりました私はs_ha_dumとTom Nowellのおかげで私の意味上の誤りのいくつかを直しました。私は以下のバリエーションを試しました:

<?php if ( !is_home() && !is_front_page() ) { ?> 
    <!--nada -->
<?php } else { ?>
    <p><?php the_time('F j, Y'); ?></p>
<?php } ?>



//dropping is_home() and trying to keep it as simple as possible
<?php if(!is_front_page()) { ?>
    <p><?php the_time('F j, Y'); ?></p>
<?php } ?>

私はまだフロントページの時間を隠すことはできません。せいぜい '<--nada-->'が私のホームページ(home.php)と私のアーカイブ(category-blog.php)の両方に現れます。カスタムカテゴリページはフロントページとしても表示されますか。

編集2

私が平易な英語でやろうとしていること:

私はget_template_partを介して私の最新のブログ記事のうちの3つを表示している私のフロントページ(static、home.php)にループがあります。同じループが私のcategory-blog.php /アーカイブリストにも使われていますが、最後の10の投稿を示しています。このループが表示されている他のページでのみ、レイアウトをきれいにするためにフロントページに日付/時刻を表示したくありません。

3
Alan

私が自分自身を混乱させることができるかどうか見てみましょう。

2つのOR条件の いずれか trueの場合、コードが実行されます。

is_home およびis_front_pageは、ページごとにtrueを返すことがありますが、この場合は無効になります。静的なfromページがある場合は、is_homeがブログのインデックスページになります。

注:WordPress 2.1はこの機能を以前のバージョンとは異なる方法で処理します - 静的フロントページをご覧ください。フロントページとして静的ページを選択した場合(is_front_page()を参照)、このタグはあなたの "投稿ページ"に適用されます。

http://codex.wordpress.org/Function_Reference/is_home

つまり、is_homeはブログインデックス以外のすべてのページでfalseになります。つまり、!is_home条件は、ブログインデックスページとコードがほぼ常に実行されることを除いて、すべてのページでtrueとなります。

is_front_pageのドキュメント.

メインのブログページが表示されていて、設定 - >閲覧 - >フロントページの表示が "あなたの最新の投稿"に設定されている場合、または "静的ページ"に設定されている場合現在表示されているページ.

http://codex.wordpress.org/Function_Reference/is_front_page

設定に応じて2つの可能性があります。ブログのインデックスページにtrueが返されるか、静的ページにtrueが返されることがあります。静的なフロントページがあると思うので、is_front_pageはそのページのtrueを返し、!is_front_page条件はfalseになります。 !is_homeは(おそらくあなたをフォローしているのなら)trueなので、コードは実行されます。

both ブログの索引と静的フロントページから<p><?php the_time('F Y'); ?></p>を除外したい場合は、ORステートメント全体を否定します。

if( !(is_home() || is_front_page()) )

どちらかがtrueであれば、全体はfalseです。

フロントページからのみ除外したい場合は、!is_home部分はまったく必要ないはずです。

&&の代わりに||を使用する場合、コードを実行するにはis_homeis_front_pageの両方がfalseである必要があります。つまり、あなたはブログのインデックスに載っているわけではなく、同時に表に載っていないということです。

8
s_ha_dum

主な問題に取り組む前に、明白な構文エラーを指摘しなければなりません。

<?php if( !is_home() || !is_front_page() ) { ?>
  <p><?php the_time('F Y'); ?></p>
<?php endif } ?>

なぜendifがあるのですか?それは全く意味をなさない、そしてプログラミングのすべてに目的/理由があります。あなたはそれをmarigolds-potatoe-farmに変更するかもしれません、それは同じ効果、致命的なエラーのそれを持つでしょう。だからそれを取り除きます。

これが基本的なif文です。

if ( this statement is true ) {
    do this
} else {
    do that
}

If():endifの省略形があります。など、それらを使用しないでください、彼らはこの段階で彼らが価値があるよりももっと面倒です。

これらすべてがあなたの編集者によって捕らえられ、強調されているはずです。そうでなかったら、無能な編集プログラムを使用している。中括弧の自動補完、PHPリンティング/構文チェック、カラーコーディング、および自動補完を備えたエディタを入手してください。

例には以下が含まれますが、これらに限定されません。

  • NetBeans
  • PHPStorm
  • SublimeText
  • コモド編集/ IDE
  • エクリプス

物事を自分自身のために難しくしないでください

あなたの論理問題に移る

if( !is_home() || !is_front_page() ) {

これは英語の散文ですか。

ホームページでない場合はこれを行い、フロントページでない場合はこれも行う

それがホームページなら、それはそれをするでしょう。フロントページであれば、それをします。

あなたが意味していると私は信じています:

ホームページでもフロントページでもない場合は、それを実行してください。

それは:

if ( !( is_home() || is_front_page() ) ) {

あるいは、次のように書くこともできます。

if ( !is_home() && !is_front_page() ) {

またはさらにもっと:

if ( !is_home() ) {
    if ( !is_front_page() ) {

要約すると

  • これは基本的なロジックです
  • あなたはPHP基本的な論理を知るためのスキルを必要としない、人々は古代ギリシャで真偽値のtrue/false論理を考え出しました、何人かの子供たちは学校でそれをします
  • フルストップの適切な使用方法を理解すると、カンマを1ワード以上移動すると意味が変わることがわかります。 &&または||同じことができます。それはすべて意味論に関するものです。
  • まともなエディタを入手してください、それはあなたに 巨大な 時間と労力の量を節約します
  • あなたはきれいに動いてチェックしている、それはただ間違ったことをチェックしていた
5
Tom J Nowell

目標がそのような場合

このループが表示されている他のページでのみ、レイアウトをきれいにするためにフロントページに日付/時刻を表示したくありません。

それからあなたは簡単な条件を使うことができるはずです:

<?php if ( ! is_front_page() ) { ?>
    <p><?php the_time('F Y'); ?></p>
<?php } ?>

何を達成しようとしているのかを正確に知らずに、必要な条件文を正確に提供することは実際には不可能です。そうは言っても、 is_home()is_front_page() のどちらかまたは両方がtrueまたはfalseになる条件は次のとおりです。

一般に

  • Blog Posts Indexが表示されている場合、is_home()はtrueです(サイトのフロントページでも、指定された静的ページでも)。
  • Site Front Pageが表示されている場合、is_front_page()はtrueです。サイトのフロントページにBlog Posts Indexが表示されているか、指定された静的ページが表示されているかに関係ありません。

フロントページの表示:ブログの投稿

Site Front Pageブログ投稿インデックスを表示するように設定されている場合:

  • 'posts' == get_option( 'show_on_front' )
  • ブログ投稿インデックスの最初のページが表示されている場合、Bothis_home()is_front_page()trueです。
  • Site Front Pageでは、is_home()is_front_page()の両方がtrueです
  • ブログ投稿インデックスの後続のページ(つまりページ区切り付きの表示)では、is_home()trueis_front_page()falseです。
  • 他のページでは、両方ともfalseです。

フロントページの表示:静的ページ

Site Front PageStatic Pageを表示するように設定されている場合:

  • 'page' == get_option( 'show_on_front' )
  • Site Front Page(つまり、Page ID = is_home())では、is_front_page()falseget_option( 'page_on_front' )trueです。
  • ブログ投稿インデックスを表示するように指定された静的ページでは、is_home()trueis_front_page()falseです(つまり、Page ID = get_option( 'page_for_posts' ))。
  • Bothis_home()is_front_page()は、他のすべてのページでfalseです
5
Chip Bennett

私はis_homeis_front_pageis_pageと似ていると仮定します The Loop

私の現在の回避策は、少なくとも、variableをThe Loopに送信することです。

だから、大まかな例として、あなたのホームページにポートフォリオループがあるとしましょう...多分下のような行:

get_template_part( 'loop', 'portfolio' );

その行の前に変数を追加し、それをglobalにして、後でループで次のように使用できます:

global $hide_time;
$hide_time = true;
get_template_part( 'loop', 'portfolio' );

次に、ループ内で、この変数をループの条件として使用できます。

<?php
global $hide_time;
if( $hide_time != true ) { ?>
    <p><?php the_time('F Y'); ?></p>
<?php } ?>

注:変数は両方のファイルでglobalでなければなりません。

0
Giraldi

単純にテンプレートからコードを取り出して、次のように子のテーマ関数ファイルからフックしないでください。

    add_action ( 'your_themes_hook', 'display_date_exclude_front_page' );
    function display_date_exclude_front_page() {
if ( !is_front_page() ) {
    echo the_time('F Y');
        }
    }

注: your_themes_hookをテーマフックまたはWordPressフックに置き換えることを忘れないでください。

is_front_page はフロントページで常にtrueを返します。

is_home() は、それがどこにあるかに関わらず、あなたの投稿ページに対してtrueを返します。

ブログページのテンプレートを使用しているページか、デフォルトの 閲覧設定 を使用している場合はフロントページを使用しているページのどちらでもかまいません。

enter image description here

0
Brad Dalton