Пользовательский запрос с несколькими значениями мета-ключа

Я новичок в разработке WordPress, и я нашел этот запрос, и я хочу передать несколько ключей и значений в этом запросе.

Мой запрос:

$querydetails = " SELECT wposts.* FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta WHERE wposts.ID = wpostmeta.post_id AND wpostmeta.meta_key = 'type' AND wpostmeta.meta_value = 'Collection1' AND wposts.post_status = 'publish' AND wposts.post_type = 'book' ORDER BY wposts.post_date DESC "; 

Я хочу добавить еще оператор с оператором OR .

Мой исходный код:

 <?php $querydetails = " SELECT wposts.* FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta WHERE wposts.ID = wpostmeta.post_id AND wpostmeta.meta_key = 'type' AND wpostmeta.meta_value = 'Collection1' AND wposts.post_status = 'publish' AND wposts.post_type = 'book' ORDER BY wposts.post_date DESC "; $pageposts = $wpdb->get_results($querydetails, OBJECT); ?> <?php if ($pageposts): foreach ($pageposts as $post): setup_postdata($post); ?> <h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2> <?php endforeach; endif; ?> 

Я также пробовал с этим кодом, но когда я пропускаю 4 записи, ничего не происходит, загружается и загружается только страница.

 <?php $args = array( //Type & Status Parameters 'post_type' => 'book', 'post_status' => 'publish', //Order & Orderby Parameters 'order' => 'DESC', 'orderby' => 'date', //Pagination Parameters 'posts_per_page' => -1, // Here you can add you second meta value 'meta_query' => array( 'relation' => 'OR', array( 'key' => 'type', 'value' => 'Sample 1', 'compare' => 'LIKE' ), array( 'key' => 'type', 'value' => 'Sample 2', 'compare' => 'LIKE' ), array( 'key' => 'type', 'value' => 'Sample 3', 'compare' => 'LIKE' ), array( 'key' => 'type', 'value' => 'Sample 4', 'compare' => 'LIKE' ) ) ); $query = new WP_Query( $args ); ?> <?php if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); ?> <h2><a href="<?php the_permalink(); ?>"><?php echo the_title(); ?></a></h2> <?php endwhile; ?> <!-- post navigation --> <?php else: ?> <!-- no posts found --> <?php endif; ?> <?php // Restore original Post Data wp_reset_postdata(); ?> 

Есть идеи ??

Буду признателен, если вы будете вести меня 🙂

Попробуй это:

 <?php $querydetails = " SELECT wposts.* FROM $wpdb->posts wposts INNER JOIN ( SELECT post_id FROM $wpdb->postmeta wpostmeta WHERE ( ( wpostmeta.meta_key = 'type' AND wpostmeta.meta_value LIKE '%Collection1%' ) OR ( wpostmeta.meta_key = 'type'AND wpostmeta.meta_value LIKE '%Collection2%' ) OR ( wpostmeta.meta_key = 'type'AND wpostmeta.meta_value LIKE '%Collection3%' ) OR ( wpostmeta.meta_key = 'type'AND wpostmeta.meta_value LIKE '%Collection4%' ) OR ( wpostmeta.meta_key = 'type'AND wpostmeta.meta_value LIKE '%Collection5%' ) ) GROUP BY post_id ) AS t ON t.post_id = wposts.ID WHERE wposts.post_status = 'publish' AND wposts.post_type = 'book' ORDER BY wposts.post_date DESC "; $pageposts = $wpdb->get_results($querydetails, OBJECT) ?> <?php if ($pageposts): foreach ($pageposts as $post): setup_postdata($post); ?> <h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2> <?php endforeach; endif; ?> 

Надеюсь, это сработает для вас 🙂

 <?php $args = array( //Type & Status Parameters 'post_type' => 'book', 'post_status' => 'publish', //Order & Orderby Parameters 'order' => 'DESC', 'orderby' => 'date', //Pagination Parameters 'posts_per_page' => -1, // Here you can add you second meta value 'meta_query' => array( // ['relation'] => 'OR', // use this for a different comparison array( 'key' => 'type', 'value' => 'Collection1', 'compare' => '=' ), array( 'key' => 'type2', 'value' => 'Collection2', 'compare' => '=' ) ); $query = new WP_Query( $args ); ?> <?php if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); ?> <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2> <?php endwhile; ?> <!-- post navigation --> <?php else: ?> <!-- no posts found --> <?php endif; ?> <?php // Restore original Post Data wp_reset_postdata(); ?> 

Я бы использовал WP_Query и meta_query, см. https://codex.wordpress.org/Class_Reference/WP_Query для получения дополнительной информации.

 // The Query $the_query = new WP_Query( $args ); // The Loop if ( $the_query->have_posts() ) { echo '<ul>'; while ( $the_query->have_posts() ) { $the_query->the_post(); echo '<li>' . get_the_title() . '</li>'; } echo '</ul>'; } else { // no posts found } /* Restore original Post Data */ wp_reset_postdata(); 

Вставьте массив, содержащий ваши аргументы для $args и все готово.