web-dev-qa-db-fra.com

get_post_meta () unserialize issue - retourne boolean (false)

J'utilise un simple plugin personnalisé qui analyse et enregistre des données XML externes sous forme de tableau sérialisé dans un champ personnalisé. Cela fonctionne bien, cependant, lorsque je mets à jour le message, au lieu du tableau, je ne vois qu'un message disant: "bool (false)". Je suppose que cela a à faire avec sérialiser/désérialiser mais je n'ai trouvé aucun indice.

Je devais sérialiser quand je mets à jour le méta post en utilisant update_post_meta($post_id, 'tb_data', serialize($new_value_array)); En omettant de sérialiser, comme update_post_meta($post_id, 'tb_data', $new_value_array); ne stocke aucune donnée dans un champ personnalisé. De plus, je dois utiliser maybe_unserialize(get_post_meta($post->ID, 'tb_data', true)); pour imprimer les résultats.

Il y a 2 champs personnalisés, (1) tb_item_group_id et (2) tb_data. La valeur de tb_data sera ajoutée à l'aide de la fonction ci-dessous,

La fonction que j'utilise pour mettre à jour la méta post est la suivante.

function parse_file_func($title) {
    // get_tickets_array();exit;
    $language = explode('-', get_bloginfo('language'));
    $language = $language[0];
    $file = file_get_contents('https://dl.dropboxusercontent.com/u/12344450/feed.xml');
    if (!$file) {
        exit;
    }
    $domObj = new xmlToArrayParser($file);
    $domArr = $domObj->array;
    if (($domObj->parse_error)) {
        echo $domObj->get_xml_error();
    } else {
        $first = $domArr['rss']['channel']['item'];
        foreach ($first as $item) {
            if ($item['languageCode'] == $language) {
                $args = array(
                    'meta_key' => 'tb_item_group_id',
                    'meta_value' => $item['g:item_group_id'],
                    'post_type' => 'tickets',
                );
                $post = get_posts($args);
                if (empty($post)) {
                    continue;
                } else {
                    $args = array(
                        'meta_key' => 'tb_item_group_id',
                        'meta_value' => $item['g:item_group_id'],
                        'post_type' => 'tickets',
                    );
                    $post = get_posts($args);
                    $post_id = $post[0]->ID;
                    $meta_values = get_post_meta($post_id, 'tb_data');
                    if (empty($meta_values)) {
                        $new_value_array = array();
                        unset($item['cdata']);
                        $new_value_array['tb_' . $item['g:item_group_id'] . '_' . $item['ticketID']] = $item;
                    }
                    else {
                        $meta_arrays = unserialize($meta_values[0]);
                        $new_value_array = $meta_arrays;
                        foreach ($meta_arrays as $meta_ticketbar => $tb_content) {
                            if ($meta_ticketbar == 'tb_' . $item['g:item_group_id'] . '_' . $item['ticketID']) {
                                unset($item['cdata']);
                                $new_value_array[$meta_ticketbar] = $item;
                            } else {
                                $new_value_array = $meta_arrays;
                                unset($item['cdata']);
                                $new_value_array['tb_' . $item['g:item_group_id'] . '_' . $item['ticketID']] = $item;
                            }
                        }
                    }
                    update_post_meta($post_id, 'tb_data', serialize($new_value_array));
                    // update_post_meta($post_id, 'tb_data', base64_encode($new_value_array));
                }
            } else {
                continue;
            }
        }
    }
}

et affichage sur le front-end en utilisant get_post_meta

<?php
    // $tb_meta = get_post_meta($post->ID, 'tb_data', true);
    $tb_meta = get_post_meta($post->ID, 'tb_data', true);
    $tb_meta_unserialized = maybe_unserialize( $tb_meta );
?>
<pre><?php
    // print_r ($tb_meta_unserialized);
    var_dump($tb_meta_unserialized);
?></pre>
3
Dipak G.

J'ai réussi à le réparer moi-même.

J'ai utilisé le code suivant pour mettre à jour post meta

update_post_meta($post_id, 'tb_data', base64_encode(serialize($new_value_array)));

... et le code suivant pour obtenir un post méta

$tb_meta = get_post_meta($post->ID, 'tb_data', true);
$tb_meta_unserialized = unserialize(base64_decode($tb_meta));

J'espère que cela aidera quelqu'un.

2
Dipak G.