【问题标题】:Wordpress Custom Post Type Query IssueWordpress 自定义帖子类型查询问题
【发布时间】:2015-03-04 15:55:51
【问题描述】:

在摸了近 2 个小时后,我无法解决这个难题。任何可以帮助我的人,我都会非常感谢他。

我在 wordpress 中创建了一个自定义帖子类型“属性”。我正在尝试使用以下代码列出页面中的属性。除了图像之外,所有这些都显示良好。

<?php
$conarg = array (
'post_type' => 'properties',
'order_by' => 'menu_order',
'order' => 'ASC'
);

$condo_query = new WP_Query( $conarg );
    if ( $condo_query->have_posts() ) { ?>
        <?php 
            while ( $condo_query->have_posts() ) {
            $condo_query->the_post();
        ?>

        <?php

            $condo_images_max   = 5;
            $condo_items = array();
            for($i=1; $i <= condo_images_max; $i++) {

                    //check if image exits
                $img_attachment_id  = get_field('gallery-image-'.$i);

                if(!empty($img_attachment_id)) {
                    $condo_items[$i] = array(
                        'image' => wp_get_attachment_image_src($img_attachment_id, 'medium')
                    );
                }
            }

            $condo_items_keys = array_keys($condo_items);
        ?>

    <div class="box col-md-4 col-xs-12">
        <div class="flexslider">
            <ul class="slides">
                <?php
                    for($i=0; $i < count($condo_items) ; $i++) {
                    $image  = $condo_items[$condo_items_keys[$i]]['image'];
                ?>
                <li>
                    <img src="<?php echo $image[0]; ?>" alt="Carousel Image" />
                </li>

                <?php
                }
                ?>

            </ul>
        </div>

        <?php echo '<h2 class="condo-title">' . get_the_title() . '</h2>';
            echo'<ul class="condo-details">';

            if(get_field('area_range')) {
                echo '<li><span>SQ.FT RANGE:</span> ' . get_field('area_range') . '</li>';
                }

            if(get_field('room_view')) {
                echo '<li><span>ROOM VIEW:</span> ' . get_field('room_view') . '</li>';
                }

            if(get_field('price_range')) {
                echo '<li><span>PRICE RANGE:</span> ' . get_field('price_range') . '</li>';
                }
            ?>


            <a class="condo-btn" href="<?php the_permalink(); ?>"><?php _e('VIEW DETAILS'); ?></a>

            <?php   
        echo'</ul></div>';
    }
} 
else {
    echo'Sorry! No Condos are available at the moment!';
}
/* Restore original Post Data */
wp_reset_postdata();

?>

【问题讨论】:

  • 请任何人帮助我!
  • 你能告诉我$img_attachment_id = get_field('gallery-image-'.$i);的输出吗?
  • 什么也不输出..这是实际问题。
  • 您确定您的字段在 ACF 中具有 gallery-image-1、gallery-image-2 等名称吗?你已经为他们设置了图像吗?您是否告诉它保存图像 ID 而不是对象的默认值?
  • @NathanDawson 是的,它们就像你说的那样设置好了。见screencast.com/t/mNi4InQM9

标签: php wordpress custom-post-type flexslider advanced-custom-fields


【解决方案1】:

正如我在评论中提到的,可能值得切换到 PRO 版本并使用中继器字段。

在您的问题中,您不必要地构建一个数组,然后使用 for 而不是 foreach 循环遍历您的数组,从而使问题变得过于复杂。

删除构建数组的代码并尝试使用此代码代替当前的输出代码:

<ul class="slides">
    <?php // Set maximum number of images to check.
    $condo_images_max = 5;

    for ( $i = 1; $i <= $condo_images_max; $i++ ) {

        // Get image ID.
        $image_id = get_field( 'gallery-image-' . $i );

        // Check if image ID was found.
        if ( $image_id ) {
            // Output medium image in an li tag.
            echo '<li>' . wp_get_attachment_image( $image_id, 'medium' ) . </li>';
        }
    } ?> 
</ul>

如果您需要能够控制图像元素的输出并以您在问题中显示的方式显示它,您可以使用:

...

if ( $image_id ) {
    // Get image source.
    $image = wp_get_attachment_image_src( $image_id, 'medium' );

    // Check image source was found.
    if ( $image ) {
        echo '<li><img src="' . $image[0] . '" alt="Carousel Image" /></li>';
    }         
}

...

这样做有一个问题需要注意(也是我建议使用中继器的原因之一)。

假设您有 6 个图像字段,而一个属性正在使用所有 6 个图像。然后管理员决定删除第一个图像,因此该属性现在有 5 个图像。代码仍然可以工作,因为我们在尝试输出之前检查是否找到了图像,但不是显示所有 5 张图像,您只会看到其中的 4 张。图片 #1 是空的,我们已经告诉它停止照顾图片 #5。

【讨论】:

  • 非常感谢@Nathan Dawson。非常感谢您的帮助。!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-07
  • 1970-01-01
  • 2015-09-05
  • 2012-11-29
  • 1970-01-01
相关资源
最近更新 更多