2017-09-27 19 views
0

我有兩個條件語句如下:條件獨立工作,但不作爲或

if(isset($query_string['page']) && strpos($_SERVER['REQUEST_URI'], '/blog/') !== false && strpos($_SERVER['REQUEST_URI'], '/blog/page/') === false) { 

if($query->is_main_query() && !$query->is_feed() && !is_admin() && strpos($_SERVER['REQUEST_URI'], '/blog/') !== false && strpos($_SERVER['REQUEST_URI'], '/blog/page/') === false) { 

最後一個條件在這兩個if語句是:

strpos($_SERVER['REQUEST_URI'], '/blog/page/') === false 

我想改變最後這兩個條件都是純英文的:

如果所有條件都匹配且URL包含'/ blog/page /''/ blog/tag /'做些什麼。

當我從交換的最後一個條件「/博客/頁/」「/博客/標籤/」代碼工作。只要我嘗試同時擁有這兩個代碼,代碼就不再工作了。

我試圖將&&更改爲and並使用||作爲或條件,以保持正確的優先順序。我試圖把它們放在括號之間來處理優先級,但都沒有工作。

我甚至嘗試:

strpos($_SERVER['REQUEST_URI'], '/blog/page/') || strpos($_SERVER['REQUEST_URI'], '/blog/tag/') === false 

哪個都於事無補。

回答

1
<?php 

// Your code says "=== false" (doesn't match) 
// but your English description says "contains either '/blog/page/' or '/blog/tag/'" (match) 
// This assumes you want what your English description says 


/** 
* Returns a boolean indicating if the given URI part is found 
*/ 
function match($uriPart) 
{ 
    return strpos($_SERVER['REQUEST_URI'], $uriPart) !== false; 
} 

/** 
* Returns a boolean indicating if the given URI part is not found 
*/ 
function doesNotMatch($uriPart) 
{ 
    return strpos($_SERVER['REQUEST_URI'], $uriPart) === false; 
} 

// In this case, "match('/blog/')" is redundant because you're checking for other strings which contain it. 
// Nevertheless, I'm leaving it as-is. 
if(isset($query_string['page']) && match('/blog/') && (match('/blog/page/') || match('/blog/tag/'))) { 
... 

// In this case, "match('/blog/')" is redundant because you're checking for other strings which contain it. 
// Nevertheless, I'm leaving it as-is. 
if($query->is_main_query() && !$query->is_feed() && !is_admin() && match('/blog/') && (match('/blog/page/') || match('/blog/tag/'))) { 
    ... 
} 
+0

這正是被搞亂一切。非常感謝您提供清晰準確的答案 – onemesh