WordPress: abbreviare gli URL dei post in modo performante con Bitly

WordPress: abbreviare gli URL dei post in modo performante con Bitly

Bitly fornisce un set completo di API che ci consente di abbreviare i nostri URL lunghi in modo che possano essere facilmente condivisi sul Web. Usare Bitly in WordPress è abbastanza semplice: tutto ciò di cui hai bisogno è un account Bitly e un token API. Una volta ottenuti questi dati, puoi creare il codice necessario per abbreviare i permalink dei tuoi post WordPress.

La classe wrapper per Bitly

Dobbiamo mantenere separate le nostre routine, quindi iniziamo con la creazione di una semplice classe wrapper che effettua una richiesta alle API Bitly e restituisce una risposta in formato JSON.

La nostra classe ha bisogno solo dell'URL da abbreviare quando il parametro passa al suo costruttore. Questo URL sarà a sua volta inviato a Bitly con una richiesta GET e l'URL abbreviato verrà estratto dall'output JSON restituito dal server remoto.


class BitlyShortener {

	private $_token = 'Token API';
	private $_apiURL = 'https://api-ssl.bitly.com/v3/shorten?';
	
	public $url;
	
	public function __construct( $uri ) {
		$this->url = $uri;
	}
	
	private function _buildURL() {
		$requestURL = $this->_apiURL . 'access_token=' . $this->_token . '&longUrl=' . urlencode( $this->url ) . '&format=json';
		return $requestURL;
	}
	
	public function shorten() {
		$requestURI = $this->_buildURL();
		$response = wp_remote_get( $requestURI, array( 'timeout' => 30 ) );
		if( !is_wp_error( $response ) ) {
		    $data = json_decode( $response['body'], true );
            return $data['data']['url'];
        } else {
            return $this->url;
        }    
	}

}

La funzione del tema

La nostra classe wrapper implementa i passaggi necessari per ottenere l'URL abbreviato da Bitly. Ciò di cui abbiamo bisogno ora è una funzione di utilità da utilizzare nel nostro tema che visualizza l'URL abbreviato con l'aiuto della classe wrapper.

Il problema principale di questa soluzione è che dobbiamo eseguire una richiesta remota per ogni post nel Loop se vogliamo visualizzare un link HTML al di fuori del template di single.php.

Per risolvere questo problema, possiamo utilizzare i campi personalizzati per archiviare l'URL abbreviato e associarlo al post corrente. La nostra funzione specializzata va nel file functions.php.

Noterai che anche l'URL completo verrà salvato come campo personalizzato: questo ci consente di affrontare il problema delle modifiche alla struttura del permalink.


<?php
require_once( TEMPLATEPATH . '/inc/BitlyShortener.php' );

function my_short_link( $url ) {
	global $post;
	$post_id = $post->ID;
	$short = '';
	$link = get_post_meta( $post_id, 'bitly-link', true );
	$original_link = get_post_meta( $post_id, 'original-link', true );
	if( !empty( $link ) ) {
		if( $url == $original_link ) {
			$short = $link;
		} else {
			$shortener = new BitlyShortener( $url );
			$shortened_link = $bitly->shorten();
			update_post_meta( $post_id, 'bitly-link', $shortened_link );
			update_post_meta( $post_id, 'original-link', $url );
			
			$short = $shortened_link;
		}
	} else {
		$bitly = new BitlyShortener( $url );
		$short_link = $bitly->shorten();
		update_post_meta( $post_id, 'bitly-link', $short_link );
		update_post_meta( $post_id, 'original-link', $url );
		$short = $short_link;
	}
	echo $short;
}
?>

Quindi possiamo usare la nostra funzione nel Loop:


<?php $permalink = get_permalink(); ?>
<a href="<?php my_short_link( $permalink ); ?>">Short link</a>

Questa soluzione è piuttosto semplice ma efficace.

Torna su