2009-09-06 27 views
15

Tôi đang cố gắng lọc TẤT CẢ đầu ra của tiện ích thông qua một bộ lọc đơn giản, nhưng không thể tìm thấy bất kỳ móc nối nào và hy vọng sẽ được chỉ đúng hướng. Hoặc có thể những nỗ lực của tôi thậm chí không thể?Móc nối WordPress (hoặc thanh bên) có tồn tại không?

bộ lọc đơn giản tôi là một cái gì đó như thế này:

function clean_widget_output($input) { 
    return str_replace(array("\t", "\n", "\r"), '', $input); 
} 

add_[FILTER OR ACTION]('need_a_hook', 'clean_widget_output', 99); 

Bất kỳ ý tưởng? Tôi khá mới với PHP, nhưng tôi có thể đi lại.

+0

Tôi không chắc chắn khi họ giới thiệu bộ lọc widget_text, có thể họ không có nó trong ' 09 khi câu hỏi này ban đầu được hỏi. Xem mã mẫu của tôi bên dưới trong câu trả lời của tôi cho một ví dụ làm việc hoàn chỉnh (và rất đơn giản). –

Trả lời

7

Điều này đã được sinh ra từ nhu cầu/mong muốn làm sạch HTML khủng khiếp của thần được spewed bởi widget WordPress '. Tôi yêu những gì họ làm, nhưng một số đầu ra khiến tôi khóc.

Câu trả lời ngắn gọn là output buffering vì tôi không thể tìm thấy bất kỳ tiện ích con hoặc thanh bên nào.

Câu trả lời dài là:

function tidy_sidebar($sidebar_name_or_id) 
{ 
    ob_start(); 

    $bool = dynamic_sidebar($sidebar_name_or_id); 

    if ($bool) 
    { 
     $str = ob_get_contents(); 
     $str = 'do cleanup stuff...'; 
    } 
    else 
    { 
     $str = ''; 
    } 
    ob_end_clean(); 

    return $str; 
} 

Sau đó gọi echo tidy_sidebar('sidebar-name-or-id'); từ chủ đề của bạn.

+0

Giờ đây, bạn có thể kiểm soát trình bao bọc tiện ích con và tiêu đề tiện ích html khi đăng ký một thanh bên để không chắc chắn số tiền này là cần thiết. Nếu bạn không thích một widget thì tốt nhất là viết lại nó với đầu ra bạn thích. Hãy xem API widget (http://codex.wordpress.org/Widgets_API) và hàm register_sidebar (http://codex.wordpress.org/Function_Reference/register_sidebar) – roborourke

4

có rất nhiều móc cho các widget wordpress không được ghi chép lại. Các codex wordpress không liệt kê chúng, vì lý do nào (chẳng hạn như các móc có thể thay đổi trong tương lai và sẽ phá vỡ bất ngờ với các bản cập nhật và phiên bản mới) ... vì vậy hãy sử dụng chúng một cách hết sức thận trọng.

để tìm hiểu những gì họ đang có, có ít nhất 2 nơi để xem xét:

<wordpress install directory>/wp-includes/default-filters.php 
<wordpress install directory>/wp-includes/default-widgets.php 

chứa trong hai tập tin được một danh sách khá tốt của tất cả các móc sử dụng wordpress.

Một ví dụ sẽ là một bộ lọc cho các widget cũng widget_title

một lần nữa, sử dụng các một cách thận trọng, họ đang không được bảo đảm để làm việc qua phiên bản cụ thể của mã bạn đang tìm kiếm.

7

Tôi gặp vấn đề tương tự và sau khi xem qua số list of all WordPress filter hooks của Adam Brown, thấy rằng móc tôi cần không tồn tại (widget_title, như đề cập pxl), nhưng không có móc để lấy tất cả đầu ra của tiện ích con. Tôi nghĩ tôi sẽ giải thích về giải pháp đã làm việc cho tôi. Về mặt lý thuyết, móc widget_title sẽ ảnh hưởng đến tất cả các tiện ích trên blog của bạn, nhưng tôi chắc chắn một số tiện ích của bên thứ ba bỏ qua để bao gồm dòng mã cần thiết để áp dụng bất kỳ bộ lọc tiêu đề nào, vì vậy nó không dễ dàng. Nó làm việc cho tôi, tuy nhiên, và nó có thể được sử dụng để áp dụng 'shortcode' tùy chỉnh (chính xác hơn, trong trường hợp này là 'longcode') hoặc các cú pháp cho tiêu đề widget của bạn. Ví dụ: tôi muốn thỉnh thoảng đưa mã html vào tiêu đề tiện ích của mình, nhưng theo mặc định, tất cả html đều bị loại bỏ. Vì vậy, để có thể thêm những thứ như <em> thẻ vào văn bản trong một số chức danh của tôi, tôi đã chọn một cú pháp tùy chỉnh: [[ thay vì < & ]] thay vì > (cho ex, [[em]][[/em]]) và sau đó tạo ra một hàm trong chức năng của chủ đề của tôi.tập tin php để xử lý mà cú pháp tùy chỉnh và thay thế bằng html tương đương:

function parse_html_widget_title($text) { 
    return str_replace(array('[[', ']]'), array('<', '>'), $text); 
} 

Sau đó, tôi đã thêm một dòng dưới nó để thêm các chức năng như một bộ lọc:

add_filter('widget_title', 'parse_html_widget_title', 11); // 11 is one above the default priority of 10, meaning it will occur after any other default widget_title filters 

Chức năng add_filter/apply_filter tự động chuyển nội dung đang được lọc làm tham số đầu tiên cho hàm được chỉ định làm bộ lọc, vì vậy đó là tất cả những gì bạn cần làm.

Để làm điều gì đó tương tự cho đầu ra chính của tiện ích, bạn sẽ cần xem tất cả các tiện ích của mình để xem móc nào họ sử dụng và xác minh rằng chúng có bộ lọc cho đầu ra chính của chúng, sử dụng add_filter() cho mỗi hook bạn tìm thấy với chức năng gọi lại tùy chỉnh của mình (ví dụ: widget_text cho đầu ra của Tiện ích văn bản hoặc get_search_form cho biểu mẫu tìm kiếm [bạn có thể thấy nó trong wp-includes/general-template.php, tại hàm get_search_form()]). Vấn đề là một số widget được tạo động không có móc (như widget Meta), đó là lý do tại sao giải pháp đệm đầu ra mà Jeff cung cấp là giải pháp linh hoạt nhất, mặc dù không lý tưởng.

+0

CẢM ƠN BẠN !! Tôi đã tìm kiếm một cái gì đó như thế này cho lứa tuổi - bạn là một phao cứu sinh. :) – Michelle

2

Tôi không chắc chắn khi nào họ giới thiệu bộ lọc widget_text, có thể họ không có nó trong '09 khi câu hỏi này ban đầu được hỏi, nhưng vì nó hiện có, và vì lợi ích của bất kỳ ai có luồng lưu trữ này như Tôi đã làm từ google và chỉ xảy ra để đọc đủ xa xuống để xem câu trả lời này, nó bây giờ thực sự khá đơn giản:

function my_widget_filter($content) 
{ 
    // manipulate $content as you see fit 
    return $content; 
} 

add_filter('widget_text', 'my_widget_filter', 99); 
Các vấn đề liên quan