自定义帖子类型嵌套在普通WordPress页面下

时间:2013-04-04 作者:dtbaker

EDIT Again, nope it\'s not impossible, just nasty. Solution below.


非常努力地让它工作。在这里尝试了许多关于stackexchange/溢出的建议

我的目标是简单地在我的自定义帖子类型上选择一个“页面父级”,并:

获得良好显示的永久链接,例如:页面/子页面/子自定义PostType/

  • 一个自定义帖子类型可以具有与另一个自定义帖子类型不同的父页面
  • (无需硬编码任何页面ID或自定义slug)
    • 这是我希望作为父级创建的“页面”:http://ultimateclientmanager.com/support/documentation-wiki/

      下面是我希望嵌套在该页面下的“Wiki”自定义帖子类型:http://ultimateclientmanager.com/support/documentation-wiki/change-request/

      我在代码中将“Wiki”自定义帖子类型slug设置为“支持/文档Wiki”,这使得永久链接URL看起来像上面一样。但是,“wiki”没有选择父项,因此菜单高亮显示不起作用(并且不可能为wiki项目设置不同的父页URL)。

      以下是我最近为让它发挥作用所做的一些尝试。

      将“wiki”项目post\\u parents设置为我的“页面”ID

    • 将自定义帖子类型重写slug设置为“支持/文档wiki”,这会生成一个URL,如:/support/documentation wiki/support/documentation wiki/change request/
    • 这会产生404错误wiki_page=support%2Fdocumentation-wiki%2Fchange-request&post_type=wiki_page&name=support%2Fdocumentation-wiki%2Fchange-requestwiki_page=support%2Fdocumentation-wiki%2Fchange-request&page=
    • 和:

      将“wiki”项目post\\u parents设置为我的“页面”ID

    • 将“wiki”帖子类型slug改回“wiki”(而不是“支持/文档wiki”)
    • 这会生成一个类似于:/wiki/support/documentation wiki/Change request的URL,这会产生404错误wiki_page=support%2Fdocumentation-wiki%2Fchange-request&post_type=wiki_page&name=support%2Fdocumentation-wiki%2Fchange-requestwiki_page=support%2Fdocumentation-wiki%2Fchange-request&page=
    • 和一次不顾一切的尝试,以获得正确的URL显示:

      将“wiki”项目post\\u parents设置为我的“页面”ID

    • 将“wiki”帖子类型slug改回“wiki”(而不是“support/documentation wiki”)
    • 在“wp”挂钩期间,将结构从“/wiki/%wiki\\u page%”更改为仅为“%wiki\\u page%”,如:$wp_rewrite->extra_permastructs[\'wiki_page\'][\'struct\'] = \'%wiki_page%\';pagename=support%2Fdocumentation-wiki%2Fchange-request&page=
    • 父页面正确显示在管理“wiki”列表和编辑区域中,只是在前端似乎没有任何进展。

      当前的永久链接设置Day and name http://ultimateclientmanager.com/2013/04/04/sample-post/

      这是3.5.1多站点设置。

    1 个回复
    SO网友:dtbaker

    算了吧!

    这是一个非常恶劣的黑客攻击,但我过滤了原始的WP“查询”,这样它就可以支持在一个URL中嵌套在一起的多个帖子类型。

    当您使用URL加载wordpress时,如/page/subpage/custom-post-name here/它将运行以下SQL来检查URL是否有效:

    SELECT ID, post_name, post_parent, post_type FROM wp_posts WHERE post_name IN (\'page\',\'subpage\',\'custom-post-name-here\') AND (post_type = \'wiki_page\' OR post_type = \'attachment\')

    当然,此查询不会返回任何结果。所以我们稍微修改了一下(讨厌!)因此,它将扩展对页面和自定义帖子类型的搜索:

    SELECT ID, post_name, post_parent, post_type FROM wp_posts WHERE post_name IN (\'page\',\'subpage\',\'custom-post-name-here\') AND (post_type = \'wiki_page\' post_type = \'page\' OR post_type = \'attachment\')

    这里还有一些其他内容可以从自定义帖子类型中删除“slug”要求(很可能做得更好,仍在学习WP重写!)

    完整代码:https://gist.github.com/dtbaker/5311512

    实例:(“support”是一个页面,“documentation wiki”是“support”的子级,“change request”是一个自定义的“wiki”帖子,也是“documentation wiki”的子级):http://ultimateclientmanager.com/support/documentation-wiki/change-request/

    如果任何人都能得到相同的URL结构、菜单突出显示和永久链接生成,而不必对WP查询进行讨厌的过滤,我会给他们买一杯(或三杯)啤酒。

    干杯,戴夫

    结束

    相关推荐

    Update page breaks permalinks

    从3.3.1开始,我有一个奇怪的副作用。当更新页面(或创建新页面)时,我的所有永久链接都会中断-单击相关更新页面上的查看页面将导致404找不到。这不会发生在帖子中。我担心我的permalinks/%postname%/新模式可能会出现问题,但我将其替换为YEAR/postname,没有发现任何差异。我检查并发现帖子名称字段中有一些重复,我更改或删除了任何可疑的重复。仍然没有变化。这是我的htaccess-# BEGIN WordPress <IfModule mod_rewrite.c>