我正试图为WordPress编写一个插件,但在wp_rewrite功能方面我遇到了一些问题。
我希望通过URL传递变量(例如: www.mysite.com/WordPress?variable=helloall),使一个页面显示为它的多个页面。
但是,我希望保持permalink结构的完整,因此我希望URL以如下方式出现:
www.mysite.com/WordPress/helloall
然后,我想要能够得到的子弹和使用搜索我的数据库。(就像我使用前面提到的通用方法时使用的$_GET一样)
我已经在网上找到了一些教程,而且到目前为止还能做到这一点。我相信我的问题是因为你对规则的正确写法缺乏理解。
我使用过本教程:
http://www.prodeveloper.org/create-your-own-rewrite-rules-in-wordpress.html
我大部分时间都尝试使用相同的代码。我能制定规则,但他们似乎不想为我工作
有人能告诉我正确的格式才能做到这一点吗?
编辑
这是我目前的职能
function add_rewrite_rules( $wp_rewrite )
{
$new_rules = array
(
'(.?.+?)/(.+?)/page/?([0-9]{1,})/?$' => 'index.php?pagename='.
$wp_rewrite->preg_index(1).'&varname='.
$wp_rewrite->preg_index(2).'&page='.
$wp_rewrite->preg_index(3),
'(.?.+?)/(.*?)/?$' => 'index.php?pagename='.
$wp_rewrite->preg_index(1).'&varname='.
$wp_rewrite->preg_index(2)
);
// Always add your rules to the top, to make sure your rules have priority
$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}Add_action(“生成_重写规则”,“add_rewrite_rules”);
解决方案
我已经想好了,我本来打算把这个作为一个答案,但是现在我似乎无法回答我自己的问题,所以我正在编辑原来的帖子:
首先,我上面发布的代码是正确的,但是它不起作用的原因是因为我没有刷新规则,我这样做是用以下代码:
function ebi_flush_rewrite_rules()
{
global $wp_rewrite;
$wp_rewrite->flush_rules();
}
add_action( 'init', 'flush_rewrite_rules');我的新问题是,我的代码工作得有点好,重定向所有页面而不是我想要的页面,这意味着没有任何子页面会显示这是一个问题,然而,我已经用一个小编辑解决了这个问题:
function add_rewrite_rules( $wp_rewrite )
{
$new_rules = array
(
'(testpage)/(.+?)/page/?([0-9]{1,})/?$' => 'index.php?pagename='.
$wp_rewrite->preg_index(1).'&varname='.
$wp_rewrite->preg_index(2).'&page='.
$wp_rewrite->preg_index(3),
'(testpage)/(.*?)/?$' => 'index.php?pagename='.
$wp_rewrite->preg_index(1).'&varname='.
$wp_rewrite->preg_index(2)
);
// Always add your rules to the top, to make sure your rules have priority
$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}因此,关于wp_rewrite功能的最后代码如下:
function add_rewrite_rules( $wp_rewrite )
{
$new_rules = array
(
'(testpage)/(.+?)/page/?([0-9]{1,})/?$' => 'index.php?pagename='.
$wp_rewrite->preg_index(1).'&varname='.
$wp_rewrite->preg_index(2).'&page='.
$wp_rewrite->preg_index(3),
'(testpage)/(.*?)/?$' => 'index.php?pagename='.
$wp_rewrite->preg_index(1).'&varname='.
$wp_rewrite->preg_index(2)
);
// Always add your rules to the top, to make sure your rules have priority
$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}
function query_vars($public_query_vars)
{
$public_query_vars[] = "varname";
return $public_query_vars;
}
function ebi_flush_rewrite_rules()
{
global $wp_rewrite;
$wp_rewrite->flush_rules();
}
add_action( 'init', 'flush_rewrite_rules');
add_action('generate_rewrite_rules', 'add_rewrite_rules');
add_filter('query_vars', 'query_vars');我希望这能为将来的其他人节省一些时间。
发布于 2012-10-30 17:30:10
我想出了如何让它在一个特定的页面名称上工作,这是为将来有问题的人准备的:
function add_rewrite_rules( $wp_rewrite )
{
$new_rules = array
(
'(testpage)/(.+?)/page/?([0-9]{1,})/?$' => 'index.php?pagename='.
$wp_rewrite->preg_index(1).'&varname='.
$wp_rewrite->preg_index(2).'&page='.
$wp_rewrite->preg_index(3),
'(testpage)/(.*?)/?$' => 'index.php?pagename='.
$wp_rewrite->preg_index(1).'&varname='.
$wp_rewrite->preg_index(2)
);
// Always add your rules to the top, to make sure your rules have priority
$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}
function query_vars($public_query_vars)
{
$public_query_vars[] = "varname";
return $public_query_vars;
}
function ebi_flush_rewrite_rules()
{
global $wp_rewrite;
$wp_rewrite->flush_rules();
}
add_action( 'init', 'flush_rewrite_rules');
add_action('generate_rewrite_rules', 'add_rewrite_rules');
add_filter('query_vars', 'query_vars');https://stackoverflow.com/questions/13140182
复制相似问题