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>';
}
問題は、パーマリンクが変更された投稿へのこのショートコードリンクの古い出現です。
古いパーマリンクに基づいて古い投稿を検索してから、短いコードに新しいパーマリンクとのリンクを表示させるにはどうすればよいですか。
開始する前に、スラッグが変わってもこれは変わらないので、将来的にはURLではなくIDで投稿を参照する方が簡単であることをすぐに触れます。とにかく、あなたはすでにこのショートコードを持っているので、もう一つの解決策が必要です。
あなたの問題は、パーマリンクが変わったときにそのURLから投稿を見つける必要があるということです。幸い、古いスラッグはpostmeta
テーブルの_wp_old_slug
に格納されています。つまり、これは2つのステップです。
私はあなたがパーマリンク構造を変更せず、ナメクジだけを変更したと思います。そのため、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',
));