2014-03-27 32 views
0

我正在研究一個WordPress主題,我需要以某些字數截斷帖子。我知道如何使用the_excerpt(),但是這會去除所有段落中斷,鏈接等,這不是預期的效果。我嘗試使用jQuery Succinct並將其應用於the_content() - 保持格式化,但在段落中間切斷,因此我打開了<p>,然後打破了其餘佈局。客戶端不想使用該選項手動向帖子中插入「更多」標籤。在不丟失HTML格式的情況下截斷WordPress發佈內容

有沒有辦法通過PHP或jQuery做到這一點?

回答

3

您必須創建自己的摘錄功能。我寫了一個可以讓所有的html標籤保持完整的句子,並且在選定的單詞數量之後,也可以在句末添加摘要。

您需要先刪除原始摘錄過濾器並添加新的過濾器。添加到您的functions.php

remove_filter('get_the_excerpt', 'wp_trim_excerpt'); 
add_filter('get_the_excerpt', 'pietergoosen_custom_wp_trim_excerpt'); 

現在添加下面

function pietergoosen_custom_wp_trim_excerpt($pietergoosen_excerpt) { 
    global $post; 
    $raw_excerpt = $pietergoosen_excerpt; 
     if ('' == $pietergoosen_excerpt) { 

      $pietergoosen_excerpt = get_the_content(''); 
      $pietergoosen_excerpt = strip_shortcodes($pietergoosen_excerpt); 
      $pietergoosen_excerpt = apply_filters('the_content', $pietergoosen_excerpt); 
      $pietergoosen_excerpt = str_replace(']]>', ']]&gt;', $pietergoosen_excerpt); 

      //Set the excerpt word count and only break after sentence is complete. 
       $excerpt_word_count = 75; 
       $excerpt_length = apply_filters('excerpt_length', $excerpt_word_count); 
       $tokens = array(); 
       $excerptOutput = ''; 
       $count = 0; 

       // Divide the string into tokens; HTML tags, or words, followed by any whitespace 
       preg_match_all('/(<[^>]+>|[^<>\s]+)\s*/u', $pietergoosen_excerpt, $tokens); 

       foreach ($tokens[0] as $token) { 

        if ($count >= $excerpt_word_count && preg_match('/[\?\.\!]\s*$/uS', $token)) { 
        // Limit reached, continue until ? . or ! occur at the end 
         $excerptOutput .= trim($token); 
         break; 
        } 

        // Add words to complete sentence 
        $count++; 

        // Append what's left of the token 
        $excerptOutput .= $token; 
       } 

      $pietergoosen_excerpt = trim(force_balance_tags($excerptOutput)); 

       $excerpt_end = ' <a href="'. esc_url(get_permalink()) . '">' . '&nbsp;&raquo;&nbsp;' . sprintf(__('Read more about: %s &nbsp;&raquo;', 'pietergoosen'), get_the_title()) . '</a>'; 
       $excerpt_more = apply_filters('excerpt_more', ' ' . $excerpt_end); 

       $pos = strrpos($pietergoosen_excerpt, '</'); 
       if ($pos !== false) 
       // Inside last HTML tag 
       $pietergoosen_excerpt = substr_replace($pietergoosen_excerpt, $excerpt_end, $pos, 0); 
       else 
       // After the content 
       $pietergoosen_excerpt .= $excerpt_end; 

      return $pietergoosen_excerpt; 

     } 
     return apply_filters('pietergoosen_custom_wp_trim_excerpt', $pietergoosen_excerpt, $raw_excerpt); 
    } 
+0

這個我不知道,如果它是確定發表評論較早的帖子,但有可能使之贏得了調整代碼如果一個點在一年之後就結束了?我們經常有類似於「某件事情1976年的事情」。 – Marko

+0

另外,對不起,如果我打擾:),但如果圖像放在帖子的開頭部分,節選將不起作用。例如,我得到的那些帖子的結果是「img class =」alignnone size-full wp-image-8511「src =」http:// www。「 – Marko

相關問題