Format meta_value

I have a request to get postmeta records with a specific meta_value.

global $wpdb;
$result = $wpdb-get_results (  SELECT * FROM  $wpdb-postmeta WHERE $wpdb-postmeta.meta_key LIKE 'wpcomplete'  );
foreach ( $result as $page ) {
 echo maybe_unserialize($page-meta_value).'br/';
} 

result :

{buttons:{3:1951965-debutant,4:1951965-intermediaire,5:1951965-expert},course:examen}

I just need to clean the result like that

buttons :

1951965-debutant

1951965-intermediaire

1951965-expert

course :

examen

Topic post-meta Wordpress

Category Web


It seems the meta value is double serialized. Try this, it also cleans up your query, untested:

$results = $wpdb->get_column ( " SELECT meta_value FROM  $wpdb->postmeta WHERE meta_key LIKE 'wpcomplete' " );

foreach ( $results as $result ) {

    $item = maybe_unserialize( $result ); 
    if ( is_serialized( $item ) {
       $item = maybe_unserialize( $item ); 
    }
    
    foreach( $item as $obj ) {
    
       foreach( $obj->buttons as $key => $value ) {
           echo $value . '<br>';
       }
       
       foreach( $obj->course as $key => $value ) {
           echo $value . '<br>';
       }
       
    }
    
}

If you know that the meta_key is exactly 'wpcomplete', then do not use LIKE - it is slow. Instead, do this: WHERE meta_key = 'wpcomplete'

About

Geeks Mental is a community that publishes articles and tutorials about Web, Android, Data Science, new techniques and Linux security.