【问题标题】:Create WordPress Page that redirects to another URL创建重定向到另一个 URL 的 WordPress 页面
【发布时间】:2009-11-09 02:23:07
【问题描述】:

我想创建一个新的 WordPress 页面,它实际上是指向另一个站点的链接。目标是让页面显示在我的页面列表中,但实际上将网络用户发送到目标 URL。

例如,假设我想包含一个指示“我的照片”但实际上将它们重定向到 Flickr 的页面。

我猜想实现这一点的一种方法是在 PHP 中使用带有重定向指令的自定义模板页面,但不幸的是,我是 PHP 的新手,不熟悉实现这一点的方法...

【问题讨论】:

标签: php wordpress


【解决方案1】:

您可以通过两种方式完成这两种方式,这两种方式都需要通过编辑您的模板文件来完成。

第一个只是添加一个 html 链接到您希望它显示的任何位置。

第二个(我猜,你正在寻找的那个)是创建一个新的页面模板,如果你有能力在你的主题/模板目录中创建一个新的 .php 文件,这并不是太难.像下面的代码应该做的事情:

<?php /*  
Template Name: Page Redirect
*/ 

header('Location: http://www.nameofnewsite.com');
exit();

?>

模板名称也是您想要设置的任何名称,而标头函数中的 url 是您想要引导用户访问的新 url。修改上述代码以满足您的需要后,将其保存在您的活动主题文件夹中的一个 php 文件中,以模板名称命名。因此,如果您将模板名称保留为“页面重定向”,则将 php 文件命名为 page-redirect.php。

保存后,登录到您的 WordPress 后端,然后创建一个新页面。如果您愿意,您可以在正文中添加标题和内容,但需要注意的重要一点是,在右侧,应该有一个下拉选项供您选择要使用的页面模板,默认显示第一的。在该下拉列表中,应该有要使用的新模板文件的名称。选择新模板,发布页面,你应该是金子了。

此外,您也可以使用正文编辑器下方的“自定义字段”部分动态执行此操作。如果您有兴趣,请告诉我,我可以将那个人的代码粘贴到新的回复中。

【讨论】:

  • 我觉得还是用WordPress默认的功能做重定向会更好:codex.wordpress.org/Function_Reference/wp_redirect
  • 这点 Aljullu 很好,但如果您只是要对站点 URL 进行硬编码,为什么还要再次调用最终只使用上述代码的函数呢?否则,如果您在混合中添加一个变量并且需要先清理 URL,我认为您使用 wp_redirect 是正确的。
【解决方案2】:

我发现这些问题通常最好在服务器层解决。您是否有权访问可以放置重定向规则的 .htaccess 文件?如果是这样:

RedirectPermanent /path/to/page http://uri.com

此重定向还将提供“301 Moved Permanently”响应,以表明 Flickr 页面(例如)是旧页面的永久 URI。

如果这不可行,您可以为每个有问题的页面创建一个自定义页面模板,并将以下 PHP 代码添加到页面模板的顶部(实际上,这就是您在模板中所需要的全部内容:

header('Location: http://uri.com, true, 301');

More information about PHP headers.

【讨论】:

  • 当然应该写成:header('Location: uri.com', true, 301);
  • 以下是有关创建自定义 WordPress 模板的更多信息:davidrisley.com/2009/01/20/…
  • 你的意思是 header('Location: uri.com', true, 301); - :D
【解决方案3】:

或者,使用过滤器。

在您的 WordPress 博客中创建一个空白页面,并根据您的需要适当命名。记下 post_id。然后创建一个改变其永久链接的过滤器。

add_filter('get_the_permalink','my_permalink_redirect');
function my_permalink_redirect($permalink) {
    global $post;
    if ($post->ID == your_post_id_here) {
        $permalink = 'http://new-url.com/pagename';
    }
    return $permalink;
}

这样 url 将正确显示在页面中,不需要有趣的重定向。

如果您经常需要这样做,那么考虑使用自定义 postmeta 字段为“offsite_url”或类似的东西定义一个 postmeta 值,然后您可以根据需要创建页面,输入“offsite_url”值然后使用上面的过滤器代替检查 post_id 来检查它是否具有所需的 postmeta 并根据需要更改永久链接。

【讨论】:

  • 喜欢这个配置!!我有不想通过托管重定向来重定向的wordpress。这很有魅力!!谢谢。
【解决方案4】:

我不熟悉 Wordpress 模板,但我假设 WP 在加载模板之前将标题发送到浏览器。因此,常见的重定向方法有:

header("Location: new_url");

行不通。除非有办法在 WP 执行任何操作之前强制通过模板发送标头,否则您需要使用一些 Javascript,如下所示:

<script language="javascript" type="text/javascript">
document.location = "new_url";
</script>

将它放在该部分中,它将在页面加载时运行。此方法不会立即生效,也不适用于禁用 Javascript 的人。

【讨论】:

  • 其实加header()应该没问题;如果放置在用于命名页面模板文件的 php 注释代码之后,则添加到模板。此外,放置在活动主题 function.php 文件中的任何代码也应该在 WP 发送任何标题之前执行。
【解决方案5】:

使用“原始”插件https://wordpress.org/plugins/raw-html/ 那么就这么简单:

[raw]
<script>
window.location = "http://www.site.com/new_location";
</script>
[/raw]

【讨论】:

  • 我认为 wordpress 现在不允许在其原始标签中使用 javascript。我不确定他们以前是否这样做过。
【解决方案6】:

有 3 种方法可以做到这一点:

  1. 通过更改您的 404.php 代码。
  2. 通过使用 wordpress 插件。
  3. 通过编辑您的 .htaccess 文件。

http://bornvirtual.com/wordpress/redirect-404-error-in-wordpress/906/给出的完整教程

【讨论】:

  • 我已将链接转换为评论,其余部分已包含在接受者答案中。
  • 感谢您提到404.php 也可以是添加一些重定向代码的地方。 +1
【解决方案7】:

我找到了一个插件,它可以帮助我在几秒钟内完成此操作,而无需编辑代码:

https://wordpress.org/plugins/quick-pagepost-redirect-plugin/

我在这里找到它:http://premium.wpmudev.org/blog/wordpress-link-title-external-url/

【讨论】:

    【解决方案8】:

    在 wordpress 中有一种更简单的方法可以通过使用 wordpress 插件来创建重定向。所以在这里我通过插件Redirection找到了一个更好的方法,你也可以在这个网站上找到其他方法Create Url redirect in wordpress through Plugin

    【讨论】:

    • 请在您的链接中添加一些解释,因为如果链接断开,答案将毫无用处
    • 是的,我们都可以停止让网站变慢并通过为每一件小事使用插件来邀请黑客吗? :D
    【解决方案9】:

    (这是用于帖子,而不是页面 - 原理相同。永久链接挂钩因具体用例而异)

    我刚刚遇到了同样的问题,并创建了一种更方便的方法来做到这一点 - 您不必一直重新编辑您的 functions.php,或者在每次添加时摆弄您的服务器设置(我会两者都不一样)。

    TLTR

    您可以在您需要的实际 WP 永久链接功能上添加一个过滤器(对我来说它是 post_link,因为我需要存档/类别列表中的该页面别名),并动态地从别名帖子本身

    没关系,因为帖子是别名,所以无论如何您都不需要内容。

    第一步打开别名帖子,将引用帖子的ID作为内容 (仅此而已):

    接下来,打开你的functions.php并添加:

    function prefix_filter_post_permalink($url, $post) {
        // if the content of the post to get the permalink for is just a number...
        if (is_numeric($post->post_content)) {
            // instead, return the permalink for the post that has this ID
            return get_the_permalink((int)$post->post_content);
        }
        return $url;
    }
    add_filter('post_link', 'prefix_filter_post_permalink', 10, 2 );
    

    就是这样

    现在,每次需要创建别名帖子时,只需将引用帖子的ID作为内容,就完成了。

    这只会更改永久链接。标题、摘录等将按原样显示,这通常是需要的。此外,PHP 代码中的“它是一个数字”部分远非理想,但为了使这一点易于阅读,您可以进行更多调整。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-14
      • 2018-04-27
      • 2023-02-02
      • 1970-01-01
      • 1970-01-01
      • 2021-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多