如何将定制对象保存在POST元字段中的数组中

时间:2021-05-02 作者:Zeth

我制作了两个自定义类:

我正在对一系列内容进行自定义计算,我想将其保存在post\\u元字段的数组中。

This is how I save it

$obj1 = new FooBar();
$obj2 = new BarSchizzle();
$obj3 = new FooBar();

$arr = [
  \'a_key\' => $obj1,
  \'another_key\' => $obj2,
  \'a_third_key\' => $obj3,
];

update_post_meta( $post_ID, \'my_custom_field\', $arr );

// I also tried this, with same result
// update_post_meta( $post_ID, \'my_custom_field\', serialize( $arr ) );

This is how I retrieve the array

$initial_arr = get_post_meta( $post_ID, \'my_custom_field\', true );
$arr = unserialize( $initial_arr ); // And this is where the error occurs
我收到错误信息:unserialize() [function.unserialize]: Error at offset ... (您可以阅读更多信息here).

我的理论是,WordPress没有加载(需要)我的自定义类,当它得到(并且未序列化)时。

我只需要简单地将这些类插入functions.php-文件,在顶部,如下所示:

require_once( __DIR__ . \'/classes/FooBar.php\' );
require_once( __DIR__ . \'/classes/BarSchizzle.php\' );
。。。不在任何钩子或任何东西里面。感觉有点邋遢/糟糕,但到目前为止一直工作得很好。

<小时/>

So this leaves me with two questions:

<我是否需要将我对自定义类的需求放入钩子中,例如init 还是什么$arr, 是否包含自定义对象

1 个回复
SO网友:anton

数组和对象会自动序列化/取消序列化,因为它们是由MySQL存储为字符串的php数据类型。如果使用update\\u post\\u meta保存数组,则不需要取消序列化返回值get\\u post\\u meta,函数将为您执行此操作。

更容易查看update_post_meta 函数的源代码。它调用update_metadata 函数,您可以在其中看到此函数的调用:

maybe_serialize( $meta_value );

如您所见,如果数据是数组或对象类型,它将序列化此数据。

function maybe_serialize( $data ) {
    if ( is_array( $data ) || is_object( $data ) ) {
        return serialize( $data );
}
从另一边,当您使用get_post_meta 函数,此chain 更大,但最后它调用maybe\\u unserialize函数,如果需要,该函数将执行非序列化。

maybe_unserialize( string $data )

在您的情况下,您正在尝试取消序列化非序列化字符串。serialize()函数返回false,如果无法取消序列化值,则会生成E\\u通知。

相关推荐

我不能通过过滤类别来显示帖子,这些类别是使用Isoope.js

我目前正在使用同位素构建wordpress主题。js脚本,允许您通过过滤类别,在同一步骤上显示文章,我努力了很多,但仍然无法得到预期的结果:这里有一个链接,可以引导您获得预期的结果(HTML/CSS的完整版本):https://vgamerz.fr/isotopehelp/gallery/blog.html这里是我的wordpress主题(PHP文件): <!-- Isotope Header --> <div class=\"row\">