it-swarm-vi.tech

Khi khí loại bỏ_filter không?

Có những báo cáo rằng remove_filter không hoạt động trong một số trường hợp và chúng tôi nên cung cấp giải pháp thay thế . Tuy nhiên, bài viết không thực sự làm rõ trong trường hợp nào điều này xảy ra.

Tôi đang tìm kiếm các ví dụ mã sẽ phá vỡ remove_filter, với phiên bản WordPress và PHP, và cuối cùng là thông tin liên quan khác, được cung cấp. Tôi nghĩ đoạn mã sau phải là một mẫu có thể sử dụng:

<?php
include('wp-load.php');

function filtertest_function($value)
{
    return 'Filtered';
}

var_dump(apply_filters('filtertest', 'Original value'));
add_filter('filtertest', 'filtertest_function');
var_dump(apply_filters('filtertest', 'Original value'));
remove_filter('filtertest', 'filtertest_function');
var_dump(apply_filters('filtertest', 'Original value'));

Điều này sẽ trả lại dự kiến:

string(14) "Original value"
string(8) "Filtered"
string(14) "Original value"

Tôi tin rằng lỗi xuất hiện trong một số trường hợp bộ lọc là một phần của một lớp hoặc nhiều bộ lọc được sử dụng. Tôi hiểu _wp_filter_build_unique_idcó liên quan . Vui lòng chỉ ra nơi mã nguồn đó là lỗi.

3
Jan Fabry

Vâng, đây là một chủ đề rất cụ thể liên quan đến vấn đề phát triển Wordpress. Tôi thực sự khuyên bạn nên theo dõi vé trac nếu bạn thích bài viết của tôi. Đó là điều tốt nhất bạn có thể làm tôi giả sử để tìm ra khi các vấn đề xảy ra cũng như cách khắc phục chúng về mặt kỹ thuật (nếu bạn không thích không sử dụng remove_filter() - trả lời).

Lấy từ quan điểm lý thuyết: Chỉ là các kiểu dữ liệu được sử dụng không được xử lý nghiêm ngặt để đảm bảo cùng chức năng trên tất cả các giá trị có thể (f (n)! = F (n)). Tóm lại: một thiết kế bị hỏng.

Điều này có nghĩa là nó sẽ luôn luôn phá vỡ trong thực tế? - Không! Chỉ là đôi khi nó có thể xảy ra. Và sau đó bạn bị mắc kẹt khi bạn cần dựa vào remove_filter().

Một gợi ý tốt hơn có thể là đây: Nếu bạn phát triển các plugin sử dụng hook như các phương thức lớp, hãy đảm bảo rằng plugin được thực thi khi cài đặt với PHP 5.2/5.3.

Hãy giữ các cuộc thảo luận kỹ thuật trong vé trac. Và nếu bạn thực sự quan tâm, vui lòng giúp khắc phục những thiếu sót của thiết kế hiện tại.

3
hakre

Như Denis đã nhận xét trên blog của Hakre, đây là một ví dụ rất cơ bản về vấn đề này.

function run_me_once() {
    remove_action( 'foobar', 'run_me_once' );
    echo 'test....';
}
add_action( 'foobar', 'run_me_once' );

function run_me2() {
    echo 'test2....';
}
add_action( 'foobar', 'run_me2', 11 );

echo '';
do_action( 'foobar' ); // test....
echo '';
echo '';
do_action( 'foobar' ); // test2....
echo '';

Trước khi chạy mã đó, hãy tự hỏi, bạn sẽ mong đợi kết quả như thế nào. Khi bạn đã quyết định kết quả sẽ như thế nào, hãy chạy nó và xem điều gì sẽ xảy ra.

1
t31os