Я использую простой пользовательский плагин, который анализирует и сохраняет внешние данные XML в виде сериализованного массива в настраиваемом поле. Это работает нормально, однако, когда я обновляю сообщение, вместо массива я вижу только сообщение «bool (false)».
Содержимое пользовательского поля, которое я пытаюсь отобразить на WordPress Post (front end), используя сериализацию.
a:3:{s:8:"tb_88_40";a:20:{s:4:"guid";s:36:"26e4a3f6-afc4-457a-b34f-c09c3f4cfb1b";s:5:"title";s:11:"Casa Batllo";s:8:"language";s:1:"4";s:12:"languageCode";s:2:"en";s:8:"ticketID";s:2:"40";s:6:"ticket";s:5:"Adult";s:4:"link";s:54:"http://barcelona.ticketbar.eu/en/museums/casa-batllo-/";s:11:"description";s:3085:"<h3><em>Architecture of Antoni Gaudi in Barcelona</em></h3>
<p align="justify"><span id="result_box" tc="null" a="undefined" c="4" closure_uid_3d5c4l="129" lang="en"><span class="hps" tc="null" closure_uid_3d5c4l="95">The colorful</span> <span class="hps" tc="null" closure_uid_3d5c4l="96">Casa</span> <span class="hps" tc="null" closure_uid_3d5c4l="97">Batlló</span><span tc="null" closure_uid_3d5c4l="98">,</span> <span class="hps" tc="null" closure_uid_3d5c4l="99">a</span> <span class="hps" tc="null" closure_uid_3d5c4l="100">house from the 19th</span> <span class="hps" tc="null" closure_uid_3d5c4l="101">century</span> <span class="hps" tc="null" closure_uid_3d5c4l="102">renovated in the well-known</span> <span class="hps" tc="null" closure_uid_3d5c4l="104">modernist</span> <span class="hps" tc="null" closure_uid_3d5c4l="105">style</span><span class="hps" tc="null" closure_uid_3d5c4l="106">, is</span> <span class="hps" tc="null" closure_uid_3d5c4l="107">one of many</span> <span class="hps" tc="null" closure_uid_3d5c4l="108">masterpieces</span> <span class="hps"tc="null" closure_uid_3d5c4l="109">of Gaudí</span> <span class="hps" tc="null" closure_uid_3d5c4l="110">in Barcelona</span><span tc="null" closure_uid_3d5c4l="111">.</span> <span class="hps" tc="null" closure_uid_3d5c4l="112">The interior</span> <span class="hps" tc="null" closure_uid_3d5c4l="113">of the house</span> <span class="hps" tc="null" closure_uid_3d5c4l="117">is</span> <span class="hps" tc="null" closure_uid_3d5c4l="118">just as exceptional</span> <span class="hps" tc="null" closure_uid_3d5c4l="119">as the exterior</span> <span class="hps" tc="null" closure_uid_3d5c4l="120">of the building.</span></span> The building has become a famous landmark in Barcelona and is open for the public. The Casa Batlló was awarded the 2004 Europa Nostra Award for the Conservation of Cultural Heritage and was inscribed on the UNESCO World Heritage List in 2005. <span class="short_text" id="result_box" tc="null" a="undefined" c="4" closure_uid_3d5c4l="129" lang="en"><span class="hps" tc="null"closure_uid_3d5c4l="256">Undoubtedly</span> <span class="hps" tc="null" closure_uid_3d5c4l="257">worth a visit</span><span tc="null" closure_uid_3d5c4l="258">.</span></span></p>
<p align="justify"><span class="short_text" id="result_box" tc="null" a="undefined" c="4" closure_uid_3d5c4l="129" lang="en"><span tc="null" closure_uid_3d5c4l="258"><em>Audioguide included available in: Spanish, English, French, Italian, German, Chinese,Japanese, Portuguese, Russian, and Catalan</em><br />
</span></span></p>
<p align="justify"><em><strong>Opening Hours</strong><br />
</em> Monday - Sunday from 9 a.m to 9 p.m (Last entrance at 8 p.m.)<br />
<em><br />
<strong>Location</strong><br />
</em> Passeig de Gracia 43<br />
08007 Barcelona<br />
Metro to Diagonal or Passeig de Gracia</p>
<em><strong>Ticket is valid for 3 months from date of purchase! Buy your ticket online and skip the line!</strong></em><br />
<br />
<br />
";s:12:"g:image_link";s:95:"http://barcelona.ticketbar.eu/barcelona/classificaties/museums/casa-batllo/casa-batllo_grid.jpg";s:8:"oldPrice";a:0:{}s:14:"disabled_dates";s:13:"
";s:9:"day_parts";s:13:"
";s:18:"visit_day_required";s:32:"
false
";s:7:"g:price";s:9:"EUR 21.50";s:11:"g:condition";s:3:"new";s:15:"g:item_group_id";s:2:"88";s:4:"g:id";s:6:"135218";s:6:"rating";a:0:{}s:16:"extraInformation";s:1:"i";s:15:"customerService";a:0:{}}s:9:"tb_88_704";a:20:{s:4:"guid";s:36:"26e4a3f6-afc4-457a-b34f-c09c3f4cfb1b";s:5:"title";s:11:"Casa Batllo";s:8:"language";s:1:"4";s:12:"languageCode";s:2:"en";s:8:"ticketID";s:3:"704";s:6:"ticket";s:11:"Child (0-6)";s:4:"link";s:54:"http://barcelona.ticketbar.eu/en/museums/casa-batllo-/";s:11:"description";s:3085:"<h3><em>Architecture of Antoni Gaudi in Barcelona</em></h3>
<p align="justify"><span id="result_box" tc="null" a="undefined" c="4" closure_uid_3d5c4l="129" lang="en"><span class="hps" tc="null" closure_uid_3d5c4l="95">The colorful</span> <span class="hps" tc="null" closure_uid_3d5c4l="96">Casa</span> <span class="hps" tc="null" closure_uid_3d5c4l="97">Batlló</span><span tc="null" closure_uid_3d5c4l="98">,</span> <span class="hps" tc="null" closure_uid_3d5c4l="99">a</span> <span class="hps" tc="null" closure_uid_3d5c4l="100">house from the 19th</span> <span class="hps" tc="null" closure_uid_3d5c4l="101">century</span> <span class="hps" tc="null" closure_uid_3d5c4l="102">renovated in the well-known</span> <span class="hps" tc="null" closure_uid_3d5c4l="104">modernist</span> <span class="hps" tc="null" closure_uid_3d5c4l="105">style</span><span class="hps" tc="null" closure_uid_3d5c4l="106">, is</span> <span class="hps" tc="null" closure_uid_3d5c4l="107">one of many</span> <span class="hps" tc="null" closure_uid_3d5c4l="108">masterpieces</span> <span class="hps"tc="null" closure_uid_3d5c4l="109">of Gaudí</span> <span class="hps" tc="null" closure_uid_3d5c4l="110">in Barcelona</span><span tc="null" closure_uid_3d5c4l="111">.</span> <span class="hps" tc="null" closure_uid_3d5c4l="112">The interior</span> <span class="hps" tc="null" closure_uid_3d5c4l="113">of the house</span> <span class="hps" tc="null" closure_uid_3d5c4l="117">is</span> <span class="hps" tc="null" closure_uid_3d5c4l="118">just as exceptional</span> <span class="hps" tc="null" closure_uid_3d5c4l="119">as the exterior</span> <span class="hps" tc="null" closure_uid_3d5c4l="120">of the building.</span></span> The building has become a famous landmark in Barcelona and is open for the public. The Casa Batlló was awarded the 2004 Europa Nostra Award for the Conservation of Cultural Heritage and was inscribed on the UNESCO World Heritage List in 2005. <span class="short_text" id="result_box" tc="null" a="undefined" c="4" closure_uid_3d5c4l="129" lang="en"><span class="hps" tc="null"closure_uid_3d5c4l="256">Undoubtedly</span> <span class="hps" tc="null" closure_uid_3d5c4l="257">worth a visit</span><span tc="null" closure_uid_3d5c4l="258">.</span></span></p>
<p align="justify"><span class="short_text" id="result_box" tc="null" a="undefined" c="4" closure_uid_3d5c4l="129" lang="en"><span tc="null" closure_uid_3d5c4l="258"><em>Audioguide included available in: Spanish, English, French, Italian, German, Chinese,Japanese, Portuguese, Russian, and Catalan</em><br />
</span></span></p>
<p align="justify"><em><strong>Opening Hours</strong><br />
</em> Monday - Sunday from 9 a.m to 9 p.m (Last entrance at 8 p.m.)<br />
<em><br />
<strong>Location</strong><br />
</em> Passeig de Gracia 43<br />
08007 Barcelona<br />
Metro to Diagonal or Passeig de Gracia</p>
<em><strong>Ticket is valid for 3 months from date of purchase! Buy your ticket online and skip the line!</strong></em><br />
<br />
<br />
";s:12:"g:image_link";s:95:"http://barcelona.ticketbar.eu/barcelona/classificaties/museums/casa-batllo/casa-batllo_grid.jpg";s:8:"oldPrice";a:0:{}s:14:"disabled_dates";s:13:"
";s:9:"day_parts";s:13:"
";s:18:"visit_day_required";s:32:"
false
";s:7:"g:price";s:8:"EUR 0.00";s:11:"g:condition";s:3:"new";s:15:"g:item_group_id";s:2:"88";s:4:"g:id";s:6:"135219";s:6:"rating";a:0:{}s:16:"extraInformation";s:1:"i";s:15:"customerService";a:0:{}}s:10:"tb_88_1310";a:20:{s:4:"guid";s:36:"26e4a3f6-afc4-457a-b34f-c09c3f4cfb1b";s:5:"title";s:11:"Casa Batllo";s:8:"language";s:1:"4";s:12:"languageCode";s:2:"en";s:8:"ticketID";s:4:"1310";s:6:"ticket";s:12:"Child (7-17)";s:4:"link";s:54:"http://barcelona.ticketbar.eu/en/museums/casa-batllo-/";s:11:"description";s:3085:"<h3><em>Architecture of Antoni Gaudi in Barcelona</em></h3>
<p align="justify"><span id="result_box" tc="null" a="undefined" c="4" closure_uid_3d5c4l="129" lang="en"><span class="hps" tc="null" closure_uid_3d5c4l="95">The colorful</span> <span class="hps" tc="null" closure_uid_3d5c4l="96">Casa</span> <span class="hps" tc="null" closure_uid_3d5c4l="97">Batlló</span><span tc="null" closure_uid_3d5c4l="98">,</span> <span class="hps" tc="null" closure_uid_3d5c4l="99">a</span> <span class="hps" tc="null" closure_uid_3d5c4l="100">house from the 19th</span> <span class="hps" tc="null" closure_uid_3d5c4l="101">century</span> <span class="hps" tc="null" closure_uid_3d5c4l="102">renovated in the well-known</span> <span class="hps" tc="null" closure_uid_3d5c4l="104">modernist</span> <span class="hps" tc="null" closure_uid_3d5c4l="105">style</span><span class="hps" tc="null" closure_uid_3d5c4l="106">, is</span> <span class="hps" tc="null" closure_uid_3d5c4l="107">one of many</span> <span class="hps" tc="null" closure_uid_3d5c4l="108">masterpieces</span> <span class="hps"tc="null" closure_uid_3d5c4l="109">of Gaudí</span> <span class="hps" tc="null" closure_uid_3d5c4l="110">in Barcelona</span><span tc="null" closure_uid_3d5c4l="111">.</span> <span class="hps" tc="null" closure_uid_3d5c4l="112">The interior</span> <span class="hps" tc="null" closure_uid_3d5c4l="113">of the house</span> <span class="hps" tc="null" closure_uid_3d5c4l="117">is</span> <span class="hps" tc="null" closure_uid_3d5c4l="118">just as exceptional</span> <span class="hps" tc="null" closure_uid_3d5c4l="119">as the exterior</span> <span class="hps" tc="null" closure_uid_3d5c4l="120">of the building.</span></span> The building has become a famous landmark in Barcelona and is open for the public. The Casa Batlló was awarded the 2004 Europa Nostra Award for the Conservation of Cultural Heritage and was inscribed on the UNESCO World Heritage List in 2005. <span class="short_text" id="result_box" tc="null" a="undefined" c="4" closure_uid_3d5c4l="129" lang="en"><span class="hps" tc="null"closure_uid_3d5c4l="256">Undoubtedly</span> <span class="hps" tc="null" closure_uid_3d5c4l="257">worth a visit</span><span tc="null" closure_uid_3d5c4l="258">.</span></span></p>
<p align="justify"><span class="short_text" id="result_box" tc="null" a="undefined" c="4" closure_uid_3d5c4l="129" lang="en"><span tc="null" closure_uid_3d5c4l="258"><em>Audioguide included available in: Spanish, English, French, Italian, German, Chinese,Japanese, Portuguese, Russian, and Catalan</em><br />
</span></span></p>
<p align="justify"><em><strong>Opening Hours</strong><br />
</em> Monday - Sunday from 9 a.m to 9 p.m (Last entrance at 8 p.m.)<br />
<em><br />
<strong>Location</strong><br />
</em> Passeig de Gracia 43<br />
08007 Barcelona<br />
Metro to Diagonal or Passeig de Gracia</p>
<em><strong>Ticket is valid for 3 months from date of purchase! Buy your ticket online and skip the line!</strong></em><br />
<br />
<br />
";s:12:"g:image_link";s:95:"http://barcelona.ticketbar.eu/barcelona/classificaties/museums/casa-batllo/casa-batllo_grid.jpg";s:8:"oldPrice";a:0:{}s:14:"disabled_dates";s:13:"
";s:9:"day_parts";s:13:"
";s:18:"visit_day_required";s:32:"
false
";s:7:"g:price";s:9:"EUR 18.50";s:11:"g:condition";s:3:"new";s:15:"g:item_group_id";s:2:"88";s:4:"g:id";s:6:"135220";s:6:"rating";a:0:{}s:16:"extraInformation";s:1:"i";s:15:"customerService";a:0:{}}}
Вот функция, которую я использую для update_post_meta
,
function parse_file_func($title) {
// get_tickets_array();exit;
$language = explode('-', get_bloginfo('language'));
$language = $language[0];
$file = file_get_contents('http://vendor.ticketbar.eu/feed/284/');
// $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
возвращаемое значение автоматически не сериализуется, если значение было сериализовано.
Таким образом, значение будет несериализовано два раза, и вы получите false.
$value = get_post_meta(...);
В этом случае значение $ уже не сериализовано, если это были сериализованные данные.
Итак, когда вы unserialize($value)
, вы получите ложь.
Также вам не нужно сериализовать значение при сохранении мета-записи, потому что update_post_meta
сериализовать его автоматически, если это тип массива.
Мне удалось это исправить самостоятельно.
Я использовал следующий код для обновления мета-поста
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));
Надеюсь, это кому-нибудь поможет.