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?


1 Answer 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:

 * 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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.