我有这个permalink structure
: /%year%/%monthnum%/%postname%/
我想要的是,在后端输出一篇帖子的链接,让用户输入一个帖子名,这将自动引导到该帖子(如果存在,否则404)。。。
所以,我有这个:
function transform_pseudo_anchor_wpse_101201($match) {
if (isset($match[1])) {
return \'(link: <a href="http://example.com/\'.sanitize_title_with_dashes($match[1]).\'" title="\'.$match[1].\'">\'.$match[1].\'</a>)\';
}
}
$content = preg_replace_callback(
\'%\\(link: ?(.*?) ?\\)%\',
\'transform_pseudo_anchor_wpse_101201\',
$content
);
echo $content;
当然,这不起作用。。。但是我怎样才能让它工作呢?所以我想得到确切的链接,如果有人链接到一个帖子,存在。。。举个例子吧。com,年份/月份和postname必须到来。。。
最合适的回答,由SO网友:s_ha_dum 整理而成
你的代码可以创建链接,WordPress应该努力找到正确的帖子,但它并不能获得完整的永久链接。要做到这一点,您需要查询该帖子的数据库,并在找到永久链接时构造一个永久链接。
function transform_pseudo_anchor_wpse_101201($match) {
global $wpdb;
if (isset($match[1])) {
$name = sanitize_title_with_dashes($match[1]);
$p = new WP_Query(
array(
\'name\'=>$name,
\'post_type\' => \'post\',
\'posts_per_page\' => 1,
\'suppress_filters\' => true,
\'ignore_sticky_posts\' => true
)
);
if (!empty($p->posts[0])) {
$link = get_permalink($p->posts[0]);
return \'(link: <a href="\'.$link.\'" title="\'.$match[1].\'">\'.$match[1].\'</a>)\';
} else {
return \'nada\';
}
}
}