Blog

Hooks: Actions and Filters
Posted on June 24, 2018 in WordPress by Matt Jennings

Hooks

Hooks are functions in WordPress that allow me to call others functions I create at specific times. There are two types of hooks in WordPress:

  1. Actions
  2. Filters

Why are Hooks Needed

  1. So I don’t mess with the WordPress core.
  2. So I modify/add functionality to the WordPress core.

Action

A WordPress function that is executed at specific points throughout the WordPress core.

Generic Action add_actions();

add_action($tag, $function_to_add, $priority, $accepted_args);

More Info on add_action();

See more info on add_action();.

Example Actions

// Enable dashicons if the front end
function load_dashicons_front_end() {
    wp_enqueue_style( 'dashicons' );
}

// Register dashicons in the front end
add_action( 'wp_enqueue_scripts', 'load_dashicons_front_end' );

// Registers custom shortcodes
function cttq_blockquote_register_shortcodes() {
    add_shortcode('tweetquote', 'cttq_blockquote_shortcode');
}

function cttq_blockquote_shortcode( $attributes, $content = null ) {

    // Save ech attribute's values to its own variable.
    // Below are attribute values for hashtags and CSS styles
    extract( shortcode_atts( array(
        'hashtags'          => '',
        'nostyle'           => esc_attr( get_option('cttq_style_option') )
    ),  $attributes ) );

    // Get full URL
    global $wp;
    $current_url = home_url(add_query_arg(array(),$wp->request));

    // setup output variable
    $output = '<a href="#" ' . (($nostyle === "No Style") ? '' : 'style="text-decoration: none;"') . ' onclick="window.open(\'https://twitter.com/intent/tweet?text=' . str_replace(' ', '%20',$content) . '%20' . str_replace(' ', '%20', str_replace('#', '%23', $hashtags)) . '%20' . str_replace('/', '%2F', str_replace(':', '%3A', $current_url)) . '\', \'_blank\', \'width=500,height=500\'); return false;">';
        $output .= '<blockquote' . (($nostyle === "No Style") ? '' :  ' style="display: table; width: 100%;"') .'>';
            $output .= '<div' . (($nostyle === "No Style") ? '' :  ' style="display: table-cell"') . '>';
                $output .= '<span class="dashicons dashicons-format-quote"' . (($nostyle === "No Style" ) ? '' : 'style="color: #1da1f2; font-size: 45px; padding-right: 65px; display: block; float: left; height: 50px;"') . '></span>';
            $output .= '</div>';
            $output .= '<div>';
                // If $content exists assign $output variable
                if(strlen($content)):
                    $output .= '<p ' . (($nostyle === "No Style") ? '' : 'style="display: inline; padding-top: 10px; font-size: 25px; font-style: normal; color: #000;" onmouseover="this.style.color=\'#1da1f2\'" onmouseout="this.style.color=\'#000\'"') . '>' . $content . '</p>';
                endif;
                $output .= '<p ' . (($nostyle === "No Style") ? '' : 'style="color: #1da1f2; font-style: normal;"') . '><i class="dashicons dashicons-twitter"' . (($nostyle === "No Style") ? '' : 'style="color: #1da1f2; font-size: 25px; display: block; float: left; padding-right: 30px;"' ) .'></i>Click to Tweet</p>';
            $output .= '</div>';
        $output .= '</blockquote>';
    $output .= '</a>';

    // return our results/html
    return $output;
}

// Registers all custom shortcodes on init
add_action('init', 'cttq_blockquote_register_shortcodes');

// Registers admin menu
add_action('admin_menu', 'cttq_admin_menu');

// register custom plugin admin menu
function cttq_admin_menu() {
    /* main menu */
    $top_menu_item = 'cttq_dashboard_admin_page';

    add_menu_page('', 'Click to Tweet Quote', 'manage_options', $top_menu_item, $top_menu_item, 'dashicons-twitter');
}

// Registers admin menu
add_action('admin_menu', 'cttq_admin_menu');

Filters

Filters are WordPress functions that allow us to get and modify WordPress data before sending it to the database/browser using custom functions.

Generic add_filter();

add_filter($tag, $function_to_add, $priority, $accepted_args);

More Info on add_filter();

See more info on add_filter();.

Example Filter

function my_tiny_mce_before_init( $init_array ) {
  $init_array['body_class'] = 'entry_content';
  return $init_array;
}

add_filter('tiny_mce_before_init', 'my_tiny_mce_before_init');

Leave a Reply