web-dev-qa-db-ja.com

高度なカスタムフィールドクエリ

私は、おそらく簡単な質問があります。ここに私の質問があります、それはACFを使用しています

<?php query_posts(array('post_type' => 'our-clients-list', 'posts_per_page' => 1, 'order' => 'DSC', 'orderby' => 'Rand','paged'=> $paged)); ?>

             <?php while(have_posts()) : the_post(); ?>

                       <?php the_field('testimonial_'); ?>

             <?php endwhile; ?>
             <?php wp_reset_query();?>

私のカスタム投稿タイプには 'testimonial_'という名前のフィールドがあります。カスタムフィールドが空ではない場合にのみクエリを実行したいのですが!= ''ですが、その方法はわかりません。誰かが私に手助けをしたり、ヒントを与えることができますか?

2
jmysona

これでうまくいくと思いますが、null文字列ではないという高度なメタクエリについては100%確信があるわけではありません。それは通常、メタクエリがどのように使われるかではありません。そのため、set_transient行はコメントアウトしたままにしました。私はあなたが1つのランダムな投稿を引っ張ろうとしていることに気づいたので、 Transients API をまったく使用したくないかもしれませんが、それでもまだだと思います制限時間を短くしたほうがよいので、一時的に1時間保存するように設定してください。そうでない場合は、いつでもクエリ部分を抽出できます。

// Get any existing copy of our transient data
if ( false === ( $custom_testimonials = get_transient( 'custom_testimonials' ) ) ) {
    // It wasn't there, so regenerate the data and save the transient

   // params for our query

   array(); ?


    $args = array(
        'post_type' => 'our-clients-list'
       'posts_per_page'  => 1,
       'orderby' => 'Rand'
       'meta_key'        => '_featured',
       'meta_value'      => 'yes',
        'meta_query' => array(
            array(
                'key' => 'testimonial_',
                'value' => '',
                'compare' => '!='
            )
        )
    );

    // The Query
    $custom_testimonials = new WP_Query( $args );

    // store the transient - uncomment when sure the query is working (stores for 1 hour)
    // set_transient( 'custom_testimonials', $custom_testimonials, 60*60*1 );

}

// Use the data like you would have normally...

// The Loop
if ( $custom_testimonials ) :

    echo '<ul class="testimonial">';

    while ( $custom_testimonials->have_posts() ) :
        $custom_testimonials->the_post();
        echo '<li>' . get_the_title() . '</li>';
    endwhile;

    echo '</ul>';

else :

echo 'No testimonials found.';

endif;

/* Restore original Post Data
 * NB: Because we are using new WP_Query we aren't stomping on the
 * original $wp_query and it does not need to be reset.
*/
wp_reset_postdata();

高度なメタクエリに関する優れた参考文献

3
helgatheviking