gpt4 book ai didi

php - 计算 ACF 中关系帖子的数量

转载 作者:行者123 更新时间:2023-12-01 23:26:04 25 4
gpt4 key购买 nike

我正在为一个乐队开发一个网站,您可以在其中添加演出并添加该特定演出中演奏的歌曲。

所以我创建了两种自定义帖子类型:- 演出- 歌曲

我有一个“关系”类型的自定义字段“歌曲”。此字段显示在自定义帖子类型上。这样我就可以将歌曲添加到特定的演出中。这非常有效。

但是我想在该网站的主页上显示一些统计数据:我想计算特定歌曲的播放次数并显示前 10 名。所以我想我必须循环演出自定义帖子类型并计算与“歌曲”的关系。

我认为这可以解决问题:

<?php 
$args = array(
'post_type' => 'gig'
);
?>

<?php $loop = new WP_Query($args); ?>

<?php if ( $loop->have_posts() ) : while ( $loop->have_posts() ) : $loop->the_post(); ?>

<?php
print_r(get_field('songs'))
//$song_count = count(get_field('songs'));
//echo $song_count . " ";

the_title();

?><br />

<?php endwhile; ?>

<?php else: ?>
<!-- No gigs available -->
<?php endif; ?>
<?php wp_reset_postdata(); ?>

您可以在这里找到 print_r 的结果:http://snippi.com/s/njzg3uu

例如:歌曲“A记忆”有两场演出。这就是为什么你可以在数组中找到它两次。歌曲“Wasted”只能找到一次,因为它只有 1 场演出。

最佳答案

您可以使用此代码创建所有歌曲的数组:

<?php 
$args = array(
'post_type' => 'gig'
);

$countArray = []; //create an array where you can put all the song id's and the number of times played
?>

<?php $loop = new WP_Query($args); ?>

<?php if ( $loop->have_posts() ) : while ( $loop->have_posts() ) : $loop->the_post(); ?>

<?php
$posts = get_field('songs');

if( $posts ):
foreach( $posts as $post):
setup_postdata($post);

//if the song id already exists -> count + 1
if (array_key_exists($post->ID, $countArray)){
$countArray[$post->ID]++;
}
else { // otherwise the song is played 1 time
$countArray[$post->ID] = 1;
}
endforeach;

wp_reset_postdata();
endif;
?>

<?php endwhile; ?>

上面的代码将创建一个歌曲的帖子 ID 及其在 post_type“gig”中使用的次数的数组。

现在您可以使用数组 $countArray并用它做任何你想做的事。在您的示例中,您想对其进行排序,因此您必须执行 arsort($countArray);这样数组就按照它的值(播放次数)从高到低排序。

然后你必须循环遍历数组: foreach ($countArray as $key => $value) { ?>

<?php echo get_post_permalink($key); //=the permalink of the song ?>
<?php echo get_the_title($key); //= the title of the song ?>
<?php echo $value; //number of times play in a gig ?>

<?php
}

所以完整的代码是:

<?php 
$args = array(
'post_type' => 'gig'
);

$countArray = [];
?>

<?php $loop = new WP_Query($args); ?>

<?php if ( $loop->have_posts() ) : while ( $loop->have_posts() ) : $loop->the_post(); ?>

<?php
$posts = get_field('songs');

if( $posts ):
foreach( $posts as $post):
setup_postdata($post);

if (array_key_exists($post->ID, $countArray)){
$countArray[$post->ID]++;
}
else {
$countArray[$post->ID] = 1;
}
endforeach;

wp_reset_postdata();
endif;
?>

<?php endwhile; ?>

<?php
arsort($countArray);

foreach ($countArray as $key => $value) {
?>

<?php echo get_post_permalink($key); //=the permalink of the song ?>
<?php echo get_the_title($key); //= the title of the song ?>
<?php echo $value; //number of times play in a gig ?>

<?php
}
?>

<?php else: ?>
<!-- No gigs available -->
<?php endif; ?>
<?php wp_reset_postdata(); ?>

关于php - 计算 ACF 中关系帖子的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58800667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com