0

외부 XML 데이터를 구문 분석하여 사용자 정의 필드에 직렬화 된 배열로 저장하는 간단한 사용자 정의 플러그인을 사용하고 있습니다. 그러나 게시물을 업데이트 할 때 어레이 대신 단지 "bool (false)"메시지 만 보입니다. 나는 그것이 serialize/unserialize와 함께하지만 모든 단서를 찾지 못했다고 생각합니다.get_post_meta 문제 직렬화 해제 - 부울 반환 (false)

update_post_meta($post_id, 'tb_data', $new_value_array);과 같은 serialize를 생략하면 사용자 지정 필드에 데이터가 저장되지 않으므로 게시물 메타를 업데이트 할 때 serialize해야합니다. update_post_meta($post_id, 'tb_data', serialize($new_value_array)); 또한 결과를 인쇄하려면 maybe_unserialize(get_post_meta($post->ID, 'tb_data', true));을 사용해야합니다.

사용자 정의 필드에는 (1) tb_item_group_id 및 (2) tb_data가 있습니다. tb_data의 값은 아래의 함수를 사용하여 더해질 것입니다.

기능 게시 메타를 업데이트하는 기능은 아래와 같습니다.

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; 
      } 
     } 
    } 
} 

나는 내 자신에 그것을 해결하기 위해 관리해야 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> 

답변

0

사용하여 프런트 엔드에 표시.

내가

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

포스트 메타 업데이트하려면 다음 코드를 사용했습니다 ... 그리고 코드 다음은 내가이 사람을 도움이되기를 바랍니다

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

포스트 메타 얻을.