Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /**
- * Plugin Name: URL Shortener für WordPress
- * Plugin URI: http://drwp.de/wordpress-plugin-entwickeln-lernen/
- * Author: Websupporter
- * Author URI: http://websupporter.net/
- * Description: Dieses Plugin ergänzt WordPress um die Möglichkeit eines URL Shorteners
- * Version: 0.5
- **/
- //Hier werden alle Definitionen ausgeführt, welche während der
- //Aktion 'init' ausgeführt werden sollen
- add_action( 'init', 'us_init' );
- function us_init(){
- //Unsere Kurz-URLs legen wir als eigene Post Typen an.
- $args = array(
- 'label' => 'Kurz-URLs',
- 'public' => true,
- 'supports' => array( 'title' ),
- 'rewrite' => array( 'slug' => 'e' )
- );
- register_post_type( 'url', $args );
- }
- //Für unseren Custom Post Type 'url' fügen wir hier nun
- //eine Metabox hinzu
- add_action( 'add_meta_boxes', 'us_add_meta_boxes' );
- function us_add_meta_boxes(){
- add_meta_box(
- 'us_url',
- 'Kurz-URL',
- 'us_meta_box_url_render',
- 'url'
- );
- }
- //Diese Funktion rendert die Metabox
- function us_meta_box_url_render( $post ){
- ?>
- <?php
- wp_nonce_field( 'save-url', 'us_nonce' );
- ?>
- <p>
- <label for="redirect-url">URL:</label><br />
- <input type="text" id="redirect-url" value="<?php echo esc_attr( urldecode( get_post_meta( $post->ID, 'url', true ) ) ); ?>" name="url" />
- </p>
- <?php
- }
- //Diese URLs aus der Metabox müssen noch abgespeichert werden
- add_action( 'save_post', 'us_save_post' );
- function us_save_post( $post_id ){
- //Wir prüfen zunächst, ob wir unsere URL
- //abspeichern wollen und können
- if(
- ! isset( $_POST['us_nonce'] ) ||
- ! wp_verify_nonce( $_POST['us_nonce'], 'save-url' ) ||
- ! current_user_can( 'edit_post', $post_id ) ||
- ! isset( $_POST['url'] ) ||
- wp_is_post_revision( $post_id )
- )
- return;
- //Wir reorganisieren unsere URL, um sie URL-konform zu machen.
- //So werden wir beispielsweise Anführungszeichen in %22 umwandeln.
- $url = parse_url( urldecode( stripslashes( $_POST['url'] ) ) );
- if( ! isset( $url['scheme'] ) || ! isset( $url['host'] ) )
- return;
- $url_string = $url['scheme'] . '://';
- if( isset( $url['user'] ) && isset( $url['password'] ) )
- $url_string .= $url['user'] . ':' . $url['password'] . '.';
- $url_string .= $url['host'];
- if( isset( $url['port'] ) )
- $url_string .= ':' . $url['port'];
- if( isset( $url['path'] ) )
- $url_string .= $url['path'];
- if( isset( $url['query'] ) ){
- $queries = explode( '&', $url['query'] );
- foreach( $queries as $key => $val ){
- $query = explode( '=', $val );
- $query_key = $query[0];
- unset( $query[0] );
- $query_value = urlencode( implode( '=', $query ) );
- $queries[ $key ] = $query_key . '=' . $query_value;
- }
- $url_string .= '?' . implode( '&', $queries );
- }
- if( isset( $url['fragment'] ) )
- $url_string .= '#' . urlencode( $url['fragment'] ) ;
- //Wir speichern unsere URL
- update_post_meta( $post_id, 'url', $url_string );
- }
- //Bei jedem Seitenaufruf müssen wir nun prüfen,
- //ob wir eventuell Weiterleiten müssen
- add_action( 'template_redirect', 'us_template_redirect' );
- function us_template_redirect(){
- //Wenn es keine Kurz-URL ist, brechen wir unser Script ab.
- if ( ! is_singular( 'url' ) )
- return;
- //Wir holen uns die URL
- $url = get_post_meta( get_the_ID(), 'url', true );
- if( empty( $url ) )
- return;
- //Und führen den Redirect aus
- wp_redirect( $url, 301 );
- die();
- }
- ?>
Advertisement
Add Comment
Please, Sign In to add comment