áp dụng_filters ('the_content', $ content) so với do_shortcode ($ content)


21

Hãy nói rằng tôi có một tùy chọn chủ đề hoặc khu vực văn bản postmeta tùy chỉnh. Bây giờ tôi muốn thực thi nhiều mã ngắn, văn bản chung, hình ảnh, v.v.

Điều gì sẽ được thực hành tốt nhất và tại sao?

Lựa chọn 1:

$content = //my text area data;
echo apply_filters('the_content', $content);

Lựa chọn 2:

$content = //my text area data;
echo do_shortcode($content);

Vui lòng giải thích cho tôi cái nào sẽ được thực hành tốt nhất và tại sao.

CHỈNH SỬA

Hãy để tôi mô tả các kịch bản chi tiết. Tôi phát triển các chủ đề cho khách hàng với yêu cầu của họ. Đôi khi, tôi cần thêm meta bài đăng trên các bài đăng / trang / loại bài đăng tùy chỉnh để họ có thể thêm mã ngắn (thanh trượt, biểu mẫu liên hệ, v.v.) hoặc chỉ là một văn bản đơn giản. Đó là một văn bản nộp.

Để làm cho shortcode hoạt động, tôi sử dụng tùy chọn 1 . Bây giờ, tôi đã nghe từ ai đó rằng đây là một cách sai, và tôi nên sử dụng do_shortcode. Nhưng họ đã không cho tôi một lời giải thích tại sao nó sai cách. Đó là lý do tại sao tôi hỏi.

Toàn bộ quá trình này có thể được thực hiện trong trình soạn thảo văn bản mặc định của wp. Nhưng tôi cần tạo các tùy chọn đó cho việc sử dụng mẫu cụ thể, đó là những gì khách hàng của tôi muốn.

Câu trả lời:


16

CÂU HỎI VÀ TRẢ LỜI

Đôi khi có những câu hỏi làm phiền bạn và săn lùng bạn sau này trong cuộc sống một lần nữa, và đây là một trong những câu hỏi như vậy.

Câu hỏi này đã cho tôi suy nghĩ về một giải pháp thay thế cho vấn đề. Như tôi đã nói, các trường tùy chỉnh và hộp meta có sẵn để lưu trữ các mẩu dữ liệu meta nhỏ và không hoạt động như một phần mở rộng để đăng nội dung nơi bạn có thể thực thi shortcode và các chức năng. Ngoài ra, như tôi đã nói, phương pháp của bạn không chính xác và không nên được sử dụng

Điều tôi thấy thú vị trong bài viết của bạn là bạn đã sử dụng các trường tùy chỉnh và hộp meta để vô tình hiển thị nội dung tùy chỉnh từ đầu vào của người dùng. Vì vậy, tôi ngồi và nghĩ ra một cách có thể để làm cho công việc này hoạt động và sử dụng chính xác dữ liệu trường tùy chỉnh và dữ liệu hộp meta

Đây là ý tưởng của tôi:

KỊCH BẢN:

LƯU Ý: Điều này có thể được sửa đổi cho phù hợp với bất kỳ nhu cầu

Trên một bài đăng, người dùng muốn / yêu cầu hiển thị nội dung tùy chỉnh động sau bài đăng phù hợp với nhu cầu của mình. Điều này nên năng động. Nội dung phải là một truy vấn tùy chỉnh và người dùng cần chọn nội dung hiển thị bất cứ khi nào anh ta muốn và những gì anh ta muốn

GIẢI PHÁP POSSIBLE:

Mã ngắn sẽ không hoạt động ở đây, vì mã ngắn không thể được thực thi trong các trường tùy chỉnh. Cả hai sẽ không do_shortcodehoạt động, vì nó không năng động và được mã hóa cứng, một cái gì đó chúng tôi không muốn. Như trong câu hỏi của bạn, chúng tôi sẽ sử dụng các trường tùy chỉnh. Một lần nữa tôi nhấn mạnh, không sử dụng trường tùy chỉnh để thực hiện truy vấn hoặc mã ngắn tùy chỉnh

KẾ HOẠCH:

Chúng tôi sẽ sử dụng trường tùy chỉnh để chỉ lưu các đối số truy vấn của chúng tôi, đó là tất cả. Vì vậy, những gì chúng tôi làm là, chúng tôi tạo ra một trường tùy chỉnh được gọi là custom_query_arguments. Trong màn hình trình chỉnh sửa bài đăng của bạn, bây giờ bạn sẽ thấy trường tùy chỉnh của mình, sẵn sàng để sử dụng

Bước tiếp theo sẽ là thêm các đối số truy vấn tùy chỉnh vào trường của chúng tôi. Hãy nói rằng, chúng tôi cần hiển thị 3 bài viết từ loại 1 được sắp xếp theo tiêu đề. Vì vậy, các đối số truy vấn của chúng tôi sẽ trông như thế này: ( Ở định dạng chuỗi )

'posts_per_page=3&cat=1&orderby=title'

Đây là những gì bạn nên nhập vào trường tùy chỉnh của bạn. Sau khi nhập, lưu giá trị của trường tùy chỉnh của bạn

Tiếp theo sẽ là xây dựng truy vấn tùy chỉnh trong tệp.php của bạn. Những gì cần thiết ở đây, chúng ta cần lấy giá trị từ trường tùy chỉnh của chúng ta, đây thực sự là đối số truy vấn của chúng ta và đưa nó đến một phiên bản mới WP_Queryđể truy xuất các bài đăng. Chúng ta cũng cần kiểm tra xem chúng ta có thực sự có một giá trị được lưu trong trường tùy chỉnh đó hay không, nếu trường tùy chỉnh trống, không hiển thị gì cả

MẬT MÃ:

Bạn có thể thử một cái gì đó như thế này trong single.php ngay sau bài đăng duy nhất.

$args = get_post_meta( get_queried_object_id(), 'custom_query_arguments', true );
// check if the custom field has a value
if( ! empty( $args ) ) {

    $q = new WP_Query( $args );

    if( $q->have_posts() ) {
        while( $q->have_posts() ) {
            $q->the_post();

            the_title();

        }
        wp_reset_postdata();
    }

} 

Nếu người dùng muốn xóa truy vấn tùy chỉnh, anh ta chỉ cần xóa giá trị của trường tùy chỉnh và để trống trường tùy chỉnh. Nếu anh ta cần hiển thị cùng một truy vấn nhưng từ loại 10 và tổng cộng 5 bài đăng, anh ta chỉ có thể thay thế giá trị ban đầu bằng giá trị sau

'posts_per_page=5&cat=10&orderby=title'

THÔNG BÁO

Điều quan trọng là sử dụng đúng synatx và định dạng khi nhập thông tin vào các trường và hộp meta tùy chỉnh này. Lỗi cú pháp hoặc thông tin không chính xác sẽ dẫn đến đầu ra không mong muốn hoặc thậm chí lỗi nghiêm trọng. Điều quan trọng là để cho khách hàng của bạn biết thông tin đó

CÂU TRẢ LỜI

Tôi không hiểu những gì bạn đang cố gắng thực hiện, nhưng từ những gì tôi có thể nói với bạn, đó là hai điều riêng biệt

LỰA CHỌN 1

apply_filters('the_content', $content);được sử dụng để áp dụng các bộ lọc nội dung cho nội dung bài chưa được lọc, thường xuất phát từ việc sử dụng $post->post_content. Các bộ lọc này bao gồm bộ lọc nổi tiếng wp_autopcó thêm thẻ p vàothe_content()

apply_filters('the_content', $content); được sử dụng thông thường trong việc kết hợp với get_postsnơi người ta làm việc trực tiếp với các WP_Postđối tượng mà không sử dụng setup_postdata( $post ), điều này làm cho các thẻ mẫu như the_content() có sẵn để sử dụng

LỰA CHỌN 2

do_shortcode được sử dụng để thêm một mã ngắn ở bất cứ đâu trong các tệp mẫu bên ngoài trình soạn thảo văn bản trong phần cuối của trình chỉnh sửa trang, về cơ bản lọc các mã ngắn thông qua các móc của chúng.

Cách sử dụng đúng như sau

Ví dụ: Thêm mã ngắn thư viện trong tệp mẫu

echo do_shortcode( '[gallery]' )

CHỈNH SỬA 1

Từ ý kiến ​​của bạn, tôi sẽ không sử dụng một shortcode nào cả.

Nếu bạn sẽ không thêm một mã ngắn thông qua trình soạn thảo văn bản và sẽ thêm nó trực tiếp (mã cứng) thông qua do_shortcodemột tệp mẫu, tôi chỉ muốn thêm chức năng vào mẫu

Thí dụ:

Nếu bạn có chức năng shortcode sau

function footag_func( $atts ) {
    return "foo = {$atts['foo']}";
}
add_shortcode( 'footag', 'footag_func' );

Bạn chỉ có thể gọi hàm trực tiếp trong một mẫu như

echo footag_func();

Cách này nhanh hơn nhiều vì shortcode không cần phải phân tích cú pháp

CHỈNH SỬA 2

Thành thật mà nói ở đây, bạn hoàn toàn làm điều này sai từ chỉnh sửa của bạn. Đó là lý do tại sao tôi không thể hiểu câu hỏi ban đầu của bạn

Đôi khi, tôi cần thêm meta bài đăng trên các bài đăng / trang / loại bài đăng tùy chỉnh để họ có thể thêm mã ngắn (thanh trượt, biểu mẫu liên hệ, v.v.) hoặc chỉ là một văn bản đơn giản. Đó là một văn bản nộp.

Để làm cho shortcode hoạt động, tôi sử dụng tùy chọn 1 .....

Các trường tùy chỉnh không phảitrường văn bản và chắc chắn không có nghĩa là được sử dụng để thực thi mã ngắn và cho vấn đề đó là thanh trượt hoặc biểu mẫu liên hệ. Các trường tùy chỉnh không bao giờ được sử dụng để thay thế trình soạn thảo văn bản trong bài viết và trang.

Như tôi đã nói trước đây, apply_filters('the_content', $content);có nghĩa là được sử dụng để áp dụng định dạng cho nội dung bài thô.

Bạn có hai lựa chọn ở đây

  • Sử dụng do_shortcodetrực tiếp trong các tệp mẫu mà tôi không khuyến nghị vì sử dụng chức năng nhanh hơn vì không cần phải phân tích cú pháp mã ngắn

  • Sử dụng mã ngắn trực tiếp trong trình soạn thảo văn bản cho trang / bài đăng cụ thể

Tôi thực sự khuyên bạn nên có một cái nhìn mới mẻ về cấu trúc của bạn và những gì bạn muốn đạt được. Các trường tùy chỉnh không phải là trình soạn thảo văn bản và không thể thực thi các đoạn mã ngắn hoặc thanh trượt.

Đề xuất của tôi sẽ là có thể nhìn vào các widget tùy chỉnh hoặc một hệ thống mà bạn có thể sử dụng với các trường tùy chỉnh


1
Cảm ơn vì đã giải thích. Tôi đã biết điều đó. Nhưng tôi đã hỏi, tùy chọn nào sẽ chính xác hơn nếu mục tiêu chỉ là xuất ra các đoạn mã ngắn từ văn bản tùy chọn meta / chủ đề văn bản. Tôi đang sử dụng tùy chọn1 để lấy nội dung được lọc và nó trở thành thói quen của tôi. Và sử dụng tùy chọn 1 thậm chí chỉ để in một shortcode từ một textfiled. Thế là hỏi.
тнє Sufi

Tôi đã xem bản chỉnh sửa. Tôi có điểm số của bạn. Nhưng kịch bản của tôi thì khác. Giống như, có một văn bản được nộp / khu vực và một vài đoạn mã ngắn. Bây giờ người dùng có thể đặt bất kỳ shortcode / s nào trong khu vực đó. Vì vậy, tôi không thể trực tiếp sử dụng một chức năng. Tôi cần phải giữ cho phần đó năng động.
тнє Sufi

Trường văn bản đó ở đâu, có giống như trong màn hình trình chỉnh sửa trang cuối
Pieter Goosen

Nó có thể là một meta bài. Hoặc nó có thể là một tùy chọn chủ đề. Tôi sử dụng bộ lọc_content cho cả hai.
тнє Sufi

Xin lỗi, nhưng sau đó không có điều này có ý nghĩa. Tại sao bạn muốn sử dụng mã ngắn trong các trường tùy chỉnh. Tại sao bạn thậm chí sẽ sử dụng shortcodes sau đó cả.
Pieter Goosen
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.