I have some actions like this
function simple_notification() {
echo '<div>This is a notification</div>';
}
add_action( 'site_notices', 'simple_notification' );
function simple_notification2() {
echo '<div>This is a notification</div>';
}
add_action( 'site_notices', 'simple_notification2' );
function simple_notification3() {
echo '<div>This is a notification</div>';
}
add_action( 'site_notices', 'simple_notification3' );
Now i’m displaying those action by calling do_action
in my template
<?php do_action('site_notices'); ?>
I would like to display notice count near a menu link called notifications
Can anyone tell me how to calculate it?
Update:
As you can see, three notices displayed when i use do_action('site_notices');
So I want to display in the menu like notifications (3)
2 Answers
Don’t ask me way but i actually have a function to count hooked functions to a tag
/**
* count_hooked_functions
* @author Ohad Raz
* @param string $tag hook name as string
* @return int the number of hooked functions to a specific hook
*/
function count_hooked_functions($tag = false){
global $wp_filter;
if ($tag){
if (isset($wp_filter[$tag])){
return count($wp_filter[$tag]);
}
}
return 0;
}
but this is an example where a single class would be a much better solution instead of writing the same code over and over something like:
/**
* my_site_notices
* @author Ohad Raz
*/
class my_site_notices
{
public $notices = array();
public $has_notices = false;
/**
* __construct class constructor
* @author Ohad Raz
*/
function __construct(){
add_action('site_notices',array($this,'simple_notification'));
}
/**
* simple_notification
* a funciton which prints the added notification at the site_notices action hook
* @author Ohad Raz
* @access public
* @return Void
*/
public function simple_notification(){
if ($this->has_notices){
foreach ($notices as $n){
echo '<div>'.$n.'</div>';
}
}
}
/**
* getCount
* @author Ohad Raz
* @access public
* @return int the number of notifications
*/
public function getCount(){
return count($this->notices);
}
/**
* add
* @param string $n a notification to add
* @author Ohad Raz
* @access public
* @return void
*/
public function add($n = ''){
$this->notices[] = $n;
}
}//end class
/**
* Usage:
*/
global $my_notices;
$my_notices = new my_site_notices();
//to add a notification
$my_notices->add("this is my first notification");
$my_notices->add("this is my 2nd notification");
$my_notices->add("this is my 3rd notification");
//get the count
$count = $my_notices->getCount();