【发布时间】:2014-07-16 21:58:41
【问题描述】:
我想要做的是从转发器字段中获取图像,并在我的主页上填充导致帖子的图像。
这对我来说通常很容易,但这里的问题是转发器字段中的每个帖子都有多个图像,这些图像位于高级自定义字段插件的灵活内容字段中。
我们的目标是在主页上以完全随机的顺序从“square_image”字段中获得无限数量的图像,这些图像会指向他们的特定帖子。因此,如果有 15 个帖子,每个帖子都有 15 个“square_images”,那么主页上将有 225 张图片以完全随机的位置链接到各自的帖子。
我想知道是否需要在 while 循环内构建一个数组,以便我可以在最后获得最终的随机顺序,而不是仅以随机顺序从 post 1 中的前 15 张图像,然后是接下来的 15 张图像从帖子 2 以随机顺序开始,这不是我想要做的。
<?php get_header(); /* Template Name: Homepage Looper */ ?>
<div id="homepage">
<?php
// the query
$args = array(
'post_type' => 'projects',
'posts_per_page' => '-1',
'orderby' => 'rand',
);
$the_query = new WP_Query( $args );$count = 1; ?>
<?php if ( $the_query->have_posts() ) : ?>
<div class="row">
<!-- the loop -->
<?php
while ( $the_query->have_posts() ) : $the_query->the_post();
if( have_rows('the_page_content') ):
while ( have_rows('the_page_content') ) : the_row();
if(get_sub_field('images')) :
while(has_sub_field('images')) : the_row();
?>
<?php
$image = get_sub_field('square_image');
if ( !empty($image) ):
// vars
$url = $image['url'];
$title = $image['title'];
$alt = $image['alt'];
?>
<div class="col-xs-6 col-sm-4 col-md-3 col-lg-2 home-tile-holder">
<a href="<?php the_permalink(); ?>" rel="<?php the_title(); ?>">
<img src="<?php echo $url; ?>" alt="<?php echo $alt; ?>" class="img-responsive home-tile" />
<span class="title"><?php the_title(); ?><br><img src="<?php echo get_stylesheet_directory_uri(); ?>/img/magnify.png"></span>
</a>
</div>
<?php endif; ?>
<?php
if($count % 6 == 0) {echo '</div><div class="row">';}
$count++;
?>
<?php
endwhile; // while(has_sub_field('images')
endif; // get_sub_field('images')
endwhile; // have_rows('the_page_content')
endif; // have_rows('the_page_content')
endwhile; // $the_query->have_posts ?>
<!-- end of the loop -->
</div>
<?php wp_reset_postdata(); ?>
<?php else: ?>
<p><?php _e( 'Sorry, no posts matched your criteria.' ); ?></p>
<?php endif; // $the_query->have_posts ?>
</div>
<div id="single_project" style="position: absolute; margin-left:100%; width:100%;">
</div>
<?php get_footer(); ?>
ACF 出口低于
if(function_exists("register_field_group"))
{
register_field_group(array (
'id' => 'acf_project-fields',
'title' => 'Project Fields',
'fields' => array (
array (
'key' => 'field_534efd890cd30',
'label' => 'Hero Image',
'name' => 'hero_image',
'type' => 'image',
'instructions' => 'Upload the large version for this post that will be used as the hero image on the top of the page.',
'save_format' => 'url',
'preview_size' => 'thumbnail',
'library' => 'all',
),
array (
'key' => 'field_534efdb70cd31',
'label' => 'Page Content',
'name' => 'the_page_content',
'type' => 'flexible_content',
'instructions' => 'Build out the content for this project.',
'layouts' => array (
array (
'label' => 'Image Row',
'name' => 'image_row',
'display' => 'row',
'min' => '',
'max' => '',
'sub_fields' => array (
array (
'key' => 'field_534efdea0cd32',
'label' => 'Images',
'name' => 'images',
'type' => 'repeater',
'column_width' => '',
'sub_fields' => array (
array (
'key' => 'field_53716523cfc52',
'label' => 'Square Image',
'name' => 'square_image',
'type' => 'image',
'column_width' => '',
'save_format' => 'object',
'preview_size' => 'thumbnail',
'library' => 'all',
),
array (
'key' => 'field_53716532cfc53',
'label' => 'Full Size Image',
'name' => 'full_size_image',
'type' => 'image',
'column_width' => '',
'save_format' => 'object',
'preview_size' => 'thumbnail',
'library' => 'all',
),
),
'row_min' => 1,
'row_limit' => 6,
'layout' => 'table',
'button_label' => 'Add Image Set',
),
),
),
array (
'label' => 'Text + Images',
'name' => 'text_images',
'display' => 'row',
'min' => '',
'max' => '',
'sub_fields' => array (
array (
'key' => 'field_5356d3a6a8ac9',
'label' => 'Title',
'name' => 'title',
'type' => 'text',
'instructions' => 'Enter in the title of this project if you wish for it to show above the text.',
'column_width' => '',
'default_value' => '',
'placeholder' => '',
'prepend' => '',
'append' => '',
'formatting' => 'html',
'maxlength' => '',
),
array (
'key' => 'field_534eff4ae5d31',
'label' => 'Text Content',
'name' => 'text_content',
'type' => 'wysiwyg',
'column_width' => '',
'default_value' => '',
'toolbar' => 'full',
'media_upload' => 'yes',
),
array (
'key' => 'field_534eff32e5d30',
'label' => 'Images',
'name' => 'images',
'type' => 'repeater',
'column_width' => '',
'sub_fields' => array (
array (
'key' => 'field_53716549cfc54',
'label' => 'Square Image',
'name' => 'square_image',
'type' => 'image',
'column_width' => '',
'save_format' => 'object',
'preview_size' => 'thumbnail',
'library' => 'all',
),
array (
'key' => 'field_53716557cfc55',
'label' => 'Full Size Image',
'name' => 'full_size_image',
'type' => 'image',
'column_width' => '',
'save_format' => 'object',
'preview_size' => 'thumbnail',
'library' => 'all',
),
),
'row_min' => '',
'row_limit' => 3,
'layout' => 'table',
'button_label' => 'Add Image Set',
),
),
),
array (
'label' => 'Images + Text',
'name' => 'images_text',
'display' => 'row',
'min' => '',
'max' => '',
'sub_fields' => array (
array (
'key' => 'field_534effafb045d',
'label' => 'Images',
'name' => 'images',
'type' => 'repeater',
'column_width' => '',
'sub_fields' => array (
array (
'key' => 'field_53716567cfc56',
'label' => 'Square Image',
'name' => 'square_image',
'type' => 'image',
'column_width' => '',
'save_format' => 'object',
'preview_size' => 'thumbnail',
'library' => 'all',
),
array (
'key' => 'field_53716576cfc57',
'label' => 'Full Size Image',
'name' => 'full_size_image',
'type' => 'image',
'column_width' => '',
'save_format' => 'object',
'preview_size' => 'thumbnail',
'library' => 'all',
),
),
'row_min' => '',
'row_limit' => 3,
'layout' => 'table',
'button_label' => 'Add Image Set',
),
array (
'key' => 'field_5356d3dba8aca',
'label' => 'Title',
'name' => 'title',
'type' => 'text',
'instructions' => 'Enter in the title of this project if you wish for it to show above the text.',
'column_width' => '',
'default_value' => '',
'placeholder' => '',
'prepend' => '',
'append' => '',
'formatting' => 'html',
'maxlength' => '',
),
array (
'key' => 'field_534effafb045c',
'label' => 'Text Content',
'name' => 'text_content',
'type' => 'textarea',
'column_width' => '',
'default_value' => '',
'placeholder' => '',
'maxlength' => '',
'rows' => '',
'formatting' => 'br',
),
),
),
),
'button_label' => 'Add Row',
'min' => '',
'max' => '',
),
),
'location' => array (
array (
array (
'param' => 'post_type',
'operator' => '==',
'value' => 'projects',
'order_no' => 0,
'group_no' => 0,
),
),
),
'options' => array (
'position' => 'normal',
'layout' => 'no_box',
'hide_on_screen' => array (
0 => 'the_content',
1 => 'excerpt',
2 => 'custom_fields',
3 => 'discussion',
4 => 'comments',
5 => 'format',
6 => 'featured_image',
7 => 'send-trackbacks',
),
),
'menu_order' => 0,
));
}
【问题讨论】:
-
我在您的帖子中没有看到灵活布局的代码。那部分真的与您的问题相关吗?还是您不需要它来回答问题?
-
从查看其余代码来看,完成所有帖子的随机输出的最佳方法似乎是创建一个包含所有帖子数据的数组,然后随机化该数组。您不能只创建一个帖子数组并将其随机化,因为您最终仍会遇到与现在相同的问题。您需要创建一个仅包含输出数据的数组,然后在打印之前随机化该数组。如果这是您要查找的内容,我可以在答案中编写一些代码来做到这一点。如果这不是你想要的,我只是不想写出来。
-
是的,你完全正确。灵活的内容类型在实际模板上播放以显示帖子,但是由于它们混合在其中,我认为它可能是相关的。你是对的,我想我把这件事复杂化了,我能看看你在想什么吗,我真的很感谢你的帮助!
标签: php wordpress while-loop advanced-custom-fields