Я пытаюсь оптимизировать способ хранения данных в моей таблице wp_postmeta.
Мне нужно сохранить несколько связей между постами, и моя стартовая ситуация была просто так:
add_post_meta($parent_id, 'post_child', $child_id);
Таким образом, мне нужно было использовать строку базы данных для каждого отношения.
Учитывая, что один и тот же родитель может быть связан с несколькими дочерними элементами, я пытался выяснить, что может быть хорошей конфигурацией массива, и я получил что-то вроде этого (но я все еще не уверен, что это лучший способ):
array(
array(
parent => 121,
child => 122
),
array(
parent => 121,
child => 122
),
array(
parent => 121,
child => 123
),
...
);
Затем я попытался с этим кодом:
if ($post_relations = get_post_meta($book_id, 'post_relations', true)) {
$post_relations[] = array("parent" => $parent_id, "child" => $child_id);
update_post_meta($book_id, 'post_relations', $post_relations);
} else {
$post_relations[] = array("parent" => $parent_id, "child" => $child_id);
add_post_meta($book_id, 'post_relations', $post_relations);
}
Но результат, который я получаю в поле meta_value, кажется, отличается от результата, который я ожидал:
a:2:{
i:0;a:2:{s:6:"parent";i:1;s:5:"child";i:510;}i:1;a:2:{s:6:"parent";i:510;s:5:"child";i:511;}
}
Функции WordPress update_post_meta()
а также add_post_meta()
оба требуют сериализуемых данных;
update_post_meta ( int $post_id, string $meta_key, mixed $meta_value, mixed $prev_value = '' )
$meta_value
Должен быть сериализуемым, если не скалярный
Похоже, это в базе данных, потому что эти функции serialize()
массив вы передаете его.
Поэтому вы, если вы обращались к данным за пределами get_post_meta () функционировать вам придется unserialize()
данные.
Я думаю, что вы должны сохранять отношения как одно отношение на одну запись мета — сохранение отношений в массиве очень затруднит запросы к БД.
Таким образом, либо сохраните ваши отношения как т.е. post_relations_0, post_relations_1 и т. Д., Либо, что еще лучше, если вы планируете выполнять некоторые запросы, сохраните отношения в отдельной таблице.