1

我在 wp-postmeta 表中存储了一些序列化数据,例如:

$data = array(
    'details'    => $dettagli,
    'vernice'    => $vernice,
    'reperibile' => $reperibile,
    'valore2'    => $valore2,
    'valuta2'    => $valuta2,
    'subcat'     => $subcat
);

add_post_meta($post_ID, 'meta', $data);

我想提取键为“详细信息”和值 =“4”的所有帖子。我该怎么做?

我试过做这个代码:

$args = array(
    'post_type' => 'custom-post-type',
    'posts_per_page' => -1,
    'meta_query' => 
        array(
            'key' => 'details',
            'value' => '4',
            'compare' => 'LIKE'
        ),
    'meta_key' => 'meta',    
);
$query = new WP_Query( $args );
if ($query->have_posts()) {
    while ($query->have_posts()) {
       $query->the_post();
       the_ID();
    }                          
}

怎么了?

4

2 回答 2

1

meta_query是一个数组数组。你可以试试这个:

$args = array(
  //parameters here
  'meta_query' => array(
       array(
           'key' => 'details',
           'value' => '4',
           'compare' => 'LIKE'
       )
   ),
   //remove meta_key => 'meta'
);

但是我不能 100% 确定这是否可以帮助您,让我们尝试一下,如果您遇到困难,请告诉我。

更新

post meta 中的序列化数组不是很好的交易。因此,我建议您更改保存功能以单独存储自定义字段。

我找到了一种方法来反序列化您以前的帖子元值:

$args = array(
    'post_type'      => 'collectable',
    'meta_key'       => 'meta',
    'posts_per_page' => -1
);

$query = new WP_Query( $args );
if( $query->have_posts() ) : while( $query->have_posts() ) : $query->the_post();
   //Get data for each post
   $data = get_post_meta( $post->id, 'meta', true );
   //Add post meta value individually for each field
   add_post_meta( $post->ID, 'details', $data['details'] );
   add_post_meta( $post->ID, 'vernice', $data['vernice'] );
   add_post_meta( $post->ID, 'reperibile', $data['reperibile'] );
   add_post_meta( $post->ID, 'valore2', $data['valore2'] );
   add_post_meta( $post->ID, 'valuta2', $data['valuta2'] );
   add_post_meta( $post->ID, 'subcat', $data['subcat'] );
   //Delete serialized data
   delete_post_meta( $post->ID, 'meta', $data );

endwhile; endif;

现在您应该可以根据需要进行查询了。

希望能帮助到你!

于 2013-09-08T17:28:41.407 回答
0

你试过这个吗?试试看

$the_query = new WP_Query(array( 'meta_key' => 'open', 'meta_value' => 'yes' ));
于 2013-09-08T16:48:42.797 回答