我实现了一个名为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>\';
}
问题是,以前出现的这种短代码链接到了永久链接已更改的帖子。
如何根据旧的permalink查找旧帖子,然后让短代码显示新permalink的链接?
最合适的回答,由SO网友:kraftner 整理而成
在我们开始之前,我想简单地提一下,将来通过ID而不是URL引用帖子会更容易,因为当slug发生变化时,这将保持不变。无论如何,由于您已经有了这个短代码,现在我们需要另一个解决方案。
您的问题是,当永久链接更改时,您需要从其URL中查找帖子。幸运的是,旧的鼻涕虫存储在_wp_old_slug
在postmeta
桌子这是两个步骤:
从URL获取slug我假设您没有更改permalink结构,只更改slug。下面是从URL中提取slug的代码:
$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
查询此slug的帖子
$posts = get_posts(array(
\'meta_key\' => \'_wp_old_slug\',
\'meta_value\' => $slug,
\'post_type\' => \'post\',
));