Essential WordPress plugin hooks

Essential WordPress plugin hooks

Created:17 Jan 2017 11:57:41 , in  Web development

Essential WordPress hooks like init, wp_loaded, admin_init, admin_enqueue_scripts, admin_menu save_post, get_the_excerpt, wp_trim_excerpt and plugin_action_links below.

init

This hook is available for both frontend and backend. As it fires, some important WordPress functionality is loaded already. For example, user is authenticated. At this point you can handle POST or GET requests. This is also popular place to instantiate your plugin.


add_action('init',function(){
  // do stuff here  
});

wp_loaded

This hook, similarly to the previous one, is available for both frontend and admin. Once it fires, both plugins and template have been loaded, also widgets are initialized. You can use is_admin() boolean function to write admin area specific code for it.


add_action('wp_loaded',function(){
  // do stuff here  
});

admin_init

A hook available only for admin area. It's the first one that is run when this area is being accessed by user. Hence, it is a great place to register some admin area code or deal with user access control. This hook fires after init and wp_loaded hooks.


add_action('admin_init',function(){
  // do your admin area initialization stuff here   
});

admin_enqueue_scripts

This hooks is meant for frontend and it is used for adding both stylesheets and scripts to the head of html document. To add scripts / stylesheets to admin area you can use admin_enqueue_scripts hook. For login page you would use login_enqueue_scripts in similar manner.


add_action('wp_enqueue_scripts',function(){
  # enqueue styles.css of the active theme
  wp_enqueue_style( 'style-name', get_stylesheet_uri() );
  # enqeue /js/script.js of the active theme
  wp_enqueue_script( 'script-name', get_template_directory_uri() . '/js/script.js', array(), '1.0.0', true );  
});

admin_menu

This hooks is for admin pages only and fires before administration menu is loaded. It is used for registering a function that adds item(s) to Settings item list in admin. The function usually contains a call to add_options_page function in its definition to add page for plugin options.

Suppose you want to add Settings page to Hello Dolly plugin. Using admin_menu in your plugin main file you might do it like this:


add_action('admin_menu',function() {
  add_options_page( 
    'Dolly options', 
    'Dolly', 
    'manage_options', 
     basename(__FILE__),
     'dolly_options_page'
  );   
});

function dolly_options_page() {
	if ( ! current_user_can( 'manage_options' ) )  {
		wp_die( __( 'You do not have sufficient permissions to access this page.' ) );
	}
	echo '<div class="wrap">';
?>
  <form 
     name="<?php echo str_replace('.php','',plugin_basename(__FILE__))?>" 
     method="post" 
     action="<?php echo admin_url('options-general.php?page='.plugin_basename(__FILE__).'&amp;updated=true')?>">
     <?php wp_nonce_field('update-options'); ?>
     <p>Plugin options here </p>
     <?php submit_button(); ?>
  </form>
<?php 
	echo '</div>';
}

save_post

This action is for admin pages only and fires upon saving a post. It is a good place to make an update to custom post meta options for example ( If you need to change how the post will be saved to the database, there is filter called content_save_pre available ).


add_action('save_post', function(){
  // autosave in progress 
  if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) {
	return;
  }
  
  // 
  if ('post' == $_POST['post_type']) {
    // check if logged in user can edit posts
	if (!current_user_can('edit_post', $post_id)) {
		return;
	}
	// update my_option to new_value 
	update_post_meta($post_id, 'my_option', 'my_option_new_value'));
  }
});

the_content

This is a filter available for frontend. It gives you an opportunity to change content of a post or page after it is fetched from the database and before it is echoed to the page.


add_filter( 'the_content', function($content){
  // do something with $content here
  return $content;
}) 

get_the_excerpt

This filter is used on the frontend and makes it possible to filter post or page excerpt.


add_filter( 'get_the_excerpt', function($excerpt){
  // do something with $excerpt here
  return $excerpt;
}) 

wp_trim_excerpt

Another filter used on the frontend. It make it easy to change trimmed post excerpt before it is displayed.


add_filter('wp_trim_excerpt', 'my_fnc');
function my_fnc($text){
  return '<div class="auto_generated_excerpt">'.$text.'</div>'; 
}

plugin_action_links

This is a filter through which it is possible to modify a plugin default action links array. The links are placed under the plugin name on the plugin list page in admin. By default, the array contains links to 'Activate' or 'Deactivate' ( subject to the plugin being inactive or active ).

If you need extra link, perhaps for the plugin options page, you might add link to one in your plugin file as follows:


add_filter( 'plugin_action_links_' . plugin_basename(__FILE__), 'extra_plugin_links' );
function extra_plugin_links ( $links ) {
 $mylinks = array(
   '<a href="'.admin_url('options-general.php?page='.plugin_basename(__FILE__) ).'">Settings</a>',
 );
return array_merge( $links, $mylinks );
}

This post was updated on 06 Oct 2021 21:05:22

Tags:  php ,  wordpress 


Author, Copyright and citation

Author

Sylwester Wojnowski

Author of the this article - Sylwester Wojnowski - is a sWWW web developer. He has been writing computer code for the websites and web applications since 1998.

Copyrights

©Copyright, 2022 Sylwester Wojnowski. This article may not be reproduced or published as a whole or in parts without permission from the author. If you share it, please give author credit and do not remove embedded links.

Computer code, if present in the article, is excluded from the above and licensed under GPLv3.

Citation

Cite this article as:

Wojnowski, Sylwester. "Essential WordPress plugin hooks." From sWWW - Code For The Web . https://wojnowski.net.pl//main/index/essential-wordpress-plugin-hooks

Add Comment

Allowed BB Code - style tags: [b][/b], [i][/i], [code=text][/code],[code=javascript][/code],[code=php][/code],[code=bash][/code],[code=css][/code],[code=html][/code]


I constent to processing my data given through this form for purposes of a reply by the administrator of this website.

Recent Comments

Nobody has commented on this post yet. Be first!