2012-10-24 84 views
1

如果標題長度超過40個字符,我正在修改麪包屑腳本以追加'...'。我把那部分工作做得很好,但是我不能正確的解決的就是如何將它嵌入到這個龐大的腳本中,如果它長度不到40個字符,它就會離開它。嵌套elesif語法

我還需要別的嗎?我從來沒有遇到過,那裏有多個if個腳本沒有elseelseif

} elseif (is_single() && !is_attachment()) { 
     if (get_post_type() != 'post') { 
     $post_type = get_post_type_object(get_post_type()); 
     $slug = $post_type->rewrite; 
     echo '<a href="' . $homeLink . '/' . $slug['slug'] . '/">' . $post_type->labels->singular_name . '</a>'; 
     if ($showCurrent == 1) echo ' ' . $delimiter . ' ' . $before . substr(the_title('', '', FALSE), 0, 40) . $after; 
     } else { 
     $cat = get_the_category(); $cat = $cat[0]; 
     $cats = get_category_parents($cat, TRUE, ' ' . $delimiter . ' '); 
     if ($showCurrent == 0) $cats = preg_replace("#^(.+)\s$delimiter\s$#", "$1", $cats); 
     echo $cats; 
     if (($showCurrent == 1) && (strlen($post->post_title) > 40)) echo $before . substr(the_title('', '', FALSE), 0, 40) . '...' . $after; 
     } elseif { 
     if (($showCurrent == 1) && (strlen($post->post_title) < 40)) echo $before . get_the_title() . $after; 

     } 
+1

這不會解決您最實際的問題,但我用了這種情況的東西是在服務器上,我檢查字符串的長度爲> 40(像你這樣做)......如果是這樣,加一個類的元素叫做「trimmed」,只打印前40個字符......然後在你的CSS中使用這個規則:'.trimmed:after {content:「...」; } – Ian

+0

整潔的技巧,謝謝分享 –

回答

0

最後elseif是無效的,因爲它已經被其他的前面。

我也會說你應該習慣於使用標準化的寫作方式if/if-else語句。在我看來,你的代碼可能會搞砸了,因爲你有一些沒有大括號的if語句,有些語句是。例如,如果您在所有情況下都使用花括號,併爲它們使用適當的縮進,那麼您遇到的問題以及如果遵循其他條件,則會非常清楚地發現。

舉個例子:

if (get_post_type() != 'post') { 
    $post_type = get_post_type_object(get_post_type()); 
    $slug = $post_type->rewrite; 
    echo '<a href="' . $homeLink . '/' . $slug['slug'] . '/">' . $post_type->labels->singular_name . '</a>'; 
    if ($showCurrent == 1) { 
     echo ' ' . $delimiter . ' ' . $before . substr(the_title('', '', FALSE), 0, 40) . $after; 
    } 
} else { 
    $cat = get_the_category(); $cat = $cat[0]; 
    $cats = get_category_parents($cat, TRUE, ' ' . $delimiter . ' '); 
    if ($showCurrent == 0) { 
     $cats = preg_replace("#^(.+)\s$delimiter\s$#", "$1", $cats); 
    } 
    echo $cats; 
    if (($showCurrent == 1) && (strlen($post->post_title) > 40)) { 
     echo $before . substr(the_title('', '', FALSE), 0, 40) . '...' . $after; 
    } 
} else if { 
    if (($showCurrent == 1) && (strlen($post->post_title) < 40)) { 
     echo $before . get_the_title() . $after; 
    } 
} 

對我來說,這是更清晰的閱讀,即使它是稍微詳細。同樣容易清楚的是,最後的其他 - 如果沒有意義。順便說一句,當你修正你的邏輯時,確保你考慮如果字符串正好是40個字符長度會發生什麼。

+0

這段代碼不是我的,我只是想知道如何修改它來截斷瘋狂的長篇文章。我同意這很混亂,但腳本足夠長,我決定現在不花時間(這只是一小部分)。我的代碼編輯器將最後一個'else if'標記爲語法錯誤。當我完全刪除它說它沒有問題。我不完全明白爲什麼 - 如果編輯錯了或者我錯過了什麼地方 –

+0

@kristinachilds正如我所提到的,這不是有效的代碼。在它之前已經有了'else'條件來捕獲所有'get_post_type()!='post''評估爲'false'的情況。 –

+0

我猜想你嵌套在無效的else-if中的if應該是前一個if(($ showCurrent == 1)&&(strlen($ post-if) > post_title)> 40)){'語句。 –

0

看起來你可能會丟失一些大括號

} elseif (is_single() && !is_attachment()) { 
     if (get_post_type() != 'post') { 
     $post_type = get_post_type_object(get_post_type()); 
     $slug = $post_type->rewrite; 
     echo '<a href="' . $homeLink . '/' . $slug['slug'] . '/">' . $post_type->labels->singular_name . '</a>'; 

     if ($showCurrent == 1) { echo ' ' . $delimiter . ' ' . $before . substr(the_title('', '', FALSE), 0, 40) . $after; } 

     } else { 
     $cat = get_the_category(); $cat = $cat[0]; 
     $cats = get_category_parents($cat, TRUE, ' ' . $delimiter . ' '); 

     if ($showCurrent == 0) { $cats = preg_replace("#^(.+)\s$delimiter\s$#", "$1", $cats); 
     echo $cats; } 

     if (($showCurrent == 1) && (strlen($post->post_title) > 40)) { echo $before . substr(the_title('', '', FALSE), 0, 40) . '...' . $after; } 

     } elseif { 

     if (($showCurrent == 1) && (strlen($post->post_title) < 40)) { echo $before . get_the_title() . $after; } 

     } 
0

的邏輯並不清晰。您尚未處理長度恰好爲40個字符的情況。

試着構造你的代碼,所以你只需要評估一次相同的表達式。也許這就是你的意思?

} elseif (is_single() && !is_attachment()) { 
    if (get_post_type() != 'post') { 
    ... 
    } else { 
    ... 
    echo $cats; 

    if (($showCurrent == 1) && (strlen($post->post_title) > 40)) 
     echo $before . substr(the_title('', '', FALSE), 0, 40) . '...' . $after; 
    } 
    else { 
     echo $before . get_the_title() . $after; 
    } 
    } 
} // Close the elseif 
+0

我沒有想到!謝謝。雖然'else'仍然被標記爲語法錯誤。也許整個腳本需要在上下文中看到?我試圖挽救你的眼睛,因爲這只是一小部分(而且代碼非常難看)。 HTTP://引擎收錄。com/TQ9kd30g我突出了它來幫助你們。 –

+0

您需要關閉封閉的elseif塊。我已經添加了上面的大括號。 –

+0

,因爲它拋出了下面的其他'elseif',導致更多的問題 –