可以在URL查询字符串中传递‘number post’吗?

时间:2011-01-03 作者:goldenapples

我正在尝试建立一个简单的重写规则,我想我应该让这里的一些重写专家来回答这个问题。

我有一个自定义的帖子类型“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参数正常工作,就可以避免这些工作。

1 个回复
最合适的回答,由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"));\' ) );
}
希望这有帮助!

结束

相关推荐