您发布的代码的问题是,您正在使用时间戳创建永久链接,并在中使用它add_rewrite_rule
就好像时间戳是配方的post ID一样。这个p
-中的参数index.php?post_type=recipe&p=$matches[1]
用于传递帖子ID。因此,WordPress将开始寻找ID为“20140609070153”的帖子。
现在我不知道为什么你会想要这样一个永久链接,但是为了保持一个实际工作的类似永久链接结构,你可以将ID添加到永久链接结构中,例如创建永久链接http://example.com/recipe/21-20140609070153
, 也通过了post ID(21)。
add_filter( \'post_type_link\', \'wpse33551_post_type_link\', 1, 3 );
function wpse33551_post_type_link( $link, $post = 0 ) {
$timestamp = $post->post_date;
$timestamp = preg_replace("/[^A-Za-z0-9]/", "", $timestamp);
if ( $post->post_type == \'recipe\' ) {
return home_url( \'recipe/\' . $post->ID . \'-\' . $timestamp );
}
else {
return $link;
}
}
add_action( \'init\', \'wpse33551_rewrites_init\' );
function wpse33551_rewrites_init() {
add_rewrite_rule(
\'recipe/([0-9]+)\\-([0-9]+)?$\',
\'index.php?post_type=recipe&p=$matches[1]\',
\'top\'
);
}
此解决方案的一个问题是,它会为附加的任何时间戳生成有效页面。
总结:我将转到另一个permalink结构,实际上唯一地标识一篇文章(时间戳没有):-)。