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

Я являюсь новым с разработкой 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(); ?>

Какая-либо идея??

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

0
05.03.2014, 04:46
3 ответа

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

<?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; ?>

Я надеюсь, что это будет работы для Вас :)

1
20.02.2020, 01:30
<?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 для большего количества информации.

0
20.02.2020, 01:30
  • 1
    Привет. Я попробовал этим запросом, но когда я передаю 4 записи ничто случай. Только страница загружает загрузку и загрузку. Какая-либо Идея? –  Manan 05.03.2014, 04:35
  • 2
    Хорошо я не протестировал этот сценарий, но взгляды хорошо. То, что я сделал бы, проверить журнал ошибок, чтобы удостовериться, что нет синтаксиса или незначительной ошибки где-нибудь. Если бы никакие ошибки, я зарегистрировал бы запрос быстро как error_log(print_r($query,true),3,get_template_directory() . '/temp_log_filename.log'); –  jjlm 05.03.2014, 14:29
// 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 для $args и Вы сделаны.

-1
20.02.2020, 01:30