自定义重写规则正在将所有内容发送到index.php

时间:2015-01-10 作者:Aly

我正在创建一个网站,在这里,用户可以团队合作创作电影。目前,我正在为团队经理在前端设置一个编辑页面。我刚刚对一个查询变量进行了一个简单的isset()检查,没有将视图发送到新模板页面的值。因此,无论查询变量的值是什么,如果在URL中调用它,它都会转到新模板。

那部分工作正常。模板在团队/(teamname)加载得很好?管理。我所要做的就是重写它,让它看起来像是团队/(teamname)/管理。

但我的问题是它不起作用,前端的每个页面现在都被重定向到索引。php。除索引之外的所有。php?团队=废话(&A);管理调用的其他自定义帖子?团队=。

这是我的自定义重写规则文件:

function generate_manage_rewrite_rules() {
    global $wp_rewrite;

    $new_rules = array(
        "(team|film)/([^/]+)/manage/?$" => "index.php?".$wp_rewrite->preg_index(1)."=".$wp_rewrite->preg_index(2)."&manage" 
    );
    $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}

add_filter(\'rewrite_rules_array\', \'generate_manage_rewrite_rules\');
我的。htaccess文件,我没有接触过:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /sitename/
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /sitename/index.php [L]
</IfModule>

# END WordPress
以及用于设置模板重定向和查询变量的文件(尽管我认为这不是问题):

function templateInclude( $template )
{
    if (is_single()) {

        global $wp_query;

        if( isset ( $wp_query->query_vars[\'manage\'] ) ) {

            if ( is_manager() ) {

                $new_template = locate_template( array( \'/template-team-manage.php\' ) );
                if ( \'\' != $new_template ) {
                    return $new_template ;
                }
            }
        }
    }

    return $template;
}
add_action( \'template_include\', \'templateInclude\' );
我还尝试安装Rewrite Analyzer plugin 尝试解决问题,但安装后我根本无法加载。

1 个回复
SO网友:Aly

终于明白了。1) 我是在“rewrite\\u rules\\u array”调用第一个函数,而不是在“init”调用,这太愚蠢了。2) 它仍然存在一些问题,但我探索了另一个现在看来显而易见的领域,但我最初掩盖了这一点,因为它似乎是。

https://codex.wordpress.org/Rewrite_API/add_rewrite_endpointhttps://make.wordpress.org/plugins/2012/06/07/rewrite-endpoints-api/

只需创建一个端点。Wordpress已经有了内置的功能来完成我想做的事情,但我花了三天时间才找到它。

我将上述内容(除了.htaccess)替换为:

function manage_endpoint() {

    add_rewrite_endpoint( \'manage\', EP_PERMALINK );

}
add_filter(\'init\', \'manage_endpoint\');

结束

相关推荐

强化WordPress:使用htaccess阻止/包含

此页https://wordpress.org/support/article/hardening-wordpress/表示这应该包含在中。htaccess file阻止对includes目录中文件的请求。# Block the include-only files. <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^wp-admin/includes/ - [F,L]&#x