Upgrade to Pro — share decks privately, control downloads, hide ads and more …

WordPress: Action & Filter Hooks

WordPress: Action & Filter Hooks

Qué es, diferencias y formas de uso de los Action Hooks y los Filter Hooks en WordPress

Braulio Aquino

October 25, 2014
Tweet

More Decks by Braulio Aquino

Other Decks in Programming

Transcript

  1. ACTION & FILTER HOOKS
    Braulio Aquino

    View Slide

  2. BRAULIO
    AQUINO
    orange612.com
    @braulioaquino

    View Slide

  3. “Los Hooks son lo que permiten hacer algo cada
    vez que WordPress haga alguna otra cosa”

    View Slide

  4. ACTION
    Realizan funciones cuando se
    ejecuta un evento.
    FILTER
    Realizan modificaciones a funciones
    o reemplaza data.

    View Slide

  5. ACTION
    add_action('hook','función',10,1);
    FILTER
    add_filter('hook','función',10,1);

    View Slide

  6. - ejemplo -
    Agregar custom post types cuando
    WordPress termine de cargar.
    ACTION HOOK

    View Slide

  7. Agregar custom post types cuando
    WordPress termine de cargar.
    add_action( 'init', 'nuevos_post_type' );
    function nuevos_post_type() {
    register_post_type(
    'libros', array(
    'labels' => array('name' => 'Libros'),
    'rewrite' => array('slug' => 'libro'),
    'has_archive' => TRUE
    )
    );
    }

    View Slide

  8. - ejemplo -
    Mostrar contenido por defecto si el
    contenido no existe.
    FILTER HOOK

    View Slide

  9. Mostrar contenido por defecto si el
    contenido no existe.
    add_filter('the_content','def_content',10,1); 

    function def_content($content) {
    $default_content = 'Mi contenido \o/';
    if (!isset($content) || trim($content)=='')
    {
    return $default_content;
    }
    return $content;
    }

    View Slide

  10. - ejemplo -
    Cambiar la url en la página de
    resultados de búsqueda.
    ACTION HOOK

    View Slide

  11. Cambiar la url en la página de
    resultados de búsqueda.
    add_action( 'init', 'change_url' );
    function change_url() {
    $GLOBALS['wp_rewrite'] -> search_base='mas';
    }

    View Slide

  12. - ejemplo -
    Cambiar la cantidad de palabras por
    defecto del excerpt.
    FILTER HOOK

    View Slide

  13. Cambiar la cantidad de palabras por
    defecto del excerpt.
    add_filter('excerpt_length','custom_excerpt',99);
    function custom_excerpt( $length ) {
    return 20;
    }

    View Slide

  14. - ejemplo -
    Ocultar la barra de administración de
    WordPress al cargar el tema.
    ACTION HOOK

    View Slide

  15. Ocultar la barra de administración de
    WordPress al cargar el tema.
    add_action('after_setup_theme','remove_bar');
    function remove_bar() {
    show_admin_bar( false );
    }

    View Slide

  16. - ejemplo -
    Agregar un nuevo campo al lado de
    edición rápida en la lista de entradas.
    FILTER HOOK

    View Slide

  17. Agregar un nuevo campo al lado de
    edición rápida en la lista de entradas.
    add_filter('row_actions','my_action', 10, 2);
    function my_action( $actions, $post ) {
    if ( $post->post_type == ‘post' ) {
    $actions['in_google'] =
    'Google';
    }
    return $actions;
    }

    View Slide

  18. - ejemplo -
    Redirección al login cuando visitantes
    quieran ver una página privada.
    ACTION HOOK

    View Slide

  19. Redirección al login cuando visitantes
    quieran ver una página privada.
    add_action('template_redirect','private_redirect');
    function private_redirect() {
    if( is_page('secreto') && !is_user_logged_in() )
    {
    wp_redirect( home_url( '/entrar/' ) );
    exit();
    }
    }

    View Slide

  20. - ejemplo -
    Agregar nuevas clases al body en cada
    WordPress de multisitios.
    FILTER HOOK

    View Slide

  21. Agregar nuevas clases al body en cada
    WordPress de multisitios.
    add_filter('body_class', 'multisite_classes');
    function multisite_classes( $classes ) {
    $id = get_current_blog_id();
    $slug = strtolower(trim(get_bloginfo('name')));
    $slug = str_replace(' ', '-', $slug);
    $classes[] = $slug;
    $classes[] = 'site-id-'.$id;
    return $classes;
    }

    View Slide

  22. - ejemplo -
    Enviar notificación por correo al
    usuario cuando se le cambia de role.
    ACTION HOOK

    View Slide

  23. Enviar notificación por correo al
    usuario cuando se le cambia de role.
    add_action('set_user_role','role_update',10,2); 

    function role_update($user_id,$new_role) {
    $user_info = get_userdata($user_id);
    $to = $user_info->user_email;
    $subject = 'Tu role cambió';
    $message = 'Hola '.$user_info->display_name.

    ' tu role en tal sitio cambió,
    ahora eres '.$new_role;
    wp_mail($to, $subject, $message);
    }

    View Slide

  24. - ejemplo -
    Cambiar el mensaje de pie de página
    en el wp-admin
    FILTER HOOK

    View Slide

  25. Cambiar el mensaje de pie de página
    en el wp-admin
    add_filter('admin_footer_text', 'footer_admin');
    function footer_admin () {
    echo 'Desarrollado por

    Orange612

    usando

    WordPress';
    }

    View Slide

  26. ACTION
    - Lista de hooks -

    codex.wordpress.org/Plugin_API/Action_Reference
    FILTER
    - Lista de hooks -

    codex.wordpress.org/Plugin_API/Filter_Reference

    View Slide

  27. ACTION
    • init
    • wp_head
    • wp_footer
    • admin_init
    • after_setup_theme
    • template_redirect
    • comment_post
    • set_user_role
    • admin_notices
    • publish_post
    • switch_theme
    • delete_user
    • password_reset
    • add_meta_boxes

    View Slide

  28. FILTER
    • wp_title
    • post_row_actions
    • single_template
    • get_the_excerpt
    • excerpt_length
    • excerpt_more
    • allowed_redirect_hosts
    • login_message
    • post_updated_messages
    • the_content
    • template_include
    • the_category
    • title_save_pre
    • wp_mail_content_type

    View Slide

  29. ACTION
    do_action('hook','función');
    FILTER
    apply_filters('hook','función');

    View Slide

  30. ACTION
    remove_action('hook','función',10);
    FILTER
    remove_filter('hook','función',10);

    View Slide

  31. BRAULIO
    AQUINO
    braulioaquino.com
    orange612.com
    @braulioaquino
    [email protected]
    speakerdeck.com/braulioaquino

    View Slide