Вызов применения фильтров к недокументированным крючкам


Я пытался научиться писать плагины, и я подумал, что лучшим способом было бы посмотреть на другие плагины.

Я взглянул на эту и первые строки

/**
 * Plugin Name: Media Library Categories
 * Plugin URI: http://wordpress.org/plugins/wp-media-library-categories/
 * Description: Adds the ability to use categories in the media library.
 * Version: 1.4.1
 * Author: Jeffrey-WP
 * Author URI: http://codecanyon.net/user/jeffrey-wp/?ref=jeffrey-wp
 */

/** register taxonomy for attachments */
function wpmediacategory_init() {
    // Default taxonomy
    $taxonomy = 'category';
    // Add filter to change the default taxonomy
    $taxonomy = apply_filters( 'wpmediacategory_taxonomy', $taxonomy );
    register_taxonomy_for_object_type( $taxonomy, 'attachment' );
}
add_action( 'init', 'wpmediacategory_init' );

Есть такая строка:

$taxonomy = apply_filters( 'wpmediacategory_taxonomy', $taxonomy 

Этого я не понимаю. Я просмотрел документацию Wordpress и не нашел крючка под названием wpmediacategory_taxonomy. Кроме того, из-за названия, я уверен, что это что-то связанное с плагином. Так как же именно это работает? Это что, специальный крючок? Где это было определено?

Author: Enrique Moreno Tent, 2014-02-19

2 answers

Использование крючка очень, очень просто. Для создания крючка используйте apply_filters или do_action.

Первый параметр - это имя крючка, остальные параметры - аргументы.

У вас должно быть имя крючка, но другие аргументы необязательны. У вас может быть, насколько я знаю, столько аргументов, сколько вам заблагорассудится. Например:

$t = apply_filters('test_filter',$a,$b,$c,$d);

Этот акт "применения" фильтра и есть то, что "запускает" его. В этой строке выполняется фильтр. И вы можете запускать набор фильтров несколько раз, а не только однажды.

Чтобы добавить фильтр, вы создаете обратный вызов (замыкания в порядке) и добавляете его в крючок. Например:

function test_callback($a,$b,$c,$c) {
  // do stuff
  return $a;
}
add_filter('test_filter','test_callback',10,4);

Четвертый аргумент в количестве необходимых вам аргументов. Без этого вы получите только первый аргумент, переданный вашему обратному вызову.

Действия не возвращают данные, хотя вы можете echo это сделать.

Фильтры должны возвращать данные, хотя это и не обязательно, но знайте, что вы делаете, если вы этого не делаете. В частности, вы должны вернуть данные из первого параметра и в том же формате - то есть, если вы получаете строку, возвращайте строку. Вы не должны echo получать данные из фильтра, так как это обычно вызывает очень странные эффекты.

 2
Author: s_ha_dum, 2014-02-20 01:09:07

Вы почти сами дали ответ.

Apply_filters, как следует из названия, применяет все фильтры, зарегистрированные для этого фильтра. Это может быть фильтр WordPress по умолчанию, но также, как в данном случае, пользовательский фильтр из плагина.

Это вызывает только любые зарегистрированные обратные вызовы. Добавление фильтров выполняется с помощью add_filter()

Более подробную информацию можно найти в Кодексе: применение фильтров

 1
Author: kraftner, 2014-02-19 23:26:35