动态创建wp页面

问题描述 投票:0回答:1

我正在使用自定义页面模板,该模板旨在使用wpdb类和数据库中的一些外部表创建动态内容。我试图保持url的结构尽可能干净,因此我在永久链接中使用'post name'选项..

我只是给出了整个流程,所以不会让人困惑。

  1. 用户正在尝试访问www.domain.com/dynamic/347
  2. 模板在数据库中搜索“347”并创建一个特殊的专用页面
  3. 所有渲染都在模板本身内执行(/ dynamic页面正在使用的那个)

问题在于mod_rewrite - 因为我在wp的永久链接中使用了post_name选项 - wordpress本身试图在'dynamic'的父级下访问名为'347'的实际页面,而不是渲染动态模板并使用347作为一个参数,通过'爆炸'网址并检索最后一个值作为动态参数,如下所示 -

$str = "$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$dynamic_para = explode("/", $str, 4); // in this case - 347
//... retrieve dynamic_para from db and stuff with it.

如何专门为此页面绕过wp的当前mod_rewrite?它甚至可能吗?我试图避免使用url发送GET变量,例如www.domain.com/dynamic/?para=347

php wordpress mod-rewrite
1个回答
1
投票

想要/ dynamic / xxx会被重写为/ dynamic?para = xxx

在WP中你应该用querystring重写index.php(用户在浏览器地址栏中仍然看到“/ dynamic / xxx”)

你在哪里放置了tc_query_vars_filter和tc_rewrite_rules($ rules)函数

您可以将它们放在(子)主题的functions.php中,或者更好地创建它们添加到您自己的简单插件中,以便它们可以使用任何主题:

例如创建,上传和激活:

<?php
/*
Plugin Name: Theme independent functions
Description: NOT TESTED
*/

//  allow WP to store querystring attribs for use in our pages
function your_query_vars_filter($vars) {
  $vars[] = 'para';
  return $vars;
}
add_filter( 'query_vars', 'your_query_vars_filter' );

//  "rewrite" /dynamic/xxx to index.php?pagename=dynamic&para=xxx
function your_rewrite_rules($rules) {
   global $wp_rewrite;
   $your_rule = array( // (not tested)
     'dynamic/(.+)/?' => 'index.php?pagename=dynamic&para=$matches[1]'
   );
   return array_merge($your_rule, $rules);
}
add_filter('page_rewrite_rules', 'your_rewrite_rules');

// any other site customisation stuff you want to add to this plugin
?>

注:上面的过滤器是针对Pages;对于POSTS,请使用post_rewrite_rules过滤器

然后在您的自定义页面模板中:

$my_search_var = get_query_var('para'); // sanitize as reqd

Wordpress“缓存”其重写规则,因此最后我们需要刷新它们,以便识别新的规则:

通常的建议是你只需点击管理仪表板固定链接页面上的“保存更改”按钮即可刷新(设置 - >永久链接)但是,(由于我网站上的怪癖或最新版本的WP的更改?)上次我这样做了,我实际上必须编辑永久链接,保存更改然后将其更改回应该是什么,并再次保存以应用我的重写函数规则。

© www.soinside.com 2019 - 2024. All rights reserved.