我有以下代码来定义producto
自定义类型帖子:
add_action(\'init\', \'custom_post_producto\');
function custom_post_producto() {
$args = array(
"label" => \'Productos\',
"labels" => $labels,
"description" => "Artículos a la venta dentro del sitio web.",
"public" => true,
"publicly_queryable" => false,
"show_ui" => true,
"show_in_rest" => false,
"has_archive" => false,
"show_in_menu" => true,
"exclude_from_search" => true,
"capability_type" => "page",
"map_meta_cap" => true,
"hierarchical" => false,
// "rewrite" => array( "slug" => "producto", "with_front" => true ),
"rewrite" => true,
"query_var" => true,
"menu_icon" => "dashicons-products",
"supports" => array( "title", "thumbnail" )
);
register_post_type("producto", $args);
// flush_rewrite_rules();
}
而且,正如标题所提出的问题,
single-{post_type}.php
未加载并重定向到站点索引。
现在,我已经花了几个小时试图找出这个问题。我试过刷新重写规则flush_rewrite_rules()
紧接着register_post_type()
, 更改(甚至删除)rewrite
中的属性$args
阵列,重新保存永久链接设置,甚至安装Rewrite Rules Inspector plugin 检查是否一切正常,并一次又一次刷新重写规则,但都没有用。我甚至重新安装了整个网站并输入了新信息,但问题仍然存在。
为了记录在案,我正在localhost
在Windows 10上使用XAMPP 5.6.19,并使用Wordpress 4.5.2。
提前感谢您的帮助。
最合适的回答,由SO网友:Tim Malone 整理而成
刷新重写规则(只需访问设置->永久链接页面即可)是一个很好的步骤,因为这通常是这些问题被忽视的原因。
然而,正如米洛在评论中所说,在这种情况下publicly_queryable
如果希望这些帖子显示在前端,则参数必须为true。
从docs for register_post_type():
public
(布尔)(可选)控制类型对作者可见的方式(show_in_nav_menus
, show_ui
) 和读者(exclude_from_search
, publicly_queryable
).<默认值:false
publicly_queryable
(布尔)(可选)是否可以在前端执行查询作为parse\\u request()的一部分<默认值:公共参数的值
正如你所看到的,正如米洛所说,只是避免设置publicly_queryable
在这种情况下会让事情变得更简单。
我肯定会建议你阅读这些文档,以了解每个属性的作用,但我意识到,一开始你很难理解!
关于评论中的第二个问题:
做public
是否显示模板?和has_archive
或rewrite
?
public
是一种快速覆盖,通常可以一次性控制帖子类型的所有后端和前端可见性:除非您使用上述四个更显式的选项中的任何一个来覆盖它。对于前端,这些是publicly_queryable
, 正如我们已经解决的,以及exclude_from_search
. 您已设置exclude_from_search
这是真的,所以无论你的目标是什么public
, 在搜索(或分类术语列表)中找不到此帖子类型。has_archive
不会影响是否可以查看您的单个帖子类型,但会打开和关闭查看所有帖子存档“循环”的选项-在http://example.com/your_rewrite_slugrewrite
不会影响您帖子的公共可见性;URL将是什么。URL必须是某种东西,因此如果不设置重写值,它将默认为post\\u类型名称,在本例中为“producto”
文档中也涵盖了其中的每一项,因此我将再次提及-一定要仔细阅读。投资是值得的!:)