Skip to content

Instantly share code, notes, and snippets.

@mattwiebe
Created January 11, 2011 18:25
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save mattwiebe/774853 to your computer and use it in GitHub Desktop.
Save mattwiebe/774853 to your computer and use it in GitHub Desktop.
Lessn More integration for WP
<?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