2014-01-29 54 views
0

這似乎是一個足夠簡單的問題,但我是PHP的新手,並且我一直在爲此工作數小時。我正在瀏覽檔案中的帖子,並根據某個屬性顯示每篇帖子的不同徽標。下面是我的functions.php現有功能:在Wordpress PHP循環中匹配多個屬性條款

function show_logo() { 
global $post; 
$attribute_names = array('pa_product-type' 
); 

foreach ($attribute_names as $attribute_name) { 
    $taxonomy = get_taxonomy($attribute_name); 
    if ($taxonomy && ! is_wp_error($taxonomy)) { 
     $terms = wp_get_post_terms($post->ID, $attribute_name); 
     $terms_array = array(); 

     if (! empty($terms)) { 
      foreach ($terms as $term) { 
       if ($term->name == 'L1') { 
        // Show L1 Logo 
       } 
       elseif ($term->name == 'M1') { 
        // Show M1 Logo 
       } 
       elseif ($term->name == 'H1') { 
        // Show H1 Logo 
       } 
       else { 
        $full_line = '<span>'. $term->name . '</span>'; 
       } 
       array_push($terms_array, $full_line); 
      } 

      echo implode($terms_array); 
     } 
    } 
    } 
} 

所有我想要做的就是做表現出不同的標誌,如果發佈多個條款(例如「L1」和「M1」)相匹配。我嘗試了很多不同的東西,但我不知道我是否在正確的軌道上。任何幫助將不勝感激。

+0

內部if/elseif/else中的每個子句都將$ full_line中的值設置爲被推入到$ terms_array中?也許在其中一個塊中顯示更多代碼將有助於澄清。 –

回答

0

這應該相當容易,我只是不完全確定所涉及的所有數據的完整上下文。

假設你只顯示平均每個職位的一個標誌,這裏是一個辦法:

權利之前foreach ($terms as $term) {創建三個布爾變量:

$hasL1 = false; 
$hasM1 = false; 
$hasH1 = false; 

那麼當你的項名稱的一個相匹配,而不是隻顯示標誌設置相應的變量等於真,即$hasL1 = true;

完成該foreach後,無論是在echo implode($terms_array);之前或之後取決於什麼是有道理的,建立一個ne ◆如果/ ELSEIF/else塊來決定要顯示什麼樣的標誌如下:

if ($hasL1 && $hasM1 && $hasH1) { // Pick logo for all 3 } 
elseif ($hasL1 && $hasM1) { // Pick logo for pair } 
elseif ($hasL1 && $hasH1) { // Pick logo for pair } 
elseif ($hasH1 && $hasM1) { // Pick logo for pair } 
elseif ($hasL1) { // Pick logo } 
elseif ($hasM1) { // Pick logo } 
elseif ($hasH1) { // Pick logo } 
else { // default logo } 

當然也有實現這個太多的其他方式。

+0

謝謝。這工作完美。我應該早些時候請求幫助。 –