【问题标题】:Can I add "virtual" page in WordPress?我可以在 WordPress 中添加“虚拟”页面吗?
【发布时间】:2016-05-11 18:03:53
【问题描述】:

在我的 WordPress 网站上,我想创建“虚拟”页面。虚拟页面是指我可以通过 URL 链接到的内容。我正在使用 Facebook Webhooks,我希望有一个这样的回调 URL:https://example.com/facebook-webhook。我希望它通过插件来完成,而不是实际将任何页面添加到数据库中。有没有办法在 WordPress 中这样添加页面?

现在我使用https://example.com/?facebook-webhook 并在init 操作中检查isset( $_GET['facebook-webhook'] )。不过,我很想在没有? 的情况下拥有它。

【问题讨论】:

  • 您是否尝试过添加新的.htaccess 规则?
  • @NazmulAlamNayan 我希望它以类似插件的方式完成,所以我需要能够在不接触任何代码的情况下禁用它。
  • 是的,有可能。如果你开启了链接自定义,所有传入的url都会被wordpress处理,你可以对其进行预处理。一年前我做了一个类似的插件。我得走了,现在,但如果你有兴趣,我可以搜索一下。 BRB
  • @fusion3k 当然,感谢您的帮助。但是,我需要一个适用于任何配置的解决方案。
  • 我猜this 会帮助你。它可以让您添加自定义重写规则,而无需触及任何代码。

标签: php wordpress


【解决方案1】:

您可以使用重写和查询变量来使用您的自定义 php 文件作为模板来做到这一点:

//1. define a path for later
define('PLUG_PATH', WP_PLUGIN_DIR . '/' . basename(dirname(__FILE__)));



//2. add a wp query variable to redirect to
add_action('query_vars','plugin_set_query_var');
function plugin_set_query_var($vars) {
    array_push($vars, 'is_new_page'); // ref url redirected to in add rewrite rule

    return $vars;
}


//3. Create a redirect
add_action('init', 'plugin_add_rewrite_rule');
function plugin_add_rewrite_rule(){
    add_rewrite_rule('^mynewpage$','index.php?is_new_page=1','top');

    //flush the rewrite rules, should be in a plugin activation hook, i.e only run once...

    flush_rewrite_rules();  
}

//4.return the file we want...
add_filter('template_include', 'plugin_include_template');
function plugin_include_template($template){


    // see above 2 functions..
    if(get_query_var('is_new_page')){
        //path to your template file
        $new_template = PLUG_PATH.'/template.php';
        if(file_exists($new_template)){
            $template = $new_template;
        } 
        // else needed? up to you maybe 404?
    }    

    return $template;    

}

【讨论】:

  • 每个请求都调用flush_rewrite_rules不是很重吗?
  • 无论永久链接设置如何,此解决方案都能正常工作吗?即使有人使用Plain 设置?
  • 是的,它使用重写规则,所以当有人使用 url example.com/mynewpage 时,它将匹配并重定向到重写中的 url。
  • 其实很抱歉,你的意思是默认?不,它不会,wp 不会为此加载重写......如果你想要的话,你需要使用早期的钩子并包含文件并加载 wp,这不是一个好方法!
  • 是的,我是这么认为的。我认为 WP 根本不使用 .htaccess 来设置 Plain ——对吗?实际上我只需要将它用作回调,所以我只需要执行某些操作并回显文本。我现在所做的是检查$_SERVER['REQUEST_URI'] 并执行我想要的操作。这是相当低级的解决方案,不是吗?
猜你喜欢
  • 1970-01-01
  • 2014-02-21
  • 2016-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-04
  • 1970-01-01
  • 2015-01-29
相关资源
最近更新 更多