2013-09-08 4 views
1

Я хранюсь некоторые сериализованные данные в соре-PostMeta таблице, например:Используя 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(); 
    }       
} 

Что не так?

+0

Вы решили это? – iEmanuele

+0

Смотрите мое обновление! :) – iEmanuele

ответ

0

Вы пробовали это .Just попробовать

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

Не работает. Я попытался с $ the_query = new WP_Query (array ('meta_key' => 'details', 'meta_value' => '4')); – fabiodipa

1

meta_query представляет собой массив массивов. Вы можете попробовать это:

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

однако я не уверен на 100%, если это может помочь вам, давайте попробуем это, пожалуйста, дайте мне знать, если вы застряли.

UPDATE

Serialized массив в посте меты не являются хорошими сделками. Поэтому я предлагаю вам изменить функцию сохранения для индивидуального хранения настраиваемых полей.

Я нашел способ десериализируются предыдущие пост мета значения:

$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

Нет результатов ... Это код, который я использовал. Чао! $ args = array ('post_type' => 'collectable', 'posts_per_page' => -1, 'meta_query' => array ( array ( 'key' => 'details', 'value' => ' 4 ', ' compare '=>' LIKE ' ) ), ); \t \t \t \t \t \t \t \t \t \t $ запрос = новый WP_Query ($ арг); – fabiodipa

+0

@fabiodipa, сериализованные массивы в post meta не являются хорошими сделками. – iEmanuele

+0

Да, [не очень хорошая сделка] (http://wordpress-hackers.1065353.n5.nabble.com/Problem-WP-Query-with-custom-field-value-as-an-array-tp27401p27402.html). – brasofilo