在自定义POST类型中通过固定链接结构传递变量

时间:2013-10-30 作者:ThePHPUnicorn

我真的很头疼,不知道该怎么办。基本上,我正在建立一个带有“慈善机构”自定义帖子类型的网站。列出了许多慈善机构,我们将以RSPB为例。

因此,访问“example.com/charities/rspb”将加载自定义的帖子类型,这很好。我要做的是传递一个变量来更改页面内容:

实例com/慈善机构/rspb/联系人/

如果传递此URL,我希望“contacts”的查询变量为true,或者类似地:

实例com/慈善机构/rspb/捐赠信息/

。。。如果传递了此URL,则将“捐赠信息”的查询变量设置为true,等等。

我已尝试采用此解决方案:Passing variables through permalink structure

没有运气。它可以在“charities”页面上运行(该页面可以很好地加载archive-charities.php模板文件,并可以向其传递变量),但我无法获得任何将变量传递给自定义帖子本身的工作。

另外,我正在Apache2服务器(ubuntu)上运行WP 3.7。任何想法或建议都会很好。我花了相当多的时间研究这个和permalink结构,但我仍然不知道如何让它在我的场景中工作。提前感谢您的帮助。

**编辑-这是我的代码!(谢谢你的提醒!)**

    // Register the variables that will be used as parameters on the url
    function add_my_var($public_query_vars) {

        array_push($public_query_vars[], \'contacts\', \'donation-info\', \'comments\');
        return $public_query_vars;
    }

    add_filter(\'query_vars\', \'add_my_var\');

    function do_rewrite() {

        foreach (array(\'contacts\', \'donation-info\', \'comments\') as $item) {
            add_rewrite_rule(\'(charities)/[/]?([^/]*)$\', \'index.php?pagename=charities&\'.$item.\'=$matches[2]\',\'top\');
        }

    }
    add_action(\'init\', \'do_rewrite\');

    // ...Get the query vars on template file
    get_query_var(\'contacts\');

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

我在重写规则中立即看到的一个问题是这一部分:

index.php?pagename=charities
您没有名为“charities”的页面,您有一个自定义的帖子类型,因此应该是:

index.php?charities=$matches[1]
假设您的自定义post类型查询变量为charities.

不过,也就是说,我不会为此添加重写规则,如果您使用add_rewrite_endpoint 而是:

add_rewrite_endpoint( \'contacts\', EP_PERMALINK );
add_rewrite_endpoint( \'donation-info\', EP_PERMALINK );
add_rewrite_endpoint( \'comments\', EP_PERMALINK );
添加这些内容并刷新重写后,您将能够检查contacts, donation-info, 和comments 数组键存在于$wp_query->query_vars.

结束

相关推荐

Subpages Permalinks Issues

我的网站看起来像:Page-1 (page.php)。。。Subpage-1 (custom-collection.php; 自定义帖子类型)。。。。。。Filtering Output-Post (custom-collection-single.php)当我使用打开过滤输出帖子时/%postname% 对于permalinks,我得到404错误页。一些代码:custom-collection.php<?php $args = array( \'post_type\' => \'weine\