Created
January 11, 2011 18:25
-
-
Save mattwiebe/774853 to your computer and use it in GitHub Desktop.
Lessn More integration for WP
This file contains 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: Lessn Shortlinks | |
Description: Integrates WP's shortlink functionality with the <a href="http://lessnmore.net/">Lessn More</a> URL shortener. <em>Hasn't been tested with vanilla Lessn, but the API should be compatible.</em> (Edit the file manually to configure) | |
Version: 1.0 | |
Author: Matt Wiebe | |
Author URI: http://somadesign.ca/ | |
*/ | |
/** | |
* SD_Lessn class: integrates WP's shortlink functionality with the Lessn More | |
* URL shortener. | |
* | |
* @uses Lessn More @link http://lessnmore.net/ | |
* @author Matt Wiebe | |
* @license GPL 2 | |
* | |
**/ | |
class SD_Lessn { | |
const API_KEY = 'apikey'; // your Lessn API key | |
const LESSN_API_BASE = 'http://shorturl.com/-/'; // the API base for your Lessn install | |
const META_KEY = '_lessnd_url'; | |
private $allowed_types = array('post'); | |
function __construct() { | |
add_action('publish_post', array($this, 'get_lessnd_url'), 10, 1 ); | |
add_filter('get_shortlink', array($this, 'get_shortlink'), 10, 3 ); | |
} | |
public function add_post_type( $post_type = '' ) { | |
if ( $post_type ) | |
$this->allowed_types = array_merge( $this->allowed_types, (array) $post_type ); | |
} | |
public function get_lessnd_url( $post_id ) { | |
if ( 'publish' !== get_post_status($post_id) ) | |
return false; | |
if ( ! in_array( get_post_type($post_id), $this->allowed_types ) ) | |
return false; | |
if ( $url = get_post_meta( $post_id, self::META_KEY, true) ) | |
return $url; | |
$params = array( | |
'api' => self::API_KEY, | |
'url' => get_permalink($post_id) | |
); | |
$api_url = add_query_arg($params, self::LESSN_API_BASE); | |
$get = wp_remote_get($api_url); | |
if ( is_wp_error($get) ) | |
return false; | |
$lessnd_url = wp_remote_retrieve_body($get); | |
if ( $lessnd_url ) { | |
update_post_meta( $post_id, self::META_KEY, $lessnd_url ); | |
return $lessnd_url; | |
} | |
return false; | |
} | |
/** | |
* @param int $id A post or blog id. Default is 0, which means the current post or blog. | |
* @param string $contex Whether the id is a 'blog' id, 'post' id, or 'media' id. If 'post', the post_type of the post is consulted. If 'query', the current query is consulted to determine the id and context. Default is 'post'. | |
*/ | |
public function get_shortlink( $shortlink, $id, $context ) { | |
if ( 'query' == $context ) { | |
global $wp_query; | |
if ( is_singular() ) { | |
$context = 'post'; | |
$id = $wp_query->get_queried_object_id(); | |
} | |
} | |
if ( 'post' !== $context ) | |
return $shortlink; | |
// Try Lessn'd url. | |
if ( $try_lessn = $this->get_lessnd_url($id) ) | |
return $try_lessn; | |
// do_action('elog', $shortlink); | |
return $shortlink; | |
} | |
} | |
$sd_lessn = new SD_Lessn; | |
// uncomment line below to add support for the "page" post_type | |
// $sd_lessn->add_post_type('page'); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment