Làm rõ về bộ lọc và móc


7

Tôi sắp bắt đầu dự án WordPress đầu tiên của mình và tôi có nhiệm vụ di chuyển mã lõi tùy chỉnh ghi đè lõi vào các chức năng / tệp riêng biệt (theo cách này sẽ dễ duy trì hơn khi chúng tôi nâng cấp trong tương lai.

Tôi đã và đang làm nghiên cứu và có vẻ như add_filterapply_filterdo_actionadd_actiondường như là con đường để đi. Tôi vẫn không chắc chắn về cách họ làm việc mặc dù. Là những phương thức mà tôi sử dụng để ghi đè lên các phương thức cốt lõi? Tôi bối rối vì add_filtersử dụng từ này addkhi tôi cảm thấy nó giống với dòng trên replacehoặc overwrite(trừ khi tôi hiểu nhầm)

Tôi chỉ đọc câu trả lời đầu tiên cho điều này ( câu trả lời về tacos)

Vì vậy, có ba bước mà tác giả đã sử dụng để mô tả cách sử dụng add_filter:

Bước 1: giá trị tĩnh cho biến $ taco

<?php $taco = 'chicken'; ?>

Bước 2:

    <?php
    $taco = apply_filters( 'get_taco', 'chicken' );
    ?>

Bước 3:

    <?php
    add_filter( 'get_taco', 'my_special_order' );
    function my_special_order( $content ) {
        return 'shredded beef';
    }
    ?>

Vì vậy, trong tình huống này là apply_filterchỉ cần tạo ra một phương thức động khi đang bay và làm cho nó trả về chickenchuỗi? Hoặc giả định ở đây là có một phương thức WordPress cốt lõi được gọi get_tacovà việc sử dụng apply_filtersẽ giúp ghi đè bất cứ chức năng ban đầu nào?

Ngoài ra, bạn có thể chỉ apply_filtermột cái gì đó mà bạn đã add_filtered? Nói cách khác, sẽ apply_filter('get_taco');không hoạt động nếu tôi không xác định add_filter('get_taco', 'my_special_order');AND function my_special_order ($content) ...trước?

Tôi có đặt các bộ lọc này trong tệp tin.php không? Xin lỗi vì đã bắn phá bạn bằng những câu hỏi, tôi đến từ Ruby on Rails nên tôi hoàn toàn không biết gì về WordPress.

Câu trả lời:


7

Tôi bối rối vì add_filter sử dụng từ add khi tôi cảm thấy nó giống với dòng thay thế hoặc ghi đè hơn (trừ khi tôi hiểu nhầm)

Bạn đang hiểu lầm. Cả hai add_actionadd_filterchèn các hàm gọi lại vào một loại hàng đợi. Bạn có thể thêm nhiều cuộc gọi lại vào cùng một hook và chúng sẽ kích hoạt trong chuỗi được thêm vào trừ khi ưu tiên được đưa vào làm tham số thứ ba.

Vì vậy, trong tình huống này là application_filter chỉ tạo một phương thức động khi đang bay và làm cho nó trả về chuỗi gà?

apply_filters - lưu ý 's' - thực hiện ít nhiều tạo bộ lọc nhưng thông thường nó được truyền một biến không phải là một chuỗi và biến đó được chuyển đến hàm gọi lại sau đó thay đổi nó và trả về nó.

Bộ lọc 'sên' không phải là tên của các chức năng hoặc phương thức WordPress Core như một quy tắc mặc dù một số chức năng có các bộ lọc cùng tên. Ví dụ, the_content()gọi the_contentbộ lọc.

Móc thường không ghi đè toàn bộ chức năng, chỉ có các phần của chúng, nhưng có ngoại lệ và gần ngoại lệ.

Ngoài ra, bạn chỉ có thể áp dụng_filter một cái gì đó mà bạn đã thêm_filtered?

Không. Cách khác. Bạn chỉ có thể add_filtermột cái gì đó là apply_filtered. Bạn có thể sử dụng add_filter('whatever','abc');nhưng không có gì xảy ra nếu không có apply_filter('whatever',...nơi nào.

Khá nhiều điều tương tự áp dụng cho add_action/ do_actionnhưng các hành động là để làm mọi việc hơn là trả về các giá trị.

Các móc được thực hiện tại các thời điểm khác nhau trong tải trang và tại các vị trí khác nhau trong các chức năng và phương thức. Ví dụ, save_postthực thi gần cuối wp_insert_posttrong khi pre_get_poststhực thi gần đầu get_postsphương thức của WP_Querylớp. Những người khác thực hiện ở giữa tải trang và không phải trong một chức năng hoặc phương thức nào cả. Họ thực thi bất cứ khi nào có nhu cầu (như được xác định bởi các nhà phát triển) để thay đổi hoặc thêm thông tin hoặc chạy các chức năng khác, chuyển hướng một trang, v.v.

Thêm thông tin

Sự khác biệt giữa bộ lọc và móc hành động?


Vì vậy, khi chính xác các bộ lọc / hành động được thực hiện? Ở đầu / giữa / cuối của hàm? Đó có phải là thứ tôi có thể kiểm soát? Bằng cách thêm "hook", tôi chỉ nói "chạy hàm này trước khi hàm kết thúc nhưng sau khi mã trong hàm được chạy"?
bigpotato

@Edmund: xem bản chỉnh sửa
s_ha_dum

0

Tôi đoán bạn đã hiểu sai một chút.

Bộ lọc và hành động là các chức năng mà bạn "gán" cho hook. Ở nhiều nơi, các cuộc gọi do_actionhoặc apply_filterchức năng của WordPress . Tham số đầu tiên của các chức năng này là tên hook.

Vì vậy, ví dụ khi bạn nhìn thấy

do_action('blabla');

Điều đó có nghĩa là tất cả các hành động được gán cho hook 'blabla' sẽ được gọi.

add_filteradd_actionkhông ghi đè lên bất cứ điều gì. Nó thực hiện chính xác những gì nó nói - nó gán chức năng của bạn cho hook đã cho.

Vì vậy, Bước 2. của bạn áp dụng bộ lọc get_tacocho giá trị tĩnh chicken. Và bằng cách áp dụng bộ lọc, tôi có nghĩa là nó gọi tất cả các chức năng được gán để get_tacohook.

Bước 3. của bạn tạo chức năng mới my_special_ordervà gán cho nó get_tacohook. Vì vậy, bất cứ khi nào có apply_filter('get_taco')cuộc gọi, chức năng của bạn sẽ được gọi.

Nếu không có bộ lọc / hành động nào được gán cho hook đã cho, sẽ không có gì được thực hiện.

Bạn có thể đọc thêm về chủ đề này tại đây: http://codex.wordpress.org/Plugin_API

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.