4

申し訳ありませんが、これは初心者の質問のように思われます。今朝は脳が動かない。

複数のifステートメントを実行しようとしていますが、正しく動作していません。探しているテンプレートが見つかった後は、常に最小のテンプレートをロードしているように見えます。このようなことをするための最良の方法は何ですか:

$post = $wp_query->post;
if ( in_category('7') ) {include(TEMPLATEPATH . '/post-experts.php');}
if ( in_category('6') ) {include(TEMPLATEPATH . '/post-radio.php');}
if ( in_category('5') ) {include(TEMPLATEPATH . '/post-lifestyle.php');}
else {include(TEMPLATEPATH . '/singleorigional.php');
}

4

5 に答える 5

9

ほとんどelse ifの場合、2番目と3番目のifに対して実行するか、いずれも真でないかどうかを知る方法があります。elseステートメントを実行してください。

于 2012-04-27T14:07:27.557 に答える
8

効率を上げるには、switchステートメントを使用するのが最善です。次に、ケースで見つからなかったステートメントをキャッチするには、デフォルトを使用できます。

switch(in_category){ //Begin switch statement.
case '7': //Check if it equals 7
include(TEMPLATEPATH . '/post-experts.php'); //Include our PHP code
break; //End this current condition.
case '6': //Check if it equals 6
include(TEMPLATEPATH . '/post-radio.php'); //Include our PHP code
break; //End this current condition.
case '5': //Check if it equals 5
include(TEMPLATEPATH . '/post-lifestyle.php'); //Include our PHP code
break; //End this current condition.

default: //If none of the above cases are found, do this.
include(TEMPLATEPATH . '/singleorigional.php'); //Include our PHP code
break; //End this current condition.   
}

編集:なぜこれが優れているのかをよりよく説明するために、後日これに戻ることにしました。

if elseの組み合わせは、順序を意味します。例えば

if(thingy == "thing1"){
//Do one thing
}
elseif(thingy == "thing2"){
//Do another thing
} 
elseif(thingy == "thing3"){
//Do a different thing
}
else{
//Catch anything
}

これにより、最初の条件をチェックし、thing ==thing1の場合はチェックし、そうでない場合は次の条件であるthing==thing2と等しいかどうかをチェックします。一般的に常にthing1を期待している場合は、他のいくつかのことをキャッチしているだけなので、これで問題ない可能性があります。ただし、現実的には、必要なソリューションに到達する前に、考えられるすべての条件をチェックすることは非効率的です。

代わりに、同等のswitchステートメントを記述します。

switch(thingy){
case "thing1":
//Do one thing
break;
case "thing2":
//Do another thing
break;
case "thing3":
//Do a different thing
break;
default:
//Catch anything
break; //Break is not needed if default is the final case.
}

代わりに、これが行うのは、最初に答えを取得することです。たとえば、thing == "thing3"とすると、関係のない他のケースはスキップされ、代わりに必要なことだけが実行されます。順序を使用せず、代わりに正解を指すように機能します。したがって、実際の答えが最初のケースであるか100番目のケースであるかは関係ありません。それは、関連することだけを行います。

要約すると、スイッチを使用し、回答されたケースが100番目のケースである場合、ifelseを使用し、回答が100番目のバリエーションであった場合、そのスイッチ(回答)が見つかった後に何をすべきかを示します。 ifelseの場合、必要な処理を実行する前に、99個の他の無意味なチェックを繰り返す必要があります。

于 2017-08-28T08:41:48.593 に答える
4

問題は、Ifステートメントが独立していることだと思います。カテゴリ付きの配列がある場合は、switchステートメントを使用してみてください。または、thinkがブール値を返すin_category関数しかない場合は、elseifステートメントを使用してください。例:

if (in_category(7)){...}
elseif (in_category(6)){...}
elseif (in_category(5)){...}
else {
...
}
于 2012-04-27T14:13:21.940 に答える
2

私の仮定では、「in_category」を探しているものはすべて、複数のカテゴリに含まれている可能性があります。したがって、ブロックされている場合は1つではありません。これを試して:

凝縮バージョン:

$post = $wp_query->post;
$found = false;
if ( in_category('7') ) { include(TEMPLATEPATH . '/post-experts.php'); $found = true; }
if ( in_category('6') ) {include(TEMPLATEPATH . '/post-radio.php'); $found = true; }
if ( in_category('5') ) {include(TEMPLATEPATH . '/post-lifestyle.php'); $found = true; }
if(!$found) include(TEMPLATEPATH . '/singleorigional.php');

より読みやすい/理解しやすいバージョン:

$post = $wp_query->post;
$found = false;
if ( in_category('7') ) {
    include(TEMPLATEPATH . '/post-experts.php');
    $found = true;
}
if ( in_category('6') ) {
    include(TEMPLATEPATH . '/post-radio.php');
    $found = true;
}
if ( in_category('5') ) {
    include(TEMPLATEPATH . '/post-lifestyle.php');
    $found = true;
}
if(!$found) include(TEMPLATEPATH . '/singleorigional.php');

または-1つのカテゴリでしか見つからない場合:

$post = $wp_query->post;
if ( in_category('7') ) {
    include(TEMPLATEPATH . '/post-experts.php');
} else if ( in_category('6') ) {
    include(TEMPLATEPATH . '/post-radio.php');
} else if ( in_category('5') ) {
    include(TEMPLATEPATH . '/post-lifestyle.php');
} else {
    include(TEMPLATEPATH . '/singleorigional.php');
}
于 2012-04-27T14:07:57.697 に答える
0

@thantosが言ったように、elseifステートメントを含めます。

編集:WordPressは、in_category関数の2番目の引数、つまり$post変数が必要だと言っています。それに合わせて応答を編集しました。

例:

$post = $wp_query->post;
if (in_category('7', $post)) {
    include(TEMPLATEPATH . '/post-experts.php');
}
else if (in_category('6', $post)) {
    include(TEMPLATEPATH . '/post-radio.php');
}
else if (in_category('5', $post)) {
    include(TEMPLATEPATH . '/post-lifestyle.php');
}
else {
    include(TEMPLATEPATH . '/singleorigional.php');
}
于 2012-04-27T14:09:29.130 に答える