Làm thế nào để buộc trích đoạn / lời trêu ghẹo trong vòng lặp


7

Khi tôi ở trong "vòng lặp" (trang lưu trữ, v.v.), làm cách nào để buộc các đoạn giới thiệu / đoạn trích cho tất cả các bài viết, bất kể chúng có chứa <!--more-->thẻ hay không?

Chi tiết:

Tôi bắt đầu tắt của các _smẫu mà hiển thị blog của nội dung bài đăng bằng các content.phpmẫu trong đó nó gọi the_content()chức năng. Hàm này kiểm tra bài đăng và cố gắng tìm <!--more-->thẻ. Nếu tìm thấy thẻ, nó sẽ trả về một lời trêu ghẹo và liên kết đọc thêm , nếu nó không chỉ đơn giản là xuất ra toàn bộ bài.

Tôi muốn giữ phần đầu tiên, tức là tôn trọng <!--more-->thẻ nếu tác giả nội dung đã sử dụng nó, nhưng nếu anh ấy / cô ấy quên nó, tôi muốn tự động hiển thị đoạn giới thiệu / đoạn trích (giống như đoạn đầu tiên hoặc hai).

Cách tốt nhất để làm việc này là gì? Có một the_contentbộ lọc nhưng ví dụ văn bản đọc thêm tùy chỉnh không đi vào nó. Bạn muốn giới thiệu gì?

Câu trả lời:


3

BIÊN TẬP

OK, có một chức năng riêng rất ẩn, get_extended()mà tôi chưa bao giờ biết và được giải thích rất nhiều bởi @kaiser trong câu trả lời của anh ấy . Câu trả lời của tôi chỉ nên là phần mở rộng cho câu trả lời của @kaiser

CÂU TRẢ LỜI

Không có chức năng riêng để làm điều này. Điều tốt nhất ở đây sẽ là sử dụng một hàm PHP như strpostìm kiếm thêm thẻ, và sau đó làm một cái gì đó theo kết quả.

Bạn có thể thử một cái gì đó như thế này

if( strpos( $post->post_content, '<!--more-->' ) ) {
    the_content( __( '&hellip; Read more about this article <span class="meta-nav">&rarr;</span>' ) );
}
else {
    the_excerpt();
}

Có thể là cách tiếp cận đơn giản nhất. Một nhược điểm là một đoạn trích thực sự khá khác biệt / được xây dựng khác với những gì WordPress làm cho các lời trêu ghẹo, vì vậy tôi sẽ cần tạo chức năng của riêng mình cho nó và sao chép một số mã WP nội bộ vì nó không được chú ý lắm. Tuy nhiên, đây có lẽ là cách dễ nhất để đi về nó, cảm ơn.
Borek Bernard

Nếu bạn cần các trích đoạn tùy chỉnh, bạn có thể xem bài đăng này
Pieter Goosen 28/12/14

8

Tất nhiên, có một hàm API - ẩn trong chiều sâu của lõi - để truy xuất các phần trước và sau <!--more-->thẻ trong nội dung. Do các quy ước đặt tên chính xác bằng 0 , các phần tiện dụng trong WP thường được giám sát : get_extended().

// In the loop, after `the_post()` filled the global `$post`:
$info = get_extended( $post );

// The resulting data is an Array:
[Array] $info 
    'main'      => the text before the `<!--more-->`
    'extended'  => the content after the `<!--more-->` comment
    'more_text' => the custom "Read More" text

Kết quả sẽ như sau:

if ( have_posts() )
{
    while ( have_posts() )
    {
        the_post();

        $info = get_extended( $GLOBALS['post'] );

        if ( ! empty( $info['extended'] ) )
        {
            the_content( ! empty( $info['more_text'] ) ? $info['more_text'] : 'Read more' );
        }
        else
        {
            the_excerpt();
        }
    }
}

và chuyển đoạn trích và nội dung dựa trên sự tồn tại của <!--more-->. Hãy nhớ rằng mỗi mặc định, WP chỉ chấp nhận <!--more--> không có khoảng trắng . Vì vậy, nếu tác giả của bạn gõ nó bằng tay và thêm khoảng trắng, thì tác phẩm <!-- more -->sẽ không hoạt động (trong mọi trường hợp).


Cảm ơn đã gửi câu trả lời của bạn. Tôi chưa bao giờ biết về chức năng này. Công việc tuyệt vời và cảm ơn vì đã để tương lai ẩn này nhìn thấy ánh sáng trên WPSE
Pieter Goosen

@PieterGoosen Chỉ cần tìm ra rằng cũng có tùy chỉnh được more_texttrả lại. Tôi tự hỏi đó là gì. Có lẽ bạn muốn làm một số nghiên cứu ở đó? :)
kaiser

Chà, có lẽ tôi sẽ có chức năng "huyền thoại_the_content ()" của riêng mình, nó sẽ thực hiện <!--more-->tìm kiếm và nếu nó không tìm thấy thì tôi sẽ nhận được nội dung HTML được hiển thị của bài đăng và có thể chỉ cần trả về hai đoạn đầu tiên từ nó. Tôi không thích đầu ra của các chức năng trích đoạn, và mặc dù có nhiều cách để sửa đổi nó như các bài đăng của Pieter, có lẽ nó quá rắc rối cho trường hợp sử dụng của tôi. Cảm ơn về thông tin tuyệt vời.
Borek Bernard
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.