对于带有GET变量的自定义POST类型,WP给出404错误

时间:2017-04-22 作者:kks21199

我使用以下方法将$\\u GET变量添加到wordpress中的自定义帖子类型中。

 add_filter(\'query_vars\', \'add_type2_var\', 0, 1);

function add_type2_var($vars){ $vars[] = \'type2\'; return $vars; }

add_rewrite_rule(\'/?c/(.[^/])/(.[^/])/(.*)$\',"/c/$1/$2?type2=$3",\'top\');
我的自定义帖子类型是非层次帖子。这些帖子的链接可以正常工作,但当我尝试在斜杠后的末尾添加一些内容时,链接就停止工作了。

如果我添加show 在…的结尾http://127.0.0.1/wp/c/default/dd http://127.0.0.1/wp/c/default/dd/show 该链接显示404错误。虽然当我在末尾加上数字时效果很好http://127.0.0.1/wp/c/default/dd/123456 我还可以得到123456 使用$_GET 在php中。

我不确定问题出在哪里,但我猜测wordpress在我的函数之前给出了404错误。我有一个函数使用single_template 滤器

UPDATE:

我在“template\\u redirect”中添加了一个函数。

function CPTTest() 
{
    if ( is_singular(\'cpt\') ) 
    {
       echo \'cpt\';
    }
    elseif ( is_singular() ) {
       echo \'post\';
    }
    else
    {
        echo \'none\';
    }
    var_dump($_GET);
    die();
}
当我使用url时,这可以很好地工作http://127.0.0.1/wp/c/default/dd/show. 唯一的问题是它不承认它是cpt帖子。但它确实认识到http://127.0.0.1/wp/c/default/dd/123456 作为cpt职位。使用时的结果相同wp 操作而不是template_redirect.

2 个回复
最合适的回答,由SO网友:Milo 整理而成

数字之所以有效,是因为单个帖子可以分页,并且有一个重写规则来支持这一点。

如果要在永久链接后添加其他参数,请添加rewrite endpoint.

add_rewrite_endpoint( \'show\', EP_PERMALINK );
编辑-这里有一个内部重写示例,假设您的自定义post类型slug是type1:

add_rewrite_rule(
    \'c/([^/]+)/([^/]+)/([^/]+)/?$\',
    \'index.php?type1=$matches[1]&type2=$matches[3]\',
    \'top\'
);

SO网友:Oleg Butuzov

它给出了404,因为在您的请求中找不到任何内容。我想是因为type 已注册query_var. 您可以尝试使用插件调试这种情况:调试栏(选项卡“请求”)和调试栏重写规则(重写规则)。

相关推荐

如何将Page-{slug}.php这样的页面模板文件移到子目录中?

我想移动页面模板文件,如page-{slug}.php 到我的主题中的子目录,WordPress将自动识别它们。如果所述表单的页面模板在子目录中不存在,那么WordPress应该回到默认的模板加载规则。我如何才能做到这一点?Note-1: This 对于页面模板和this 链接提及template-parts/page, 这不是一回事。Note-2: 我有多个page-{slug}.php 像页面模板文件一样,我想将它们移动到子目录中,以获得更整洁的文件组织。