【问题标题】:WP url: localhost / page / variableWP url:本地主机/页面/变量
【发布时间】:2016-11-04 17:34:37
【问题描述】:

有没有办法让 Wordpress 在我输入时知道: 本地主机/foo/bar

FOO 是一个实际的页面(使用我自己的脚本作为模板呈现)和 BAR 被赋予了 VAR,所有显示在 FOO 上的东西都依赖于它 ?

现在,当我输入 localhost/foo 时,我得到了页面,一切正常。 但是 localhost/foo/bar 会产生 404 错误。

显然,不存在 BAR 页面。如何让 BAR 从呈现为页面变为呈现为变量?

【问题讨论】:

  • 听起来你需要做一些 htaccess foo
  • @Farkie 不,他无需对 .htaccess 执行任何操作即可拥有所请求的功能
  • 也许在 404 模板上有重定向。最好的方法是将链接更改为 localhost/foo/?bar
  • @Farkie 虽然这是一个选项,但这不是 Greg Bialowas 需要的
  • @Greg Bialbar 将成为标准类型的值吗?我的意思是一个x字符长度的字符串?将是一个字符串的混合数?您是否要为bar 提供表格(即:/user-id-123-age-45)?

标签: php wordpress


【解决方案1】:

这是我对您的问题的解决方案:

在您的functions.php 文件中,您应该添加以下代码:

add_action( 'init', 'custom_rewrite_rules' );
function custom_rewrite_rules() {
    add_rewrite_rule(
        '^(katalog)/([^/]+)/?$',
        'index.php?pagename=$matches[1]&bar_variable_name=$matches[2]',
        'top'
    );
}

add_action( 'init', 'custom_rewrite_tags');
function custom_rewrite_tags() {
    add_rewrite_tag( '%bar_variable_name%', '([^/]+)' );
}

注意:在上面的代码中,我将bar 变量命名为bar_variable_name。如果您愿意,可以将变量名替换为更符合您需要的变量名。

注意 #2:如果您需要将页面重命名为其他名称,请将 katalog 替换为新页面的 slug。

完成后,您应该进入 WordPress 仪表板的“设置/永久链接”,然后保存您使用的当前设置。这样,您将刷新 WordPress 的 ReWrite 规则。

然后在您的主题文件夹中,创建一个模板页面或在您的page.php 文件中并执行以下测试以检查您是否在带有bar 的页面中以及bar 的值是什么:

global $wp_query;

if (
    isset( $wp_query->query ) &&
    key_exists( 'bar_variable_name', $wp_query->query ) &&
    ! empty( $wp_query->query['bar_variable_name'] )
) {
    $image_path = $wp_query->query['bar_variable_name'];

    echo "This is my folder name : " . $image_path;
    die();
}

注意:如果您替换了预览代码块中的bar_variable_name,则通过在此处也替换bar_variable_name 来更新此代码。

如果一切顺利,当您访问带有额外段的katalog 页面时,您应该会在页面中看到段字符串。

ie:如果您访问页面 /katalog/beers/ 输出应该是:This is my folder name : beers

如果这符合您的需要,那么您可以在自定义页面中使用 $image_path 作为变量来显示您喜欢的任何内容。

【讨论】:

  • 如果您觉得我已经解决了您的问题,请投票给我的答案并将其作为正确答案:) ;) :) 谢谢...
  • 添加了function.php部分,创建了一个模板。模板有效,回显了默认的 PHP 命令('hello'),但是当我向它添加 /bar 时,会产生 404 错误。这可能是因为我一直将所有这些都放在一个儿童主题中吗?我的意思是 child->functions.php、child->template.php 等?
  • 不,我不这么认为。您是否刷新了 WordPress 的重写规则?你也可以试试这个插件来检查你的重写规则并刷新它们:wordpress.org/support/view/plugin-reviews/…
  • 注意,重写规则检查器在重写顶部还有一个字段,您可以使用它来查看它与特定 URL 匹配的规则。在此字段中,您应该添加路径。例如,如果您在此字段中有 URL:http://www.my-site.ext/katalog/beers,则应添加 /katalog/beers 并按过滤器以查看与您的 URL 匹配的重写规则。
  • 终于我找到了一些时间来完成我开始的工作:再次检查你的代码,最后添加了你提到的那个插件。突然,冲洗后,一切都开始按预期工作。非常感谢您的帮助,非常非常感谢! Ευχαριστώ πολύ
猜你喜欢
  • 2019-11-09
  • 2015-01-21
  • 2020-07-24
  • 1970-01-01
  • 2013-01-25
  • 2016-09-13
  • 2017-11-22
  • 2016-10-13
  • 2014-02-17
相关资源
最近更新 更多