这是我的问题:
我已经为某些类别指定了自定义帖子类型。当我搜索这些类别时,可以通过搜索或直接输入url。然而,如果我将一个普通的帖子类型分配给一个类别,它就会变得可搜索,并且可以通过url直接输入。我以为我的自定义帖子类型代码中包含了所有内容,但我一定错过了什么。如有任何帮助,将不胜感激:
add_action(\'init\', \'create_trainingplan_post_type\');
function create_trainingplan_post_type() {
register_post_type(\'trainingplan\', array(
\'labels\' => array(
\'name\' => \'Training Plans\',
\'singular_name\' => \'Training Plan\',
\'add_new\' => \'Add New Training Plan\',
\'add_new_item\' => \'Add New Training Plan\',
\'edit\' => \'Edit Training Plans\',
\'edit_item\' => \'Edit Training Plan\',
\'new_item\' => \'New Training Plan\',
\'view_item\' => \'View Training Plans\',
\'search_items\' => \'Search Training Plans\',
\'not_found\' => \'No Training Plans found\',
\'not_found_in_trash\' => \'No Training Plans found in Trash\'
),
\'public\' => true,
\'exclude_from_search\'=> false,
\'rewrite\' => array(\'slug\' => \'my-custom-training-plan\', \'with_front\' => true),
\'supports\' => array(
\'title\',
\'excerpt\',
\'editor\',
\'custom-fields\',
\'revisions\',
\'thumbnail\',
\'author\',
\'page-attributes\'
),
\'taxonomies\' => array(\'category\', \'post_tag\') // this is IMPORTANT
));
flush_rewrite_rules();
}
感谢您到目前为止的帮助,我已经添加了到目前为止收到的答案中的评论,以便在我的问题中更清楚地说明这一点:
@实际上,我可以搜索自定义帖子类型并找到它。这是因为无法搜索或找到仅分配给自定义帖子类型的类别。基本上,我试图让用户能够按类别进行搜索,但只分配给自定义帖子类型的类别不会出现。因此,即使我键入了该类别的直接url,也会出现一个错误页面:“很抱歉,我们在该url中找不到您要查找的类别。请尝试从邮件上方或侧面选择一个菜单项,以获取您的位置…”
@בנייתאתרים我将类别分配给自定义职位类型,就像您分配给普通职位一样。在写这篇文章的时候,我勾选了我想包含的类别。在“编辑帖子”面板中,它确实确认类别已分配给cpt。然而,当我转到类别url或搜索该类别内的帖子时,cpt不会显示。
再次感谢
SO网友:Bainternet
默认的搜索功能将只查找帖子和页面,因此您需要将post\\u类型添加到搜索中,可以通过两种方式完成此操作
使用“pre\\u get\\u posts”筛选器在查询之前添加您的帖子类型,如下所示:
function Search_CPT_Filter($query) {
$post_type = $_GET[\'type\'];
if (!$post_type) {
$post_type = array(\'post\',\'post type name\');
}
if ($query->is_search) {
$query->set(\'post_type\', $post_type);
};
return $query;
};
add_filter(\'pre_get_posts\',\'Search_CPT_Filter\');
或者,将帖子类型添加到隐藏字段中的搜索表单中,如下所示:
<input type="hidden" name="post_type" value="post type name" />
在这两种情况下,只需将“post type name”更改为您的post type的名称即可。