检查重写API是否可用

时间:2014-04-24 作者:philippe_b

WordPress支持通过重写API重写URL。它依赖于底层HTTP服务器机制来完成工作。

WordPress并不总是能够强制执行重写规则。例如,对于Apache,不允许WordPress创建。htaccess文件。

我正在编写的插件应该利用重写API,如果它可用的话。基本上:

if (is_url_rewriting_available( ) ) {
    Plan A
} else {
    Plan B
}
但我找不到这样的函数。

到目前为止,我所调查的是:

文件中没有任何内容,尤其是https://codex.wordpress.org/Class_Reference/WP_Rewriteflush_rewrite_rules, 不返回任何内容。因此,它不能用于检查可用性(例如。if (false == flush_rewrite_rules () )).

  • 英寸wp-admin/options-permalink.php, 在第130行附近,代码检查URL重写要求。然而,这段代码似乎不可重用。当然,我可以复制/粘贴此代码,但
  • 1 个回复
    最合适的回答,由SO网友:chrisguitarguy 整理而成

    你想要的WP_Rewrite::using_permalinks.

    <?php
    add_action(\'init\', \'wpse142273_add_rules\');
    function wpse142273_add_rules()
    {
        global $wp_rewrite;
        if ($wp_rewrite->using_permalinks()) {
            // Plan A
        } else {
            // Plan B
        }
    }
    
    Here\'s a larger example.

    <?php
    // inside a class somewhere
    public static function url($area, $additional=null)
    {
        global $wp_rewrite;
    
        if ($wp_rewrite->using_permalinks()) {
            $path = "/account/{$area}";
    
            if ($additional) {
                $path .= \'/\' . $additional;
            }
    
            if (\'/\' === $wp_rewrite->permalink_structure[count($wp_rewrite->permalink_structure) - 1]) {
                $path = trailingslashit($path);
            }
        } else {
            $q = array(
                static::ACCOUNT_VAR => $area,
            );
    
            if ($additional) {
                $q[static::ADDITIONAL_VAR] = $additional;
            }
    
            $path = \'?\'.http_build_query($q);
        }
    
        return apply_filters(\'frontend_accounts_url\', home_url($path), $area, $additional);
    }
    
    记住,盲目地打电话是可以的add_rewrite_rule 不使用永久链接时。无论如何,您都需要添加自定义查询变量(通过筛选query_vars) 因此,您的插件/主题在不重写的情况下仍然可以正常工作。

    结束

    相关推荐

    为什么不调用/触发“Plugins_Load”?

    我正在打电话load_plugin_textdomain 然而,一旦加载了插件,就不会发生这种情况。我确实激活了一个插件,所以这不应该触发吗?add_action(\"plugins_loaded\", \"test_override\"); function init_localization() { echo \"init_localization<br>\"; load_plugin_textdomain (&#x