我添加了一个新的自定义帖子类型,名为:website_bookmarks
我计划将其用作我的书签管理器(将我所有的书签从Google Chrome导出到我的自定义帖子类型),原因如下
可以轻松搜索书签可以添加标签(php、web设计等)
可以添加说明来更好地解释书签可以查看和排序,但是我可以选择查看和排序可以从任何在线位置访问可以与我的读者共享我的书签(可以选择将书签标记为私有或公共,这样我就可以成为唯一查看私有书签的人)确定还有其他原因让这成为一个好主意website_bookmarks 任何内容的帖子类型。
我已使用隐藏字段修改了搜索表单
<input type="hidden" name="post_type" value="website_bookmarks" />
因此,在我的URI搜索页面上,我将看到。。。
www.mydomain.com/?s=mysearchterm&post_type=website_bookmarks
问题是它
ONLY 显示我的常规博客文章的搜索结果,但没有来自我的自定义文章类型的结果。
如果我删除s=mysearchterm
从URI现在就是这样
www.mydomain.com/?post_type=website_bookmarks
然后,它将显示我的自定义帖子类型中的所有帖子。这表明
website_bookmarks 是我的帖子类型的正确名称,只是搜索部分工作不正常。它将从普通帖子中检索搜索结果,没有问题,只是从my website\\u bookmarks帖子类型中没有问题
它不应该显示我的博客帖子的任何结果,而应该只显示我的自定义帖子类型的结果website_bookmarks
有人能帮我吗?我不明白为什么它不起作用,我上面显示的修改搜索表单的代码,我在网上从其他人那里发现,它只需将搜索表单更改为我上面所做的,就可以在那里的博客上工作。
下面是我的全部搜索。php文件
<?php get_header(); ?>
<?php if (have_posts()) : ?>
<h1 class="pagetitle"><?php printf( __("Search results for <span>%s</span>", "vigilance"), get_search_query()); ?></h1>
<img class="archive-comment"src="<?php echo get_template_directory_uri(); ?>/images/comments-bubble-archive.gif" width="17" height="14" alt="Comments"/>
<div class="entries">
<ul>
<?php while (have_posts()) : the_post(); ?>
<li><a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php esc_attr( sprintf( __( \'Permanent Link to %s\', \'vigilance\' ), the_title_attribute( \'echo=false\' ) ) ); ?>"><span class="comments_number"><?php comments_number( \'0\', \'1\', \'%\', \'\' ); ?></span><span class="archdate"><?php the_time( __( \'M.j.y\', \'vigilance\' )); ?></span><?php the_title(); ?></a></li>
<?php endwhile; /* rewind or continue if all posts have been fetched */ ?>
</ul>
</div><!--end entries-->
<div class="navigation">
<div class="alignleft"><?php next_posts_link( __( \'« Older Entries\', \'vigilance\' )); ?></div>
<div class="alignright"><?php previous_posts_link( __( \'Newer Entries »\', \'vigilance\' )); ?></div>
</div><!--end navigation-->
<?php else : ?>
<h1 class="pagetitle"><?php printf( __("Search results for \'%s\'", "vigilance"), get_search_query()); ?></h1>
<div class="entry">
<p><?php printf( __( \'Sorry your search for "%s" did not turn up any results. Please try again.\', \'vigilance\' ), get_search_query());?></p>
<?php get_search_form(); ?>
</div><!--end entry-->
<?php endif; ?>
</div><!--end content-->
<?php get_sidebar(); ?>
<?php get_footer(); ?>
我甚至尝试在我的函数中使用下面的代码。php文件没有运气。。。
function mySearchFilter($query) {
$post_type = $_GET[\'post_type\'];
if (!$post_type) {
$post_type = \'any\';
}
if ($query->is_search) {
$query->set(\'post_type\', $post_type);
};
return $query;
};
add_filter(\'pre_get_posts\',\'mySearchFilter\');
下面是我用来创建网站\\u书签帖子类型的代码,您可以看到我已启用query\\u var和public\\u queryable,并已将exclude\\u from\\u search设置为true和false,以测试这两种方法,但运气不好
$bookmark_args = array(
\'labels\' => $bookmark_labels,
\'public\' => true,
\'publicly_queryable\' => true,
\'exclude_from_search\' => true,
\'show_ui\' => true,
\'show_in_menu\' => true,
\'query_var\' => true,
\'rewrite\' => array(
\'slug\' => \'bookmark\',
\'with_front\' => false),
\'taxonomies\' => array(\'bookmark_tags\'),
\'capability_type\' => \'post\',
\'has_archive\' => true,
\'hierarchical\' => false,
\'menu_position\' => 4,
\'can_export\' => true,
\'supports\' => array(
\'thumbnail\', //website thumbnail
\'excerpt\', //website description
\'title\', //website title
\'custom-fields\',
\'comments\'
)
);
register_post_type(\'website_bookmarks\', $bookmark_args);
最合适的回答,由SO网友:Brooke. 整理而成
你试过了吗if (!isset($post_type))
或if(empty($post_type))
?? 例如,我会尝试以下方法:
function mySearchFilter($query) {
$post_type = $_GET[\'post_type\'];
if ($query->is_search) {
if (!empty($post_type)) {
$query->set(\'post_type\', $post_type);
}
}
return $query;
}
add_filter(\'pre_get_posts\',\'mySearchFilter\');
EDIT: 下面是我的工作示例代码:
以下是我用于测试的CPT:
add_action( \'init\', \'register_cpt_website_bookmarks\' );
function register_cpt_website_bookmarks() {
$labels = array(
\'name\' => _x( \'Bookmarks\', \'website_bookmarks\' ),
\'singular_name\' => _x( \'Bookmark\', \'website_bookmarks\' ),
\'add_new\' => _x( \'Add New\', \'website_bookmarks\' ),
\'add_new_item\' => _x( \'Add New Bookmark\', \'website_bookmarks\' ),
\'edit_item\' => _x( \'Edit Bookmark\', \'website_bookmarks\' ),
\'new_item\' => _x( \'New Bookmark\', \'website_bookmarks\' ),
\'view_item\' => _x( \'View Bookmark\', \'website_bookmarks\' ),
\'search_items\' => _x( \'Search Bookmarks\', \'website_bookmarks\' ),
\'not_found\' => _x( \'No bookmarks found\', \'website_bookmarks\' ),
\'not_found_in_trash\' => _x( \'No bookmarks found in Trash\', \'website_bookmarks\' ),
\'parent_item_colon\' => _x( \'Parent Bookmark:\', \'website_bookmarks\' ),
\'menu_name\' => _x( \'Bookmarks\', \'website_bookmarks\' ),
);
$args = array(
\'labels\' => $labels,
\'hierarchical\' => false,
\'supports\' => array( \'title\', \'editor\' ),
\'public\' => true,
\'show_ui\' => true,
\'show_in_menu\' => true,
\'show_in_nav_menus\' => false,
\'publicly_queryable\' => true,
\'exclude_from_search\' => false,
\'has_archive\' => true,
\'query_var\' => true,
\'can_export\' => true,
\'rewrite\' => true,
\'capability_type\' => \'post\'
);
register_post_type( \'website_bookmarks\', $args );
}
链接:[已删除链接](搜索“书签”或“测试”,如果删除“post\\u类型”并搜索测试,您将获得更多结果)