web-dev-qa-db-ja.com

カスタムフィールドから投稿の固定リンクを外部URLに変更

私のユーザーに私のウェブサイトへのリンクをredditやdiggのようなものにさせたいです。この投稿へのリンクを含むmeta_key 'syndication_permalink'を追加しました。このカスタムリンクを自分のページにリンクしないように、投稿のパーマリンクを変更するにはどうすればよいですか。

1
Feras Odeh

post_link(またはカスタム投稿タイプの場合はpost_type_link)をフィルタリングし、投稿のメタ値を取得して検証し、元のリンクの代わりにそれを返します。

プラグインとして:

<?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;
}

サンプル入力:

enter image description here

3
fuxia