Change post permalink to external URL from custom field

I want to let my users submit links to my website something like reddit and digg. I added a meta_key ‘syndication_permalink’ which contains link to this post. How could I change the post permalink to link this custom link not to my page?

Related posts

Leave a Reply

1 comment

  1. Filter post_link (or post_type_link for custom post types), fetch and validate the post meta value, then return that instead of the original link.

    As a plugin:

    <?php
    /**
     * Plugin Name: External Permalinks
     * Plugin URI:  http://wordpress.stackexchange.com/q/64285/73
     * Description: Uses the value of post meta field <code>syndication_permalink</code> as permalink if available.
     * Version:     2012.11.13
     * Author:      Fuxia Scholz
     * Author URI:  https://fuxia.me
     * Licence:     MIT
     * License URI: http://opensource.org/licenses/MIT
     */
    
    add_filter( 'post_link', 'wpse_64285_external_permalink', 10, 2 );
    
    /**
     * Parse post link and replace it with meta value.
     *
     * @wp-hook post_link
     * @param   string $link
     * @param   object $post
     * @return  string
     */
    function wpse_64285_external_permalink( $link, $post )
    {
        $meta = get_post_meta( $post->ID, 'syndication_permalink', TRUE );
        $url  = esc_url( filter_var( $meta, FILTER_VALIDATE_URL ) );
    
        return $url ? $url : $link;
    }
    

    Sample input:

    enter image description here