Page Links To by Mark Jaquith. Written for use on WordPress.com VIP. Version: 1.0 Author: Erick Hitter (Oomph, Inc.) Author URI: http://www.thinkoomph.com/ */ class external_permalinks_redux { /* * Class variables */ var $ns = 'epr'; var $meta_key_target; var $meta_key_type; /* * Register actions and filters, set meta key * @uses add_action, add_filter, apply_filters * @return null */ function __construct() { add_action( 'admin_init', array( $this, 'action_admin_init' ) ); add_action( 'save_post', array( $this, 'action_save_post' ) ); add_filter( 'post_link', array( $this, 'filter_post_permalink' ), 1, 2 ); add_filter( 'post_type_link', array( $this, 'filter_post_permalink' ), 1, 2 ); add_filter( 'page_link', array( $this, 'filter_page_link' ), 1, 2 ); add_action( 'wp', array( $this, 'action_wp' ) ); $this->meta_key_target = apply_filters( 'epr_meta_key_target', '_links_to' ); $this->meta_key_type = apply_filters( 'epr_meta_key_target', '_links_to_type' ); } /* * Add meta box * @uses apply_filters, add_meta_box * @action admin_init * @return null */ function action_admin_init() { $post_types = apply_filters( 'epr_post_types', array( 'post', 'page' ) ); foreach( $post_types as $post_type ) add_meta_box( 'external-permalinks-redux', 'External Permalinks Redux', array( $this, 'meta_box' ), $post_type, 'normal' ); } /* * Render meta box * @param object $post * @uses _e, esc_url, get_post_meta, selected, wp_create_nonce * @return string */ function meta_box( $post ) { $type = get_post_meta( $post->ID, $this->meta_key_type, true ); ?>
ns ); ?>
meta_key_target . '_nonce' ] ) && wp_verify_nonce( $_POST[ $this->meta_key_target . '_nonce' ], 'external-permalinks-redux' ) ) { //Target $url = esc_url_raw( $_POST[ $this->meta_key_target . '_url' ] ); if( !empty( $url ) ) update_post_meta( $post_id, $this->meta_key_target, $url ); else delete_post_meta( $post_id, $this->meta_key_target, $url ); //Redirect type $type = intval( $_POST[ $this->meta_key_target . '_type' ] ); if( !empty( $url ) && ( $type == 301 || $type == 302 ) ) update_post_meta( $post_id, $this->meta_key_type, $type ); else delete_post_meta( $post_id, $this->meta_key_type ); } } /* * Filter post and custom post type permalinks * @param string $permalink * @param object $post * @uses get_post_meta * @filter post_link, post_type_link * @return string */ function filter_post_permalink( $permalink, $post ) { if( $external_link = get_post_meta( $post->ID, $this->meta_key_target, true ) ) $permalink = $external_link; return $permalink; } /* * Filter page permalinks * @param string $link * @param int $id * @uses get_post_meta * @filter page_link * @return string */ function filter_page_link( $link, $id ) { if( $external_link = get_post_meta( $id, $this->meta_key_target, true ) ) $link = $external_link; return $link; } /* * Redirect to external link if object requested directly. * @uses get_post_meta, wp_redirect * @action pre_get_posts * @return null */ function action_wp() { global $post; if( is_singular() && ( $link = get_post_meta( $post->ID, $this->meta_key_target, true ) ) ) { $type = intval( get_post_meta( $post->ID, $this->meta_key_type, true ) ); if( !$type ) $type = 302; wp_redirect( $link, $type ); exit; } } } global $external_permalinks_redux; if( !is_a( $external_permalinks_redux, 'external_permalinks_redux' ) ) $external_permalinks_redux = new external_permalinks_redux; ?>