Мне нужно сделать что-то, что, я уверен, это просто, но я читаю и читаю информацию повсюду и не могу найти решение для этого. Я знаю, я ноб, но я действительно не знаю, что еще попробовать.Несериализуйте значение, полученное из db на php
Существует линия на одном из PHP файлов темы моего веб-сайта, который выглядит так:
global $post;
if (!is_page()) {$category_ID = get_post_meta($post->ID, '_category_permalink', true);}
else {$category_ID = '';}
$category_parent = pa_category_top_parent_id ($category_ID);
Дело в том, что «_category_permalink» значение в базе данных не всегда является целым числом, а Мне это нужно. Иногда значение сериализованного значение, что-то вроде этого:
a:1:{s:8:"category";s:2:"23";}
Таким образом, $ CATEGORY_ID иногда 23 (или любое другое число), а в других случаях является: 1: {s: 8: "категория"; s: 2: "23";} (и другие значения).
Что мне нужно сделать, это то, что можно проверить, это значение, полученное после того, как эта строка является целым числом или нет. В случае, если это так, мне нужно его неэтериализовать и преобразовать в соответствующий целочисленный номер, сохраненный в разделе «категория» этого сериализованного значения (из моего примера, номер 23), поэтому $ category_ID всегда будет равен целому числу число, а не сериализованное значение.
Как я могу это сделать?
Заранее спасибо :)
EDIT & UPDATE:
Это было решено, код в конечном итоге, как этот
if (!is_page()) { $category_ID = get_post_meta($post->ID, '_category_permalink', true); } else {$category_ID = '';}
global $wpdb;
$catmeta = $wpdb->get_row("SELECT post_id, meta_key, meta_value FROM MYDATABASENAMEHERE WHERE post_id = '".$post->ID."' AND meta_key LIKE '_category_permalink'",ARRAY_A);
if(strpos($catmeta['meta_value'],':{')!==false){
$catmeta = unserialize($catmeta['meta_value']);
$catmeta['meta_value'] = $catmeta['category'];
}
$category_parent = pa_category_top_parent_id ($catmeta['meta_value']);
Вы можете проверить значение, если числовое или нет 'is_numeric()'. –