-
-
Save BurconOutfitters/0904b9833a5dc9764921fec29e0b85e5 to your computer and use it in GitHub Desktop.
WordPress Admin Pointers : based on code by Stephen Harris, Tim D and Frank Bueltge. See: http://stackoverflow.com/a/19328125/1287812 and http://brasofilo.com/como-incluir-admin-pointers-en-tu-theme-o-plugin
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Plugin Name: My Amdin Pointers | |
* Plugin URI: https://gist.github.com/brasofilo/6947539 | |
* Version: 0.1 | |
* Author: Rodolfo Buaiz | |
* Author URI: http://brasofilo.com | |
* Licence: GPLv3 | |
* | |
* Based on | |
* - http://wp.tutsplus.com/tutorials/integrating-with-wordpress-ui-admin-pointers/ | |
* - https://github.com/rawcreative/wp-help-pointers | |
* - http://wpengineer.com/2272/how-to-add-and-deactivate-the-new-feature-pointer-in-wordpress-3-3/ | |
* | |
*/ | |
add_action( 'admin_enqueue_scripts', 'myHelpPointers' ); | |
function myHelpPointers() | |
{ | |
$pointers = array( | |
array( | |
'id' => 'xyz123', | |
'screen' => 'page', | |
'target' => '#wp-content-media-buttons', | |
'title' => 'My ToolTip', | |
'content' => 'My tooltips Description', | |
'position' => array( | |
'edge' => 'top', // top, bottom, left, right | |
'align' => 'left' // top, bottom, left, right, middle | |
) | |
), | |
array( | |
'id' => 'xyz124', | |
'screen' => 'settings_page_options-general_my_plugin', | |
'target' => '#my-plugin-element', | |
'title' => 'Show plugin help', | |
'content' => 'Enable to see all the help texts or disable to view it tight.', | |
'position' => array( | |
'edge' => 'right', | |
'align' => 'right' | |
) | |
), | |
); | |
new B5F_Admin_Pointer( $pointers ); | |
} | |
class B5F_Admin_Pointer | |
{ | |
public $screen_id; | |
public $valid; | |
public $pointers; | |
/** | |
* Register variables and start up plugin | |
*/ | |
public function __construct( $pointers = array( ) ) | |
{ | |
if( get_bloginfo( 'version' ) < '3.3' ) | |
return; | |
$screen = get_current_screen(); | |
$this->screen_id = $screen->id; | |
$this->register_pointers( $pointers ); | |
add_action( 'admin_enqueue_scripts', array( $this, 'add_pointers' ), 1000 ); | |
add_action( 'admin_print_footer_scripts', array( $this, 'add_scripts' ) ); | |
} | |
/** | |
* Register the available pointers for the current screen | |
*/ | |
public function register_pointers( $pointers ) | |
{ | |
$screen_pointers = null; | |
foreach( $pointers as $ptr ) | |
{ | |
if( $ptr['screen'] == $this->screen_id ) | |
{ | |
$options = array( | |
'content' => sprintf( | |
'<h3> %s </h3> <p> %s </p>', | |
__( $ptr['title'], 'plugindomain' ), | |
__( $ptr['content'], 'plugindomain' ) | |
), | |
'position' => $ptr['position'] | |
); | |
$screen_pointers[$ptr['id']] = array( | |
'screen' => $ptr['screen'], | |
'target' => $ptr['target'], | |
'options' => $options | |
); | |
} | |
} | |
$this->pointers = $screen_pointers; | |
} | |
/** | |
* Add pointers to the current screen if they were not dismissed | |
*/ | |
public function add_pointers() | |
{ | |
if( !$this->pointers || !is_array( $this->pointers ) ) | |
return; | |
// Get dismissed pointers | |
$get_dismissed = get_user_meta( get_current_user_id(), 'dismissed_wp_pointers', true ); | |
$dismissed = explode( ',', (string) $get_dismissed ); | |
// Check pointers and remove dismissed ones. | |
$valid_pointers = array( ); | |
foreach( $this->pointers as $pointer_id => $pointer ) | |
{ | |
if( | |
in_array( $pointer_id, $dismissed ) | |
|| empty( $pointer ) | |
|| empty( $pointer_id ) | |
|| empty( $pointer['target'] ) | |
|| empty( $pointer['options'] ) | |
) | |
continue; | |
$pointer['pointer_id'] = $pointer_id; | |
$valid_pointers['pointers'][] = $pointer; | |
} | |
if( empty( $valid_pointers ) ) | |
return; | |
$this->valid = $valid_pointers; | |
wp_enqueue_style( 'wp-pointer' ); | |
wp_enqueue_script( 'wp-pointer' ); | |
} | |
/** | |
* Print JavaScript if pointers are available | |
*/ | |
public function add_scripts() | |
{ | |
if( empty( $this->valid ) ) | |
return; | |
$pointers = json_encode( $this->valid ); | |
echo <<<HTML | |
<script type="text/javascript"> | |
//<![CDATA[ | |
jQuery(document).ready( function($) { | |
var WPHelpPointer = {$pointers}; | |
$.each(WPHelpPointer.pointers, function(i) { | |
wp_help_pointer_open(i); | |
}); | |
function wp_help_pointer_open(i) | |
{ | |
pointer = WPHelpPointer.pointers[i]; | |
$( pointer.target ).pointer( | |
{ | |
content: pointer.options.content, | |
position: | |
{ | |
edge: pointer.options.position.edge, | |
align: pointer.options.position.align | |
}, | |
close: function() | |
{ | |
$.post( ajaxurl, | |
{ | |
pointer: pointer.pointer_id, | |
action: 'dismiss-wp-pointer' | |
}); | |
} | |
}).pointer('open'); | |
} | |
}); | |
//]]> | |
</script> | |
HTML; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment