2011-07-27 215 views
-1

如何將下面的代碼(這是在foreach循環)時,通過相同的變量有時返回的東西,有時返回任何結果:PHP邏輯運算符

$term_id = 76; 
$term_parent = 75; 

if($term_id != 114 && $term_id != 115 && $term_parent != 83){ 
    $term_link_content = 'something'; 
} else { 
    $term_link_content = 'nothing'; 
} 

- 基於答覆迄今,全碼在下面。我基本上在第一個任期之後不等於任何列出的ID。我已經通過輸出$ term_id和$ term_parent來查看具有相同條款的不同帖子,因此我可以看到if語句正在傳遞相同的值,但有時$ term_link_content變量具有內容,而其他時間則爲空。

$posts = get_posts('post_type=products&product_categories=Best Sellers'); 
foreach($posts as $post){ 

$post_ID = $post->ID; 

$terms = get_the_terms($post_ID, "product_categories"); 

$i = 0; 
foreach($terms as $term){ 

    $term_id = $term->term_id; 
    $term_parent = $term->parent; 
    $term_name = $term->name; 
    $term_slug = $term->slug; 

    if($term_id != 114 && $term_id != 115 && $term_parent != 83){ 

    // only get the first 
    if(++$i > 1) break; 
    $term_text = $term_name; 
    $term_link = $url.'/shop/'.$term_slug; 
    $term_link_content = '<span class="term_text"><a class="'.$card_colour.'" href="'.$term_link.'">'.$term_text.'</a></span>'; 

    } else { $term_link_content = ''; } 
} 
} 
+10

它不會。就那麼簡單。該代碼之外的事情正在發生。 – Wrikken

+1

上面顯示的內容永遠不會產生不同的結果。問題必須在其他地方 –

+1

它應該總是根據你寫的內容返回「某些東西」。如果沒有,其他事情正在發生。發佈更多代碼? –

回答

0

我想你進入你的foreach循環之前定義$term_id和/或$term_parent,並在循環體中執行代碼的其餘部分。

但是,當你做這樣的事情:

foreach (getTerms() as $term) { 
    // perform an if-statement 
} 

這可能會改變你定義的變量,例如:

function getTerms() { 
    global $term_id, $term_parent; 
    // probably some database-connection that changes $term_id and $term_parent. 
} 

糾正我,如果我錯了,但我很確定Wordpress的函數是這樣工作的,所以當你使用Wordpress,開發插件或者當你使用面向功能的(而不是面向對象的)框架時,你不應該相信泛型的全局變量。