提问者:小点点

按自定义字段查询帖子


我正在建立一个网站使用先进的自定义领域,有游艇出售。游艇使用一种称为“游艇”的定制立柱类型

个人游艇清单中的一个字段为真/假值,用于确定是否应为特色清单。(这原本是一个复选框,但在尝试了本文中的答案后,我更改了它)

高级自定义字段:无法按自定义字段查询帖子

我试图在主页上显示特色列表的预览,但无法使其正常工作。

我最初从ACF文档中尝试了这段代码

编辑:我开始只是试图获取标题,但我还需要其他字段

<section class="featured-yachts">
    
    <h2>FEATURED YACHTS</h2>
    
    <?php 
    
    // args
    $args = array(
        'numberposts'   => -1,
        'post_type'     => 'yachts',
        'meta_key'      => 'featured',
        'meta_value'    => 'yes'
    );
    
    
    // query
    $the_query = new WP_Query( $args );
    
    ?>
    <?php if( $the_query->have_posts() ): ?>
        <ul>
        <?php while( $the_query->have_posts() ) : $the_query->the_post(); ?>
            <li>
                <a href="<?php the_permalink(); ?>">
                    <?php the_title(); ?>
                </a>
            </li>
        <?php endwhile; ?>
        </ul>
    <?php endif; ?>
    
    <?php wp_reset_query();  // Restore global post data stomped by the_post(). ?>
    
    
    
</section>  

现在在切换到一个真实的假字段后有了这个

<section class="featured-yachts">
    
    <h2>FEATURED YACHTS</h2>
    
    <?php 
    
    $args = array(
        'posts_per_page' => -1,
        'meta_query' => array(
            array(
                'key' => 'featured',
                'value' => '1',
                'compare' => 'LIKE',
            )
        ),
    );

    $my_posts = new WP_Query($args);

    if ($my_posts->have_posts()) {

        while ($my_posts->have_posts()) : $my_posts->the_post();

          echo get_the_title();

        endwhile;
    wp_reset_postdata();

}
    
    ?>
    
</section>  

我也尝试过编辑这个:如何通过高级自定义字段过滤自定义帖子复选框

但是,我还是不能让它工作。

这些回报中最重要的是h3标题

我搞不清楚问题出在哪里。

提前感谢任何帮助

编辑:我至少有一篇帖子使用了自定义帖子类型“Yachtss”,该类型设置为true,用于特写。

我仍然有很多字段要添加,但我本来期望这输出h3标题,然后标题的帖子标记为特色。

最后,我希望它的功能与最新的帖子预览非常相似,但仅当“featured”true/false设置为yes时才显示自定义字段

我创建了一个名为“特色游艇”的ACF字段,并向古腾堡注册了该区块,但其中没有实际的ACF字段,它仅用于调用文件“内容特色游艇区块”。php'中包含我正在尝试修复的代码。

我试图用从各个游艇列表中提取的数据来填充这个特色游艇块中的后期预览。在这些列表中有“特色”真/假选项。屏幕截图已连接。

这是我注册CPT的代码

// Our custom post type function
function create_posttype() {
 
    register_post_type( 'yachts',
    // CPT Options
        array(
            'labels' => array(
                'name' => __( 'Yacht Listings' ),
                'singular_name' => __( 'Yacht' ),
                'supports' => array( 'title', 'editor', 'comments', 'excerpt', 'custom-fields', 'thumbnail' ),
                'add_new' => __( 'New Yacht Listing'),
                 'add_new_item' => __( 'Add New Yacht Listing'),
                 'edit_item' => __( 'Edit Yacht Listing'),
                 'new_item' => __( 'New Yacht Listing'),
                 'view_item' => __( 'View Listings'),
                 'search_items' => __( 'Search Listings'),
                 'not_found' =>  __( 'No Yacht Listings Found'),
                 'not_found_in_trash' => __( 'No yacht Listings found in Trash')
            ),
            'public' => true,
            // 'has_archive' => true,
            'rewrite' => array('slug' => 'yachts'),
            'show_in_rest' => true,
            'menu_icon' => 'dashicons-sos',
            'hierarchical' => true,
            'taxonomies' => array('category')
        )
    );
}

另一个编辑-我假设如果我可以得到标题字段来显示,其他字段将很容易,但我也不能得到它们,因此我还需要考虑如何从列表中添加其他字段

我试过的代码如下

<h2>FEATURED YACHTS</h2>

<?php 

$args = array(
    'posts_per_page' => -1,
    'meta_query' => array(
        array(
            'key' => 'featured',
            'value' => 'yes',
            'compare' => 'LIKE',
        )
    ),
);

$my_posts = new WP_Query($args);

if ($my_posts->have_posts()) {

    while ($my_posts->have_posts()) : $my_posts->the_post();?>

    <h2><?php the_title(); ?></h2>
    
    <?php
    get_post_meta( get_the_ID(), 'price', true );
    ?>

    <?php endwhile;
wp_reset_postdata();

}
?>

而且还

<section class="featured-yachts">

    <h2>FEATURED YACHTS</h2>

    <?php 

    $args = array(
        'posts_per_page' => -1,
        'meta_query' => array(
            array(
                'key' => 'featured',
                'value' => 'yes',
                'compare' => 'LIKE',
            )
        ),
    );

    $my_posts = new WP_Query($args);

    if ($my_posts->have_posts()) {

        while ($my_posts->have_posts()) : $my_posts->the_post();?>

        <h2><?php the_title(); ?></h2>
        
        <p><?php the_field( 'price' ); ?></p>


        <?php endwhile;
    wp_reset_postdata();

}

    ?>

</section> 

共2个答案

匿名用户

您可以使用“meta_query”,对于ACF true和false,您不必与等进行比较。请尝试下面的代码。

<section class="featured-yachts">

    <h2>FEATURED YACHTS</h2>
    
    <?php 
    
    $args = array(
        'post_type' => 'yachts',
        'posts_per_page' => -1,
        'meta_query' => array(
            array(
                'key' => 'featuredyacht',
                'value' => '1',
            )
        ),
    );

    $my_posts = new WP_Query($args);

    if ( $my_posts->have_posts() ) {

        while ( $my_posts->have_posts() ) : $my_posts->the_post();

            echo "Title - ".get_the_title()."</br>";
            echo "Price - ".get_field( "price", get_the_ID() )."</br>";
            echo "Length - ".get_field( "length", get_the_ID() )."</br>";
            echo "Year built - ".get_field( "year_built", get_the_ID() )."</br>";
            echo "Capacity - ".get_field( "capacity", get_the_ID() )."</br>";

        endwhile;

        wp_reset_postdata();

    }
    
    ?>
    
</section> 

匿名用户

要在查询中使用多个自定义字段参数,请将Bhautik答案中的$args替换为以下内容:

$args = array(
    'post_type' => 'yachts',
    'posts_per_page' => -1,
    'meta_query' => array(
        'relation' => 'AND',
        array(
            'key' => 'featuredyacht',
            'value' => '1',
        ),
        array(
            'key' => 'price',
            'value' => 50000,
            'type' => 'numeric',
            'compare' => '>=',
        )
    ),
);

上面的示例只获取yachts,并且特性设置为1trueAND,并且价格50,000或以上。根据需要调整以适应您的参数。

例如,要查询特定价格范围内的特色游艇:

$args = array(
    'post_type' => 'yachts',
    'posts_per_page' => -1,
    'meta_query' => array(
        'relation' => 'AND',
        array(
            'key' => 'featuredyacht',
            'value' => '1',
        ),
        array(
            'key' => 'price',
            'value' => array( 50000, 100000 ),
            'type' => 'numeric',
            'compare' => 'BETWEEN',
        )
    ),
);

WP_查询的开发人员文档对于任何进一步的定制都非常有用。