从旧的WordPress插件中获取新的WordPress插件

时间:2015-07-02 作者:mollusk

我实现了一个名为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的链接?

1 个回复
最合适的回答,由SO网友:kraftner 整理而成

在我们开始之前,我想简单地提一下,将来通过ID而不是URL引用帖子会更容易,因为当slug发生变化时,这将保持不变。无论如何,由于您已经有了这个短代码,现在我们需要另一个解决方案。

您的问题是,当永久链接更改时,您需要从其URL中查找帖子。幸运的是,旧的鼻涕虫存储在_wp_old_slugpostmeta桌子这是两个步骤:

从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\',
));

结束

相关推荐

WP工作管理器更改工作URL(不是Slug)

我正在使用WP Job Manager plugin 在我的wordpress网站上。我的作业列表当前位于/jobs . 我想穿上它/careers . 所有作业的列表不是一个页面,因此我无法在那里更改url。我找到了this 主题,该主题显示了如何从/job/titlejob 到/careers/titlejob. 但这并不能说明我可以如何改变/jobs 到/careers.在示例中,他们正在这样做:function change_job_listing_slug( $args ) { $a