websupporter

URL Shortener for WordPress

Jun 6th, 2015
12,183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.36 KB | None | 0 0
  1. <?php
  2. /**
  3.  * Plugin Name: URL Shortener für WordPress
  4.  * Plugin URI: http://drwp.de/wordpress-plugin-entwickeln-lernen/
  5.  * Author: Websupporter
  6.  * Author URI: http://websupporter.net/
  7.  * Description: Dieses Plugin ergänzt WordPress um die Möglichkeit eines URL Shorteners
  8.  * Version: 0.5
  9.  **/
  10.  
  11. //Hier werden alle Definitionen ausgeführt, welche während der
  12. //Aktion 'init' ausgeführt werden sollen
  13. add_action( 'init', 'us_init' );
  14. function us_init(){
  15.     //Unsere Kurz-URLs legen wir als eigene Post Typen an.
  16.     $args = array(
  17.         'label'     => 'Kurz-URLs',
  18.         'public'    => true,
  19.         'supports'  => array( 'title' ),
  20.         'rewrite'   => array( 'slug' => 'e' )
  21.     );
  22.     register_post_type( 'url', $args );
  23. }
  24.  
  25. //Für unseren Custom Post Type 'url' fügen wir hier nun
  26. //eine Metabox hinzu
  27. add_action( 'add_meta_boxes', 'us_add_meta_boxes' );
  28. function us_add_meta_boxes(){
  29.     add_meta_box(
  30.         'us_url',
  31.         'Kurz-URL',
  32.         'us_meta_box_url_render',
  33.         'url'
  34.     );
  35. }
  36.  
  37. //Diese Funktion rendert die Metabox
  38. function us_meta_box_url_render( $post ){
  39.     ?>
  40.     <?php
  41.         wp_nonce_field( 'save-url', 'us_nonce' );
  42.     ?>
  43.     <p>
  44.         <label for="redirect-url">URL:</label><br />
  45.         <input type="text" id="redirect-url" value="<?php echo esc_attr( urldecode( get_post_meta( $post->ID, 'url', true ) ) ); ?>" name="url" />
  46.     </p>
  47.     <?php
  48. }
  49.  
  50. //Diese URLs aus der Metabox müssen noch abgespeichert werden
  51. add_action( 'save_post', 'us_save_post' );
  52. function us_save_post( $post_id ){
  53.     //Wir prüfen zunächst, ob wir unsere URL
  54.     //abspeichern wollen und können
  55.     if(
  56.         ! isset( $_POST['us_nonce'] ) ||
  57.         ! wp_verify_nonce( $_POST['us_nonce'], 'save-url' ) ||
  58.         ! current_user_can( 'edit_post', $post_id ) ||
  59.         ! isset( $_POST['url'] )  ||
  60.         wp_is_post_revision( $post_id )
  61.     )
  62.         return;
  63.  
  64.     //Wir reorganisieren unsere URL, um sie URL-konform zu machen.
  65.     //So werden wir beispielsweise Anführungszeichen in %22 umwandeln.
  66.     $url = parse_url( urldecode( stripslashes( $_POST['url'] ) ) );
  67.  
  68.     if( ! isset( $url['scheme'] ) || ! isset( $url['host'] ) )
  69.         return;
  70.    
  71.     $url_string = $url['scheme'] . '://';
  72.     if( isset( $url['user'] ) && isset( $url['password'] ) )
  73.         $url_string .= $url['user'] . ':' . $url['password'] . '.';
  74.  
  75.     $url_string .= $url['host'];
  76.     if( isset( $url['port'] ) )
  77.         $url_string .= ':' . $url['port'];
  78.     if( isset( $url['path'] ) )
  79.         $url_string .= $url['path'];
  80.  
  81.     if( isset( $url['query'] ) ){
  82.         $queries = explode( '&', $url['query'] );
  83.         foreach( $queries as $key => $val ){
  84.             $query = explode( '=', $val );
  85.             $query_key = $query[0];
  86.             unset( $query[0] );
  87.             $query_value = urlencode( implode( '=', $query ) );
  88.             $queries[ $key ] = $query_key . '=' . $query_value;
  89.         }
  90.         $url_string .= '?' . implode( '&', $queries );
  91.     }
  92.  
  93.     if( isset( $url['fragment'] ) )
  94.         $url_string .= '#' . urlencode( $url['fragment'] ) ;
  95.  
  96.  
  97.     //Wir speichern unsere URL
  98.     update_post_meta( $post_id, 'url', $url_string );
  99. }
  100.  
  101. //Bei jedem Seitenaufruf müssen wir nun prüfen,
  102. //ob wir eventuell Weiterleiten müssen
  103. add_action( 'template_redirect', 'us_template_redirect' );
  104. function us_template_redirect(){
  105.     //Wenn es keine Kurz-URL ist, brechen wir unser Script ab.
  106.     if ( ! is_singular( 'url' ) )
  107.         return;
  108.  
  109.     //Wir holen uns die URL
  110.     $url = get_post_meta( get_the_ID(), 'url', true );
  111.  
  112.     if( empty( $url ) )
  113.         return;
  114.  
  115.     //Und führen den Redirect aus
  116.     wp_redirect( $url, 301 );
  117.     die();
  118. }
  119. ?>
Advertisement
Add Comment
Please, Sign In to add comment