Wordpress&x2B;PHP:查询POST以查找包含自定义字段数组(其中包含特定键)的POST
我有两种帖子类型:艺术家和事件 通过在事件编辑器中放置所有艺术家的检查列表,我将艺术家与事件关联起来,以便多个艺术家可以与多个事件关联。事件编辑器上的艺术家自定义字段保存为艺术家帖子ID数组 在“活动”页面上,我显示了每个活动的艺术家列表,包括以下内容:Wordpress&x2B;PHP:查询POST以查找包含自定义字段数组(其中包含特定键)的POST,php,arrays,wordpress,Php,Arrays,Wordpress,我有两种帖子类型:艺术家和事件 通过在事件编辑器中放置所有艺术家的检查列表,我将艺术家与事件关联起来,以便多个艺术家可以与多个事件关联。事件编辑器上的艺术家自定义字段保存为艺术家帖子ID数组 在“活动”页面上,我显示了每个活动的艺术家列表,包括以下内容: //Get Event Artists $postID = $post->ID; $meta = get_post_meta($postID, $_artistMeta->$postID, TRUE);
//Get Event Artists
$postID = $post->ID;
$meta = get_post_meta($postID, $_artistMeta->$postID, TRUE);
$artists = unserialize($meta['_artistMeta'][0]);
$output = array();
foreach ($artists['artistName'] as $artist) {
$theArtist = get_post($artist);
$output[] = '<li><a href="'.get_permalink($theArtist->ID).'">'.$theArtist->post_title.'</a></li>';
}
<?php if($output) { ?>
<div class="tw-event-artists bg1">
<ul class="nav-inl group me c2 comma-list">
<li class="bo"><?php echo $featured; ?>:</li>
<?php echo implode('', $output); ?>
</ul>
</div>
<?php } ?>
//获取事件艺术家
$postID=$post->ID;
$meta=get\u post\u meta($postID,$\u artistMeta->$postID,TRUE);
$artists=unserialize($meta[''u artistMeta'][0]);
$output=array();
foreach($artists['artistName']作为$artist){
$theArtist=get\u post($artist);
$output[]='';
}
- :
我现在试图找到的问题是尝试“反向走”。因此,在我的艺术家档案中,我想找到每位艺术家的最新活动
我需要创建一个自定义查询来查找其艺术家数组包含当前艺术家slug的事件帖子
我认为这个教程是一个很好的起点,但我的PHP技能还不足以破解它
如何编写此查询以获得我想要的内容
谢谢
我目前实现这一点的方法是这样的,放在我的艺术家档案模板的循环中,但我认为这将是非常缓慢和低效的,因为它必须为每个艺术家获取每一个事件
<?php
$artistID = $post->ID;
$args = array(
'eventDisplay'=> 'upcoming',
'posts_per_page' => -1
);
$events = tribe_get_events($args);
$has_date = false;
if ($events):
global $post;
foreach ($events as $post):
setup_postdata($post);
//Get Event Artists
$postID = $post->ID;
$meta = get_post_meta($postID, $_artistMeta->$postID, TRUE);
$artists = unserialize($meta['_artistMeta'][0]);
foreach ($artists['artistName'] as $artist) {
if($artist == $artistID) {$has_date = true;}
}
endforeach;
endif;
?>
<?php if($has_date) {echo 'HAS DATE';} ?>
一些想法
根据您的示例,不清楚您是否使用WP_查询类来检索事件帖子。传递给grabe\u get\u events()
函数的参数表明您只是在使用get\u posts()
检索事件帖子
我建议使用WP\u Query
进行二次循环。这使您可以通过meta_键/值轻松查询帖子:
$query_args = array( 'post_type' => 'event', 'meta_key' => '_artist_id', 'meta_value' => '5' );
$event_query = new WP_Query( $query_args );
if( $event_query->have_posts() ) {
while( $event_query->have_posts() ) {
$event_query->the_post();
...
// standard loop stuff goes here
这将只返回\u artist\u id
值为5的事件帖子
有关详细信息,请参见本页:
需要注意的是,不能将其用于序列化的post元数据。如果您想按元值进行查询,则需要修改存储事件/艺术家数据的方式,以将要按元值进行查询的字段拆分为它们自己的单个post元字段
然而,使用WP\u Query
的一个很好的好处是,当从数据库检索帖子时,所有相关的帖子元也会被提取并缓存在内存中。这意味着从WP\u Query
循环内部调用get\u post\u meta()
将不会生成额外的数据库查询,因为这些值存储在内存中,get\u post\u meta()
非常明智,总是先检查那里
<> P>一个更大的问题,你的问题是很多人认为是WordPress的一个缺点——它没有提供一个安全的内置的标准化机制来将文章联系到帖子。
有关血淋淋的详细信息,请查看此trac票证上的评论线程:
一个流行的插件,通过创建一个新的数据库表来保存多对多关系来解决这个问题:
这可能会有帮助:mods注意:这个问题更适合WPSE。