web-dev-qa-db-ja.com

古いワードプレススラグから新しいワードプレススラグを取得

Of of pageのリンクを持つ属性postを含むsrcというショートコードを実装しました

[post src="http://www.listenmoneymatters.com/the-betterment-experiment/"]

現在、この短いコードは投稿のメタデータに基づいて見栄えのするリンクを作成します。

// MORE INFORMATION LINK
add_shortcode('post', 'post_shortcode');
function post_shortcode($atts) {
    extract(shortcode_atts(array(
        "src" => '',
        "title" => '',
        "url" => '',
        "image" => ''
    ), $atts));

    $post_id = url_to_postid( $src );
    $post = get_post( $post_id );
    $post_title = get_the_title( $post_id );
    $post_thumb = get_the_post_thumbnail( $post_id, array(150,150) );
    if($post->post_excerpt == '') {
        $post_description = text_limit($post->post_content, 175);
    } else {
        $post_description = $post->post_excerpt;
    }


    return '
        <a title="'.$post_title.'" href="'.$src.'" class="moreinfo">
            '.$post_thumb.'
            <h4>'.$post_title.'</h4>
            <p>'.$post_description.'</p>
            <div class="clearfix"></div>
        </a>';
}

問題は、パーマリンクが変更された投稿へのこのショートコードリンクの古い出現です。

古いパーマリンクに基づいて古い投稿を検索してから、短いコードに新しいパーマリンクとのリンクを表示させるにはどうすればよいですか。

1
mollusk

開始する前に、スラッグが変わってもこれは変わらないので、将来的にはURLではなくIDで投稿を参照する方が簡単であることをすぐに触れます。とにかく、あなたはすでにこのショートコードを持っているので、もう一つの解決策が必要です。

あなたの問題は、パーマリンクが変わったときにそのURLから投稿を見つける必要があるということです。幸い、古いスラッグはpostmetaテーブルの_wp_old_slugに格納されています。つまり、これは2つのステップです。

URLからスラッグを取得する

私はあなたがパーマリンク構造を変更せず、ナメクジだけを変更したと思います。そのため、URLからスラッグを抽出するコードは次のようになります。

$url ='http://www.listenmoneymatters.com/the-betterment-experiment/';
$url = explode("/",$url);   // Split URL at "/"
$url = array_filter();      // Remove empty array entries so get rid of last "/"
$slug = array_pop($url);    // Get last URL Segment

このスラッグの投稿を問い合わせる

$posts = get_posts(array(
    'meta_key'         => '_wp_old_slug',
    'meta_value'       => $slug,
    'post_type'        => 'post',
));
1
kraftner