SOLVED
见下面我的答案;我不能马上接受。
<小时>
Original post
我定制了一个帖子类型
sector
:
register_post_type( \'sector\',
array(
\'labels\' => array(
\'name\' => __( \'Sectors\' ),
\'singular_name\' => __( \'Sector\' )
),
\'public\' => true,
\'has_archive\' => false,
\'rewrite\' => array(\'slug\' => \'sector\')
)
);
我有一个名为“酒店与酒店”的部门,位于
site.com/sector/hotels-hospitality/
. 我在其他URL上有其他扇区。
我还有一个名为“扇区”的普通页面(位于site.com/sector/
) 以及一个名为“Hotels&Hospitality”的子页面,其URL也是site.com/sector/hotels-hospitality/
.
现在,当我导航到site.com/sector/hotels-hospitality/
这是显示的帖子类型页面。我可以让正常页面显示吗?这是该部门的特殊登录页。
我在函数中尝试了这个。我的主题php:
flush_rewrite_rules();
add_rewrite_rule(
\'sector/hotels-hospitality/\',
\'index.php?page_id=1700\', // 1700 = post_id of the Page
\'top\'
);
目前没有运气!我也尝试过不使用
\'top\'
param和这似乎没有什么区别。
Related Info
在此之后,我还编辑了“Hotels&Hospitality”部门的帖子类型slug
site.com/sector/hotels-hospitality/
到
site.com/sector/hotels
(这样想,至少我可以看到另一页),
,但现在当我转到site.com/sector/hotels-hospitality/
, 我被重定向到site.com/sector/hotels/
我无法撤销它!我试着重新保存permalinks罢工>然后我尝试将页面重命名为site.com/sector/hotels-hospitality-page/
现在是404。
我正在使用新安装的4.7.3版。
Update
@WebElaine帮助我从中删除重定向
site.com/sector/hotels-hospitality
到
site.com/sector/hotels
通过删除WPPosteta中的\\u wp\\u old\\u slug字段。
site.com/sector/hotels-hospitality-page/
仍将是404。
将要site.com/index.php?page_id=1700
正在重定向到site.com/sector/hotels-hospitality-page
, 给出404。
我想问题是该网站正在搜索一个包含大量酒店接待页面的行业帖子,但没有找到一个。。。还没到检查页面的程度。
SO网友:Sarah
我安装了Monkeyman重写分析器https://wordpress.org/support/plugin/monkeyman-rewrite-analyzer/ 这帮了大忙。我在Jan Fabry关于this post 这也帮助了我。
我在插件中发现的第一件事是,我的重写并没有得到添加;他们没有出现在逻辑中。结果是add_rewrite_rule()
除非刚刚刷新重写,否则函数无效。我取出了flush_rewrite_rules();
但每次测试更改时,我都会在管理面板中手动刷新permalinks。
一旦我将自定义帖子和页面重命名回相同的URLsectors/hotels-hospitality
, 我能够解决这个问题。正如@WebElaine在评论中所解释的,如果有额外的重定向,则会创建额外的重定向_wp_old_slug
字段保存在wp_postsmeta
表,它帮助我在编辑post-slug后解决了相关/次要重定向问题。
这是我的最后一个功能and it only works after flushing rewrites (单击“设置”>“永久链接”中的“保存”)。我还使用pagename
而不是page_id
但您可以使用其中一个。
add_action( \'init\', \'addMyRules\' );
function addMyRules(){
add_rewrite_rule(\'sector/hotels-hospitality\',\'index.php?pagename=sector/hotels-hospitality\',\'top\');
}
The
top
参数很重要,因为它意味着将在系统post类型检查之前检查要匹配的模式(使用上述插件时检查重写顺序,下面的屏幕截图)。
因此,当我转到匹配的URL时,WordPress显示的是页面,而不是帖子,因为这是列表中的第一个模式匹配。
SO网友:WebElaine
我要解决的第一个主要问题是删除名为“Hotels&Hospitality”的“sector”帖子然后,转到永久链接页面(设置>永久链接),并按原样保存规则,这将刷新重写规则。理论上,如果没有/sector/hotels hospitality/sector“贴子,WordPress应该检查并找到你要找的页面。你可能想使用一个Chrome隐姓埋名窗口来确保过去的重定向不会让人觉得有问题,而实际上没有。
如果这不起作用,请尝试使用CPT而不是页面。重新创建名为“Hotels&Hospitality”的“sector”帖子。创建CPT“扇区”时,添加“支持=>页面属性”,以便您的CPT可以使用页面模板。这样,您可以将页面样式应用于帖子,但不会混淆WordPress和要显示的帖子类型。
因此,请将您的CPT注册码更改为:
register_post_type( \'sector\',
array(
\'labels\' => array(
\'name\' => __( \'Sectors\' ),
\'singular_name\' => __( \'Sector\' )
),
\'public\' => true,
\'has_archive\' => false,
\'rewrite\' => array(\'slug\' => \'sector\'),
\'supports\' => array(\'title\', \'editor\', \'thumbnail\', \'revisions\', \'page-attributes\')
)
);
根据需要调整标题/编辑器/缩略图/修订-通过“页面属性”可以选择页面模板。然后,只需将页面内容复制到CPT中,删除页面,您就可以开始工作了。