动态创建wp页面

时间:2018-01-01 11:09:34

标签: php wordpress mod-rewrite

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

我只是全力以赴,所以不会让人感到困惑。

  1. 用户正在尝试访问www.domain.com/dynamic/347
  2. 模板正在搜索' 347'在数据库中创建一个特殊的专用页面
  3. 所有渲染都在模板本身(/动态页面正在使用的那个)中执行
  4. 问题在于mod_rewrite - 因为我在wp的永久链接中使用了post_name选项 - wordpress本身正试图访问一个名为' 347'的实际页面。在动态'的父级下,而不是渲染动态模板,并使用347作为参数,通过“爆炸”来实现#39;爆炸' url并将最后一个值检索为动态参数,如下所示 -

    $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

1 个答案:

答案 0 :(得分:1)

  

想要将/ dynamic / xxx重写为/ dynamic?para = xxx

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

  

你究竟放置了tc_query_vars_filter和tc_rewrite_rules($ rules)函数

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

e.g。创建,上传和激活:

<?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
?>

N.B。上面的过滤器是针对Pages;对于POSTS使用post_rewrite_rules过滤器

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

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

Wordpress&#34;缓存&#34;它的重写规则所以最后我们需要刷新它们,以便你的新的能够得到认可:

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