【问题标题】:wordpress passing parameter to custom templatewordpress 将参数传递给自定义模板
【发布时间】:2014-12-02 05:34:22
【问题描述】:

我正在使用 wordpress。 我已经从管理员创建了一个页面经销商配置文件并为其分配了一个模板。现在我想传递一个像

这样的参数
SITE-URL/dealer-profile/SUV

我已将关注添加到我的.htaccess

RewriteRule ^dealer-profile/([a-zA-Z0-9_-]+)(|/)$ index.php?pagename=dealer-profile&dealer=$1 [QSA]

我也试过了

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

请指教,我哪里错了。

现在我正在关注

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');

但这仅适用于数字,例如 - 测试/dealer-profile/234234/ 正在工作 - 测试/dealer-profile/234234/ 不工作

解决方案

参考:http://codex.wordpress.org/Class_Reference/WP_Rewrite

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 - Jantea Alexandri

【问题讨论】:

  • 最后一行有错别字,2个网址(工作网址和不工作网址)相同:test/dealer-profile/234234/ is working - test/dealer-profile/234234 / 你能纠正一下吗?

标签: php wordpress .htaccess


【解决方案1】:

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

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) {

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');

获取变量:

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

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

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');

然后hook生成规则如下:

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');

将变量添加到查询变量:

function query_vars($public_query_vars) {
    $public_query_vars[] = "dealer-profile";
    return $public_query_vars;
add_filter('query_vars', 'query_vars');

奖金: 要调试您的规则,您可以使用此函数:

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/,它应该以表格格式向您显示所有规则,只需将其包含在您的任何模板中并检查上述函数是否正确添加了重写规则,如果没有,它应该会给您一些额外的有关什么不起作用的信息。

您还可以使用众所周知的Developer 插件来检查您的规则,您将通过此插件获得更多信息!!!

【讨论】:

  • 感谢您的回复,尽管这不起作用。 Siteurl/?pagename=dealer-profile 应用此规则后,即使这也不起作用。通常它是直接工作的。
  • 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/([^/]+)/?$' =&gt; 'index.php? pagename=dealer-profile&amp;dealer=$matches[1]'); $aRules = $aNewRules + $aRules; return $aRules; } add_filter('rewrite_rules_array', 'add_rewrite_rules');
  • 但这仅适用于 local/dealer-profile/345345345/ 等数字,而不适用于 local/dealer-profile/asdasd/
  • @user2932242:请再次检查答案(您可以从开发者插件开始并检查您已经创建的规则,如果您无法调试,那么您可以开始研究解决方案)希望它有效!
  • 非常感谢。这些故障排除对我有很大帮助。现在我正在获取所有规则的列表。但是我也在 .htaccess 中尝试过的这个列表中没有添加新规则。也完全重写规则。我创建了一个名称为经销商页面的页面,它具有 slug 经销商页面并为其分配了一个模板。现在我正在尝试添加重写规则,但注意到工作正常。
猜你喜欢
  • 2011-11-10
  • 1970-01-01
  • 1970-01-01
  • 2019-01-29
  • 1970-01-01
  • 2012-08-17
  • 2017-11-09
  • 1970-01-01
相关资源
最近更新 更多