使用Wp_query和序列化后元值

时间:2013-09-08 15:25:06

标签: wordpress

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

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

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

我想用关键字“details”和value =“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();
    }                          
}

有什么问题?

2 个答案:

答案 0 :(得分:1)

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

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

然而,我不是百分百确定这是否可以帮助你,让我们试试吧,如果你遇到困难,请告诉我。

<强>更新

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;

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

希望它有所帮助!

答案 1 :(得分:0)

你试过这个。试一试

$the_query = new WP_Query(array( 'meta_key' => 'open', 'meta_value' => 'yes' ));