bueltge
7/31/2012 - 8:25 AM

WordPress Plugin, that add a stick/unstick post link to the admin bar of WordPress.

WordPress Plugin, that add a stick/unstick post link to the admin bar of WordPress.

<?php
/**
 * Plugin Name: Stick/Unstick post via Admin bar
 * Plugin URI:  http://wordpress.stackexchange.com/q/58818/6035
 * Description: Add a stick/unstick post link to the admin bar of WordPress.
 * Version:     1.0.0
 * Author:      Frank Bültge
 * Author URI:  http://bueltge.de
 * License:     GPLv3
 */

// This file is not called by WordPress. We don't like that.
! defined( 'ABSPATH' ) and exit;

// works only, if the function is not active
if ( ! function_exists( 'fb_add_admin_bar_sticky' ) ) {
	
	/**
	 * Include function in WP
	 * Use template redirect for sure works of the redirect after change sticky flag
	 */
	add_action( 'template_redirect', 'fb_add_admin_bar_sticky' );
	/**
	 * Add item in Admin Bar of WP
	 * Create different strings for stick,unstick in this menu item
	 * Create the url param and call function to change flag on sticky
	 * 
	 * @param   void
	 * @return  void
	 */
	function fb_add_admin_bar_sticky() {
		global $wp_admin_bar;

		if ( ! is_super_admin() || ! is_admin_bar_showing() )
			return;

		$current_object = get_queried_object();
		if ( empty($current_object) )
			return;

		if ( ! empty( $current_object->post_type ) && 
			( $post_type_object = get_post_type_object( $current_object->post_type ) ) && 
			current_user_can( $post_type_object->cap->edit_post, $current_object->ID ) 
		) {

			// check, if an sticky post
			if ( is_sticky( get_the_ID() ) ) {
				$title = __('Unsticky');
				$link = '?unstick_post=true';
				$attr_title = __( 'Make this post unsticky' );
			} else {
				$title = __('Sticky');
				$link = '?stick_post=true';
				$attr_title = __( 'Make this post sticky' );
			}

			$wp_admin_bar->add_menu(
				array(
					'id' => 'sticky_post', 
					'title' => $title, 
					'href' => get_permalink() . $link, 
					'meta' => array(
						'title' => $attr_title,
						'onclick' => fb_stick_post( get_the_ID() )
					)
				)
			);
		}
	}
	
	/**
	 * Stick, unstick post, if the url param have the right value
	 * Redirect to the current post ID
	 * 
	 * @param   Integer  $post_id  ID of Post
	 * @return  void
	 */
	function fb_stick_post( $post_id ) {

		if ( isset($_GET['stick_post']) && 'true' == htmlspecialchars( $_GET['stick_post'] ) ) {
			stick_post( $post_id );
			wp_redirect( get_permalink( $post_id ) );
			exit();
		}

		if ( isset($_GET['unstick_post']) && 'true' == htmlspecialchars( $_GET['unstick_post'] ) ) {
			unstick_post( $post_id );
			wp_redirect( get_permalink( $post_id ) );
			exit();
		}
	}

} // end if function_exists