我正在尝试建立一个简单的重写规则,我想我应该让这里的一些重写专家来回答这个问题。
我有一个自定义的帖子类型“mealplan”,我正在尝试在visitng中实现一个基本的url重写site.com/mealplan/current
将带访问者访问“mealplan”类型的最新帖子。
我已尝试在此规则上使用几种变体:
global $wp_rewrite;
$wp_rewrite->add_rule(\'mealplan/current\',
\'index.php?post_type=mealplan&numberposts=1&orderby=date&order=DESC\',
\'top\' );
。。。但我似乎无法获取“numberposts”或“posts\\u per\\u page”参数来在查询字符串中执行类似的操作。它直接进入归档页面,默认每页的帖子数。
这就是我想要的:
global $wp_rewrite;
$current_mealplan = get_posts( array(
\'post_type\'=>\'mealplan\',
\'numberposts\'=>1,
\'orderby\'=>\'date\',
\'order\'=>\'DESC\' ) );
$wp_rewrite->add_rule(\'mealplan/current\',
\'index.php?post_type=mealplan&post_id=\'.$current_mealplan[0]->ID,
\'top\');
。。。但代价是在每次加载页面时都需要额外的查询和潜在的刷新规则。即使我通过将当前帖子ID保存在更新的选项中来优化它
update_post
(所以规则只有在更改时才需要刷新),这感觉像是不必要的工作,如果我只能让上面的url参数正常工作,就可以避免这些工作。
最合适的回答,由SO网友:John P Bloch 整理而成
好numberposts
实际上不是查询变量。它刚刚变成posts_per_page
在里面get_posts()
在运行查询之前。posts_per_page
是私有查询变量,这意味着您不能在查询字符串中运行它。一种可能的解决方案是注册一个自定义查询变量(比如\'latest_mealplan\'
并将该变量添加到重写规则中(例如。index.php?post_type=mealplan&orderby=date&order=DESC&latest_mealplan=1
).
然后,钩住\'parse_request\'
, 通过$wp
对象调用。从这里开始,只需设置参数:
if( !empty( $wp->query_vars[\'latest_mealplan\'] ) ){
$wp->query_vars[\'posts_per_page\'] = 1;
add_filter( \'template_include\', create_function( \'$a\', \'return locate_template(array("single-mealplan.php"));\' ) );
}
希望这有帮助!