我有两个自定义的帖子类型,称为艺术家和绘画。这两种帖子类型都有一个使用高级自定义字段插件创建的名为艺术家名的自定义字段。我需要能够匹配自定义字段从这两个帖子类型,与对方,以显示更多的信息。
仅在查询中的参数和循环下面粘贴。如果有必要,我会发布更多的代码。
<?php
$artist_name = get_field('artist');
$args = array(
'post_type' => 'artists',
'meta_value' => $artist_name
);
$query_artist = new WP_Query( $args );
if ( $query_artist->have_posts() ) {
while ( $query_artist->have_posts() ) {
$query_artist->the_post(); ?>
<p class="artist-name"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></p>
<?php }
} else {
echo 'Artist not found';
}
wp_reset_postdata(); ?>
此代码在主页的模板文件中正常工作,但在搜索结果页面中总是打印出'Artist not found'。我直接从主页模板复制了这段代码,所以拼写错误不是问题。这事让我头疼很久了。读这篇文章的人会知道发生了什么吗?
谢谢。
好的,所以我终于得到了我想要的工作,但我不知道为什么下面的代码工作和我原来的没有,因为它们都是类似的方法来做一个新的查询。
如果其他人有同样的问题,下面是代码:
<?php
// Permalink for artist
$artist_name = get_field('artist');
global $post;
$posts = get_posts( array( 'post_type' => 'artists', 'meta_value' => $artist_name ) );
if( $posts ):
foreach( $posts as $post ) :
setup_postdata($post); ?>
<p class="artist-name"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></p>
<?php endforeach;
wp_reset_postdata();
endif; ?>
我认为wordpress没有在搜索中自动包含自定义类型。
你可以使用像https://wordpress.org/plugins/advanced-custom-post-search/这样的插件或者在functions.php
中编写你自己的函数function rc_add_cpts_to_search($query) {
// Check to verify it's search page
if( is_search() ) {
// Get post types
$post_types = get_post_types(array('public' => true, 'exclude_from_search' => false), 'objects');
$searchable_types = array();
// Add available post types
if( $post_types ) {
foreach( $post_types as $type) {
$searchable_types[] = $type->name;
}
}
$query->set( 'post_type', $searchable_types );
}
return $query;
}
add_action( 'pre_get_posts', 'rc_add_cpts_to_search' );
示例来自http://www.remicorson.com/include-all-your-wordpress-custom-post-types-in-search/