wordpress过滤文档?试图理解add_filter()

chr*_*lee 9 wordpress wordpress-theming filter

我多次阅读文档,并且很难弄清楚函数的用途.在查看文档后,我也越来越困惑,查看源代码.

add_filter($tag, $hook, $priority, $args);

在我看来,新函数扩展了父函数.让我感到困惑的是钩子的哪些部分被覆盖了.在文档的一些示例中,我看到一些变量被替换为新$ tag中的$ args.

我几乎完全理解这一切:http://www.andrewnacin.com/2010/05/18/rethinking-template-tags-in-plugins/

但后来我无法弄清楚你如何传递参数,最终会被覆盖.

提前致谢.

Joh*_*och 12

add_filter()是一个伴侣功能apply_filters().在apply_filters运行某个过滤器($tag参数中add_filter())之前,您可以使用add_filter注册标记的过滤器.当apply_filters()使用该标记名称执行时,它会按顺序调用所有已注册的过滤器.过滤器用于通过函数传递数据以进行操作.例如,我经常发现自己使用的是wp_list_pages过滤器.我用它来删除页面列表中的换行符.所以这是它的工作原理:

首先,我定义一个函数,它接受一个参数并在使用它后返回它:

function my_list_pages_filter($pages){
  $pages = preg_replace( array("\n","\r"), '', $pages );
  return $pages;
}
Run Code Online (Sandbox Code Playgroud)

然后我添加了filter hook:add_filter('wp_list_pages','my_list_pages_filter');

add_filter告诉WordPress"当apply_filters调用函数时,第一个参数是'wp_list_pages',调用my_list_pages_filter." 过滤器必须至少发送一个值(任何类型:字符串,数组,整数等),并且它们希望函数返回一个值.

它们为您提供了一种在发送之前操纵输入的方法.

do_action是一个完全不同的钩子.要将信息发送到过滤器功能,请执行以下操作(从您的示例中获取):

<div id="content" <?php $class='post post_content'; echo apply_filters('my_custom_classes', $class); ?>>
Run Code Online (Sandbox Code Playgroud)

然后在你的functions.php文件中添加:

add_filter('my_custom_classes','my_custom_classes_function');
function my_custom_classes_function($classes){
  $output 'class="'. $classes.'"';
  return $output;
}
Run Code Online (Sandbox Code Playgroud)

这是一个非常基本的过滤器使用,但它是一个开始.您可以通过相同的示例以及一些增强功能真正了解使用过滤器可以执行的操作:

function my_custom_classes_function($classes){
  $classes = explode( ' ', $classes );
  if(is_home())
    $classes[] = 'home_content';
  if(is_single())
    $classes[] = 'single_content';
  if(is_page())
    $classes[] = 'page_content';
  if(is_tag())
    $classes[] = 'tag_content';
  $output 'class="'. implode( ' ', $classes ) .'"';
  return $output;
}
Run Code Online (Sandbox Code Playgroud)