首页 > 解决方案 > 如何显示带有插件(高级自定义字段)字段组的帖子?

问题描述

我有一个php/wordpress代码(存在于abc.php 文件中),如下所示,它显示特定大小的图像。

php/wordpress(在abc.php 文件中):

<ul id="list-thumbs" class="list-grid">
    <?php
    while ( have_posts() ) : the_post();
        ?>
        <li class="list-grid__thumb shows-grid__item">
                    <a class="list-grid__img-link" href="<?php echo esc_url( get_the_permalink() ); ?>" tabindex="0">
                        <?php if ( has_post_thumbnail() ) { ?>
                            <?php
                            $image_id = get_post_thumbnail_id( get_the_ID() );
                            WORLD\Images\the_img_fit_figure( $image_id, 'list-grid__image', '(min-width: 450px) 50vw, 70vw', false ); ?>
                        <?php } ?>
                    </a>

        </li>
    <?php endwhile; ?>
</ul>

上面的代码从上到下显示大约 30-40 张图像,一行中有 4 张图像。

(a)所有这些图片都是 wordpress 中与post_type hello-world相关的特色图片

(b)每个帖子都有两个字段,行视图 (in_row_view)列视图 (in_column_view)来自高级自定义字段插件。我不确定我们是否可以将这两个字段称为自定义字段。

(c) Row ViewColumn View都是开关,可以启用YesNo。默认情况下,它设置为No

(d)对于行视图,我正在使用:

if(get_field('in_row_view' ) == '1'){   }

对于列视图,我正在使用:

if( get_field('in_column_view' ) == '1'){   }

我想要实现的是我想显示那些启用了Row View开关的帖子Yes

问题陈述:

我想知道我需要在上面的 php/wordpress 代码中进行哪些更改,以便它只显示那些将Row View开关启用为Yes的帖子。

可能我需要将此代码集成到上面if(get_field('in_row_view' ) == '1'){ }php/wordpress代码中。

标签: wordpressadvanced-custom-fieldsposts

解决方案


快速/草率的解决方案:

<ul id="list-thumbs" class="list-grid">
    <?php
    while ( have_posts() ) : the_post();
        // This will skip the loop
        if(get_field('in_row_view' ) != '1') { continue; }
        ?>
        <li class="list-grid__thumb shows-grid__item">
                    <a class="list-grid__img-link" href="<?php echo esc_url( get_the_permalink() ); ?>" tabindex="0">
                        <?php if ( has_post_thumbnail() ) { ?>
                            <?php
                            $image_id = get_post_thumbnail_id( get_the_ID() );
                            WORLD\Images\the_img_fit_figure( $image_id, 'list-grid__image', '(min-width: 450px) 50vw, 70vw', false ); ?>
                        <?php } ?>
                    </a>

        </li>
    <?php endwhile; ?>
</ul>

...“快速解决方案”的问题在于它不会呈现所需的“每页帖子”。更简单的方法是在查询级别包含或排除meta_query... 这可以通过使用pre_get_posts钩子“在飞行中”抓取查询来完成。

更优雅的解决方案

function pw_filter_query( $query ) {

    // Your conditions for NOT applying the meta query ... use wp conditionals! :)
    if( !$query->get('post_type') != 'your_post_type ) { return $query; }

        $query->set('meta_key', 'ecpt_color');
        $query->set('meta_value', 'green');

    }

}
add_action('pre_get_posts', 'pw_filter_query', 9999);

来源参考


推荐阅读