【问题标题】:Wordpress 4.0 send url variables with permalinksWordpress 4.0 发送带有永久链接的 url 变量
【发布时间】:2014-10-17 08:03:23
【问题描述】:

我正在尝试在 url 中发送一个变量。由于我激活了永久链接,因此我正在尝试添加重写规则,正如我在此处阅读的帖子中所述...

嗯,没有任何工作。这是我在functions.php上的代码

add_filter('rewrite_rules_array','wp_insertMyRewriteRules');
add_filter('query_vars','wp_insertMyRewriteQueryVars');
add_filter('init','flushRules');

// Remember to flush_rules() when adding rules
function flushRules(){
    global $wp_rewrite;
    $wp_rewrite->flush_rules();
}

// Adding a new rule
function wp_insertMyRewriteRules($rules)
{
    $newrules = array();
    $newrules['view-article/(.+)'] = 'index.php?pagename=view-article&aid=$matches[1]';
    $finalrules = $newrules + $rules;
        return $finalrules;
}

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

//Stop wordpress from redirecting
remove_filter('template_redirect', 'redirect_canonical');

这是获取变量的调用。

$aid = urldecode($wp_query->query_vars['aid']);

我做错了什么? :( 我的wordpress版本是4.0(最新)

【问题讨论】:

  • 你想做什么...比如,示例 URL 和最终结果是什么?
  • 我正在尝试访问“misyte.com/view-article/23”并在该页面中从另一个数据库创建动态视图,因此我需要获取查询 ID。跨度>

标签: php wordpress variables url permalinks


【解决方案1】:

试试下面的代码:

add_action('init', 'flush_urls');

function flush_urls()
{
    // Execute flush_rules() on every request can
    // slow down your entire website
    if('clean' !== get_option('flush_urls', ''))
    {
        flush_rewrite_rules();
        add_option('flush_urls', 'clean');
    }
}

add_action('init', 'register_rewrite_rules',    0);

function register_rewrite_rules()
{
    add_rewrite_tag('%aid%',         '([^/]+)');

    add_rewrite_rule(
        "view-article/([^/]+)/?",
        'index.php?pagename=view-article&aid=$matches[1]',
        "top"
    );
}

最后,在您的 template-redirect 或任何以后的操作/挂钩中,您应该执行以下操作:

global $wp_query;

echo $wp_query->query_vars['pagename'];
echo $wp_query->query_vars['aid'];

如果您在 $wp_query 中看不到这些变量,请尝试再次将永久链接保存在您的 WordPress 仪表板中。这将清除 urls 缓存。

【讨论】:

  • One ")" 第一个 if 缺失。但一切都很好,现在我可以检查第一个变量“pagename”,但我无法检索第二个变量。在 url “misyte.com/view-article/23”上,我可以将 view-article 打印为 pagename,但我不能打印 23 作为帮助。
  • 尝试将语句index.php?pagename=view-article&aid=$matches[1]的双引号换成单引号,当然,如果您对这个修改感到满意,请upvode我的答案并检查它是否正确:)
  • 一切正常,谢谢!我假设向该规则添加语句可以发送更多变量。
  • 是的,当然,您可以添加任意数量的变量。请不要忘记给我的答案投票!! ;)
猜你喜欢
  • 1970-01-01
  • 2011-01-10
  • 1970-01-01
  • 1970-01-01
  • 2021-06-04
  • 2014-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多