首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >wordpress将参数传递给自定义模板

wordpress将参数传递给自定义模板
EN

Stack Overflow用户
提问于 2014-12-02 05:34:22
回答 1查看 3.2K关注 0票数 4

我在用wordpress。我已经从管理员创建了一个页面经销商配置文件,并给它分配了一个模板。现在我想传递一个参数,比如

代码语言:javascript
复制
SITE-URL/dealer-profile/SUV

我已将以下内容添加到我的.htaccess

代码语言:javascript
复制
RewriteRule ^dealer-profile/([a-zA-Z0-9_-]+)(|/)$ index.php?pagename=dealer-profile&dealer=$1 [QSA]

我也尝试过

代码语言:javascript
复制
add_rewrite_rule('dealer-profile/([^/]+)', 'index.php?pagename=dealer- profile&dealer=$matches[1]', 'top');
flush_rewrite_rules(false);

当我请求SITE-URL/dealer-profile/SUV时,它会自动重定向到SITE-URL/dealer-profile

请建议,我哪里错了。

现在我要做的是

代码语言:javascript
复制
function themeslug_query_vars( $qvars ) {
  $qvars[] = 'dealer';
  return $qvars;
}
add_filter( 'query_vars', 'themeslug_query_vars' , 10, 1 );
function add_rewrite_rules($aRules) {
    $aNewRules = array('dealer-profile/([^/]+)/?$' => 'index.php?pagename=dealer-profile&dealer=$matches[1]');
    $aRules = $aNewRules + $aRules;
    return $aRules;
}
add_filter('rewrite_rules_array', 'add_rewrite_rules');

但这只适用于测试/经销商-配置文件/234234/正在工作-测试/经销商-配置文件/234234/不起作用的数字。

溶液

参考文献:重写

代码语言:javascript
复制
add_filter( 'rewrite_rules_array','my_insert_rewrite_rules' );
add_filter( 'query_vars','my_insert_query_vars' );
add_action( 'wp_loaded','my_flush_rules' );
// flush_rules() if our rules are not yet included
function my_flush_rules(){
    $rules = get_option( 'rewrite_rules' );

    if ( ! isset( $rules['(dealer-profile)/(.*)$'] ) ) {
        global $wp_rewrite;
        $wp_rewrite->flush_rules();
    }
}

// Adding a new rule
function my_insert_rewrite_rules( $rules )
{
    $newrules = array();
    $newrules['dealer-profile/(.*)$'] = 'index.php?pagename=dealer-profile&dealer=$matches[1]';
    return $newrules + $rules;
}

// Adding the id var so that WP recognizes it
function my_insert_query_vars( $vars )
{
    array_push($vars, 'dealer');
    return $vars;
}

非常感谢您的帮助@jnhghy-jnhghy

EN

回答 1

Stack Overflow用户

发布于 2014-12-02 09:24:24

您需要创建一个函数来将查询变量添加到查询字符串中,然后将该函数挂钩到query_vars钩子中:

代码语言:javascript
复制
function add_query_vars($aVars) {
$aVars[] = "dealer-profile"; // represents the name of the variable that you want to pass
}

// hook add_query_vars function into query_vars
add_filter('query_vars', 'add_query_vars');

然后,我们需要添加重写规则:函数add_rewrite_rules($aRules) {

代码语言:javascript
复制
function add_rewrite_rules($aRules) {
$aNewRules = array('dealer-profile/([^/]+)/?$' => 'index.php?pagename=dealer-profile=$matches[1]');
$aRules = $aNewRules + $aRules;
return $aRules;
}

// hook add_rewrite_rules function into rewrite_rules_array
add_filter('rewrite_rules_array', 'add_rewrite_rules');

获取变量:

代码语言:javascript
复制
if(isset($wp_query->query_vars['dealer-profile'])) {
$sMsdsCat = urldecode($wp_query->query_vars['dealer-profile']);
}

这应该能起作用,下面是一些“高级规则”的额外链接:http://www.rlmseo.com/blog/passing-get-query-string-parameters-in-wordpress-url/ http://www.prodeveloper.org/create-your-own-rewrite-rules-in-wordpress.html

编辑:让我们尝试第二篇文章中的步骤:首先,让我们创建标记并将其添加到重写规则中(这对于alpha-数字值应该适用:

代码语言:javascript
复制
function createRewriteRules() {
    global $wp_rewrite;

    // add rewrite tokens
    $dealertag = '%dealertag%';
    $wp_rewrite->add_rewrite_tag($dealertag, '(.+?)', 'dealer-profile=');

    $keywords_structure = $wp_rewrite->root . "dealer-profile/$dealertag/";
    $keywords_rewrite = $wp_rewrite->generate_rewrite_rules($keywords_structure);

    $wp_rewrite->rules = $keywords_rewrite + $wp_rewrite->rules;
    return $wp_rewrite->rules;
}
add_action('generate_rewrite_rules', 'createRewriteRules');

然后钩子生成如下规则:

代码语言:javascript
复制
function add_rewrite_rules( $wp_rewrite ) 
{
        add_rewrite_rule('^dealer-profile/([^/]*)/?','index.php?page_id=12&dealer-profile=$matches[1]','top');
}
add_action('generate_rewrite_rules', 'add_rewrite_rules');

将变量添加到查询vars:

代码语言:javascript
复制
function query_vars($public_query_vars) {
    $public_query_vars[] = "dealer-profile";
    return $public_query_vars;
add_filter('query_vars', 'query_vars');

奖励:要调试规则,可以使用此函数:

代码语言:javascript
复制
function dev4press_debug_rewrite_rules() {
  global $wp_rewrite;
  echo '<div>';
  if (!empty($wp_rewrite->rules)) {
    echo '<h5>Rewrite Rules</h5>';
    echo '<table><thead><tr>';
    echo '<td>Rule</td><td>Rewrite</td>';
    echo '</tr></thead><tbody>';
    foreach ($wp_rewrite->rules as $name => $value) {
      echo '<tr><td>'.$name.'</td><td>'.$value.'</td></tr>';
    }
    echo '</tbody></table>';
  } else {
    echo 'No rules defined.';
  }
  echo '</div>';
}

它来自https://docs.dev4press.com/tutorial/wordpress/debug-wordpress-rewrite-rules-matching/,它应该以表格的格式向您展示所有规则,只需将其包含在任何模板中,并检查上面的函数是否正确地添加了重写规则(如果没有正确的话),它应该会为您提供一些关于哪些未起作用的额外信息。

你也可以使用著名的开发人员插件来检查你的规则,你会得到这个插件的额外信息!

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27242550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档