使用高级自定义字段关系字段选择分类术语

时间:2017-01-24 作者:Lucy Brown

我有一个网站,我有一个称为“小横幅”的帖子类型,基本上是我需要在普通页面上调用的广告(这很好,我已经这样做了),但我还需要在分类术语上使用此功能。

ACF本身没有选择分类术语的功能,只是为了过滤其中的帖子进行选择。

我该怎么做?

这是我在普通页面上调用广告的代码-

<div id="small-banner-top">
                <?php 


                    $smallbanners = get_posts(array(
                        \'post_type\' => \'small-banner\',
                        \'posts_per_page\' => \'-1\',
                        \'meta_query\' => array(
                            array(
                                \'key\' => \'show_on_post\', // name of custom field
                                \'value\' => \'"\' . get_the_ID() . \'"\', // matches exaclty "123", not just 123. This prevents a match for "1234"
                                \'compare\' => \'LIKE\'
                            )
                        )
                    ));

                ?>


                         <div class="my-slider" style="width: 380px;">
                         <ul>

                            <?php if( $smallbanners ): ?>

                            <?php foreach( $smallbanners as $smallbanner ): ?>
                            <?php 

                            $photo = get_field(\'small_banner_image\', $smallbanner->ID);

                            $bannerlink = get_field(\'url\', $smallbanner->ID);

                            ?>



                            <li>
                                <a href="<?php echo $bannerlink; ?>">
                                    <img src="<?php echo $photo[\'url\']; ?>" alt="<?php echo $photo[\'alt\']; ?>">

                                </a>
                            </li>


                        <?php endforeach; ?>

                    <?php endif; ?>
                        </ul>
                    </div>

    </div>
到目前为止,我只使用了taxonomy字段选项,并选择了我希望它显示的分类术语,并在名为taxonomy-directory\\u entry\\u type的自定义页面上使用了此代码。php(分类术语称为目录条目类型)。

<?php 

                    /*
                    *  Query posts for a relationship value.
                    *  This method uses the meta_query LIKE to match the string "123" to the database value a:1:{i:0;s:3:"123";} (serialized array)
                    */

                    $smallbanners = get_posts(array(
                        \'post_type\' => \'small-banner\',
                        \'posts_per_page\' => \'-1\',
                        \'meta_query\' => array(
                            array(
                                \'key\' => \'show_on_tax\', // name of custom field

                                \'compare\' => \'LIKE\'
                            )
                        )
                    ));

                    ?>


                         <div class="my-slider" style="width: 380px;">
                         <ul>

                    <?php if( $smallbanners ): ?>

                        <?php foreach( $smallbanners as $smallbanner ): ?>
                            <?php 

                            $photo = get_field(\'small_banner_image\', $smallbanner->ID);

                            $bannerlink = get_field(\'url\', $smallbanner->ID);

                            ?>




    <li>
        <a href="<?php echo $bannerlink; ?>">
            <img src="<?php echo $photo[\'url\']; ?>" alt="<?php echo $photo[\'alt\']; ?>">
        </a>
    </li>











                        <?php endforeach; ?>

                    <?php endif; ?>
                        </ul>
                    </div>

这带来了所有的广告,但我正在努力创造逻辑,使其只带来选定的广告。任何帮助都将不胜感激,

谢谢

1 个回复
最合适的回答,由SO网友:Kieran McClung 整理而成

这是基于这样的假设,即您有一个名为“show\\u on\\u tax”的自定义字段,用于自定义分类法“目录条目类型”,该字段在编辑小横幅时显示(请参见下图)。这允许您选择要在其中显示横幅的自定义税务术语。这应该会让你得到排序,但如果没有,请留下评论。

<?php 
// taxonomy-directory_entry_type.php template file

// Get currently viewed term id
$term_id = get_queried_object()->term_id;

// Get all banners with show_on_tax custom field matching to $term_id
$args = array(
    \'post_type\' => \'small-banner\',
    \'posts_per_page\' => -1,
    \'meta_query\' => array(
        array(
            \'key\' => \'show_on_tax\',
            \'value\' => $term_id,
            \'compare\' => \'LIKE\'
        )
    )
);

// Create custom banner query
$banner_query = new WP_Query( $args );

// Check if anything is found and do the custom loop
if ( $banner_query->have_posts() ) : ?>

    <div class="my-slider" style="width: 380px;">
        <ul>

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

            <?php $photo = get_field( \'small_banner_image\', get_the_ID() ); ?>

            <li>
                <a href="<?php the_field( \'small_banner_image\' ); ?>">
                    <img src="<?php echo $photo[\'url\']; ?>" alt="<?php echo $photo[\'alt\']; ?>">
                </a>
            </li>

        <?php endwhile; ?>

        </ul>
    </div>

<?php
endif;

wp_reset_postdata();
?>

Custom field settings

相关推荐