add_filter()
es una función que acompaña a apply_filters()
. Antes de ejecutar apply_filters
para un determinado filtro (el argumento $tag
en add_filter()
), puede usar add_filter
para registrar un filtro para una etiqueta. Cuando apply_filters()
se ejecuta con ese nombre de etiqueta, llama a todos los filtros registrados en orden. Los filtros se utilizan para pasar datos a través de funciones para la manipulación. Por ejemplo, uno que a menudo me encuentro usando es el filtro wp_list_pages. Lo uso para eliminar saltos de línea de la lista de páginas. Así que aquí es como funciona:
Primero definir una función que toma un parámetro y lo devuelve después de trabajar con él:
function my_list_pages_filter($pages){
$pages = preg_replace(array("\n","\r"), '', $pages);
return $pages;
}
Luego agregar el gancho filtro: add_filter ('wp_list_pages', 'my_list_pages_filter ');
add_filter
dice a WordPress "Cuando se llama a la función apply_filters
con el primer argumento siendo 'wp_list_pages', llame al my_list_pages_filter
." Los filtros deben enviar al menos un valor (de cualquier tipo: cadena, matriz, entero, etc.) y esperan que la función devuelva un valor.
Proporcionan una forma de manipular la entrada antes de devolverla.
do_action
es un gancho completamente diferente. Con el fin de enviar información a su función de filtro, haga lo siguiente (tomado de tu ejemplo):
<div id="content" <?php $class='post post_content'; echo apply_filters('my_custom_classes', $class); ?>>
Y luego en sus funciones.archivo PHP, añadir lo siguiente:
add_filter('my_custom_classes','my_custom_classes_function');
function my_custom_classes_function($classes){
$output 'class="'. $classes.'"';
return $output;
}
Eso es un uso bastante rudimentario de filtros, pero es un comienzo. Realmente se puede tener una idea de lo que puede hacer con los filtros con el mismo ejemplo con algunas mejoras:
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;
}
Creo que tut solo es más confuso si ya tiene problemas para entender los filtros y las acciones. ¿Puedes explicar el contexto en el que intentas usarlos? Entonces podemos responder más específicamente a sus necesidades, en lugar de simplemente repetir el Codex. – TheDeadMedic