2010-11-02 56 views
58

Như đã nói trong tiêu đề, tôi đang tìm nhiều độ dài trích đoạn trong WordPress.Độ dài trích đoạn nhiều trong wordpress

Tôi hiểu bạn có thể làm điều này trong functions.php:

function twentyten_excerpt_length($length) { 
    return 15; 
} 
add_filter('excerpt_length', 'twentyten_excerpt_length'); 

Những gì tôi muốn biết là làm thế nào bạn có thể có nhiều trong số này từng trở về giá trị số khác nhau vì vậy tôi có thể nhận được những đoạn trích ngắn cho vòng bên, trích đoạn dài hơn cho các vòng lặp nổi bật và trích đoạn dài nhất cho bài viết chính.

Something như sử dụng chúng trong các mẫu:

<?php the_excerpt('length-short') ?> 
<?php the_excerpt('length-medium') ?> 
<?php the_excerpt('length-long') ?> 

Chúc mừng, Dave

Trả lời

85

Làm thế nào về ...

function excerpt($limit) { 
     $excerpt = explode(' ', get_the_excerpt(), $limit); 

     if (count($excerpt) >= $limit) { 
      array_pop($excerpt); 
      $excerpt = implode(" ", $excerpt) . '...'; 
     } else { 
      $excerpt = implode(" ", $excerpt); 
     } 

     $excerpt = preg_replace('`\[[^\]]*\]`', '', $excerpt); 

     return $excerpt; 
} 

function content($limit) { 
    $content = explode(' ', get_the_content(), $limit); 

    if (count($content) >= $limit) { 
     array_pop($content); 
     $content = implode(" ", $content) . '...'; 
    } else { 
     $content = implode(" ", $content); 
    } 

    $content = preg_replace('/\[.+\]/','', $content); 
    $content = apply_filters('the_content', $content); 
    $content = str_replace(']]>', ']]&gt;', $content); 

    return $content; 
} 

sau đó trong mã mẫu của bạn, bạn chỉ cần sử dụng ..

<?php echo excerpt(25); ?> 

từ: http://bavotasan.com/tutorials/limiting-the-number-of-words-in-your-excerpt-or-content-in-wordpress/

+3

Tốt. Hoạt động tuyệt vời! Cảm ơn – davebowker

+6

chắc chắn rằng bạn cũng kiểm tra chức năng này wp_trim_words http://codex.wordpress.org/Function_Reference/wp_trim_words –

+5

xin vui lòng xem câu trả lời của tôi, đó là cập nhật hơn và sử dụng chức năng wordpress tích hợp. –

24

Đây là những gì tôi đã đưa ra.

Thêm này để bạn functions.php

class Excerpt { 

    // Default length (by WordPress) 
    public static $length = 55; 

    // So you can call: my_excerpt('short'); 
    public static $types = array(
     'short' => 25, 
     'regular' => 55, 
     'long' => 100 
    ); 

    /** 
    * Sets the length for the excerpt, 
    * then it adds the WP filter 
    * And automatically calls the_excerpt(); 
    * 
    * @param string $new_length 
    * @return void 
    * @author Baylor Rae' 
    */ 
    public static function length($new_length = 55) { 
    Excerpt::$length = $new_length; 

    add_filter('excerpt_length', 'Excerpt::new_length'); 

    Excerpt::output(); 
    } 

    // Tells WP the new length 
    public static function new_length() { 
    if(isset(Excerpt::$types[Excerpt::$length])) 
     return Excerpt::$types[Excerpt::$length]; 
    else 
     return Excerpt::$length; 
    } 

    // Echoes out the excerpt 
    public static function output() { 
    the_excerpt(); 
    } 

} 

// An alias to the class 
function my_excerpt($length = 55) { 
    Excerpt::length($length); 
} 

Nó có thể được sử dụng như thế này.

my_excerpt('short'); // calls the defined short excerpt length 

my_excerpt(40); // 40 chars 

Đây là cách dễ nhất để tôi thêm bộ lọc, được gọi từ một hàm.

+0

tôi ưa thích câu trả lời này vì nó là một cách tốt đẹp để đưa ra với mã. Cảm ơn Baylor. –

+1

giải pháp tốt đẹp nhưng nó đã cho tôi một thời gian để có được nó làm việc vì nó thiếu ưu tiên để có hiệu quả trong phiên bản hiện tại (2013) của Wordpress: sử dụng 'add_filter ('excerpt_length', 'Excerpt :: new_length', 999); thay vào đó (thông báo thông số cuối cùng) – Guerilla

5

Quay lại trả lời của Marty:

Tôi biết nó đã được hơn một năm kể từ khi trả lời này đã được xuất bản, nhưng nó tốt hơn muộn hơn bao giờ hết. Đối với điều này để làm việc với giới hạn trên mặc định WordPress của 55, bạn cần phải thay thế dòng này:

 $excerpt = explode(' ', get_the_excerpt(), $limit); 

với dòng này:

 $excerpt = explode(' ', get_the_content(), $limit); 

Nếu không, chức năng chỉ làm việc với một đã trimmed- xuống đoạn văn bản.

4

Tôi nghĩ giờ đây chúng tôi có thể sử dụng wp_trim_wordssee here. Không chắc chắn dữ liệu bổ sung thoát và vệ sinh cần thiết để sử dụng chức năng này, nhưng có vẻ thú vị.

0

tôi điều đó là có thể tạo ra một mã ngắn, tôi đã không thử nó nhưng tôi đã viết cho bạn những ý tưởng chính về cấu trúc của nó

function twentyten_excerpt_length($atts,$length=null){ 
    shortcode_atts(array('exlength'=>'short'),$atts); 

    if(!isset($atts['exlength']) || $atts['exlength'] == 'short') { 
     return 15; 
    }elseif($atts['exlength'] == 'medium'){ 
     return 30; // or any value you like 
    }elseif($atts['exlength'] == 'long'){ 
     return 45; // or any value you like 
    }else{ 
     // return nothing 
    } 
} 

add_shortcode('the_excerpt_sc','twentyten_excerpt_length'); 

để bạn có thể sử dụng nó như vậy

[the_excerpt_sc exlength="medium"] 
55

Như bây giờ, bạn có thể nâng cấp trả lời Marty:

function excerpt($limit) { 
    return wp_trim_words(get_the_excerpt(), $limit); 
} 

bạn cũng có thể xác định địa chỉ 'đọc thêm' liên kết theo cách này:

function custom_read_more() { 
    return '... <a class="read-more" href="'.get_permalink(get_the_ID()).'">more&nbsp;&raquo;</a>'; 
} 
function excerpt($limit) { 
    return wp_trim_words(get_the_excerpt(), $limit, custom_read_more()); 
} 
+0

Cho đến nay phản ứng tốt nhất và đơn giản nhất. Sử dụng tuyệt vời chức năng WP tích hợp. Cảm ơn bạn đã không quá kỹ thuật một giải pháp. –

+0

@Michal, đoạn mã tuyệt vời, không bao giờ nghĩ rằng nó thực sự có thể dễ dàng như vậy –

+2

Ngọt - đây là con đường để đi. Và để đáp lại những lo ngại của Trí Nguyễn về vệ sinh dữ liệu: 'wp_trim_words()' gọi 'wp_strip_all_tags()' trên văn bản, vì vậy đừng lo lắng về việc phá vỡ HTML trong nội dung bài đăng. –

0

Tôi biết đây thực sự là một chủ đề cũ, nhưng tôi đã gặp khó khăn với vấn đề này và không có giải pháp nào tôi tìm thấy trực tuyến phù hợp với tôi. Đối với một điều của riêng tôi "excerpt_more" -filter đã luôn luôn bị cắt đứt.

Cách tôi giải quyết nó là xấu xí như địa ngục, nhưng đó là giải pháp làm việc duy nhất tôi có thể tìm thấy. Các ugliness liên quan đến việc sửa đổi 4 dòng của WP lõi (!!) + việc sử dụng một biến toàn cầu nào khác (mặc dù WP đã làm điều này rất nhiều tôi không cảm thấy quá xấu).

tôi đã thay đổi wp_trim_excerpt trong wp-includes/formatting.php này:

<?php 
function wp_trim_excerpt($text = '') { 
    global $excerpt_length; 
    $len = $excerpt_length > 0 ? $excerpt_length : 55; 
    $raw_excerpt = $text; 
    if ('' == $text) { 
     $text = get_the_content(''); 

     $text = strip_shortcodes($text); 

     $text = apply_filters('the_content', $text); 
     $text = str_replace(']]>', ']]&gt;', $text); 
     $excerpt_length = apply_filters('excerpt_length', $len); 
     $excerpt_more = apply_filters('excerpt_more', ' ' . '[&hellip;]'); 
     $text = wp_trim_words($text, $excerpt_length, $excerpt_more); 
    } 
    $excerpt_length = null; 
    return apply_filters('wp_trim_excerpt', $text, $raw_excerpt); 
} 

Những thứ mới chỉ là $excerpt_length$len bit.

Bây giờ nếu tôi muốn thay đổi độ dài mặc định tôi làm điều này trong mẫu của tôi:

<?php $excerpt_length = 10; the_excerpt() ?> 

Thay đổi cốt lõi là một giải pháp kinh khủng vì vậy tôi rất muốn biết nếu ai đó đi lên với một cái gì đó tốt hơn.

+0

Hmm ... làm thế nào đến [giải pháp của Michal] (http://stackoverflow.com/a/17177847/238688) (sử dụng 'wp_trim_words()') không phù hợp với bạn? Đẹp hơn nhiều so với hack lõi ... –

+0

Hmm .. chắc hẳn đã bỏ lỡ nó khi tôi viết cái này. Chắc chắn sẽ thử nó trên các dự án WP hiện tại của tôi. Tôi đã gặp sự cố với WP trước khi sử dụng hàm get_the_ * thay vì hàm * mà chúng không trả về cùng một điều ('the_content()' và 'get_the_content()' trong kinh nghiệm của tôi) – powerbuoy

10

Tôi cũng đang tìm kiếm tính năng này và hầu hết các chức năng ở đây đều tốt và linh hoạt. Đối với trường hợp của riêng tôi, tôi đang tìm một giải pháp cho thấy độ dài trích đoạn khác nhau chỉ trên các trang cụ thể. Tôi đang sử dụng điều này:

function custom_excerpt_length($length) { 
    return (is_front_page()) ? 15 : 25; 
} 
add_filter('excerpt_length', 'custom_excerpt_length', 999); 

Dán mã này bên trong tệp functions.php chủ đề.

+0

yap, đây là những gì tôi cần. Thnx man –

0

Hãy cẩn thận khi sử dụng một trong các phương pháp này. Không phải tất cả chúng đều tách các thẻ html ra, nghĩa là nếu ai đó chèn một liên kết vào video (hoặc url) trong câu đầu tiên của bài đăng của họ, video (hoặc liên kết) sẽ hiển thị trong đoạn trích, có thể làm tăng trang của bạn.

+2

Chào mừng bạn đến với SO. Điều này cần phải được bình luận, không trả lời. Giữ kiên nhẫn, bạn sẽ nhận được quyền bình luận. –

+1

Cảm ơn Maximus, tôi xin lỗi. –

4

Bạn có thể thêm vào file functions.php của bạn chức năng này

function custom_length_excerpt($word_count_limit) { 
    $content = wp_strip_all_tags(get_the_content() , true); 
    echo wp_trim_words($content, $word_count_limit); 
} 

Sau đó gọi nó trong mẫu của bạn như thế này

<p><?php custom_length_excerpt(50); ?> 

Các wp_strip_all_tags nên ngăn chặn các thẻ html đi lạc từ phá vỡ trang.


Tài liệu về chức năng

+3

có cách nào chúng ta có thể bỏ qua mã html bằng cách sử dụng ví dụ ở trên không? shortcode hiển thị trong một số trang của tôi – Marko

2

đây một cách dễ dàng để hạn chế nội dung hoặc đoạn trích

$content = get_the_excerpt(); 
$content = strip_tags($content);  
echo substr($content, 0, 255); 

thay đổi get_the_excerpt() bởi get_the_content() nếu bạn muốn nội dung.

Trân

+0

Cảm ơn bạn vì điều này! –

+0

Bạn hoan nghênh! , Không vấn đề gì :) – Mohammed

-1

Here là một bài viết về việc sử dụng thời gian trích đoạn tùy chỉnh trong WordPres. Có một số cách để giới hạn & Kiểm soát độ dài bài đăng.

  1. Giới hạn độ dài đoạn trích bài đăng hoặc độ dài nội dung bài bằng số từ.
  2. Giới hạn độ dài đoạn trích cho một số ký tự.
  3. Giới hạn bài đăng tóm tắt bằng cách thêm thẻ 'đọc thêm'.
  4. Bật trích đoạn tùy chỉnh để viết tóm tắt của riêng bạn cho mỗi bài đăng.
  5. kiểm soát Trích Thời lượng sử dụng bộ lọc

http://smallenvelop.com/limit-post-excerpt-length-in-wordpress/ Tôi hy vọng điều này sẽ giúp bạn rất nhiều.

0

tôi sẽ làm như thế này:

function _get_excerpt($limit = 100) { 
    return has_excerpt() ? get_the_excerpt() : wp_trim_words(strip_shortcodes(get_the_content()),$limit); 
} 

Cách sử dụng:

echo _get_excerpt(30); // Inside the loop/query 

Tại sao?

  • Nếu has_excerpt nên trở trích cho
  • Nó không, Vì vậy lời cắt/shortcodes dải từ the_content
Các vấn đề liên quan