如何将自定义字段从文本转换为数组?

时间:2012-04-02 作者:user5601

我想转换包含以如下文本格式存储的自定义字段的旧帖子数据:name , url $ name, url $ name, url

我希望转换该数据并将新数据作为数组存储在新的自定义字段中<有人知道如何做到这一点吗?

我想存储这些数据,以便将这些数据与以下要点结合使用:Repeatable Custom Fields in a Metabox (Author: Helen Hou-Sandi)

1 个回复
最合适的回答,由SO网友:EAMann 整理而成

本质上,您需要为您的帖子构建一个更新方法。

基本的更新方法需要获取自定义字段的数据,创建一个新数组,然后存储该数据。

if ( get_post_meta( $post_ID, \'updated\', true ) != 1 ) :
$old_data = get_post_custom( $post_ID );
$new_data = array(
     \'name\' => $old_data[ \'name\' ],
     \'url\'  => $old_data[ \'url\' ]
);
然后,将该数据存储在post meta中—它将被序列化。

update_post_meta( \'custom_data\', serialize( $new_data ) );
然后,删除旧字段并设置标志以显示您已更新:

delete_post_meta( $post_ID, \'name\' );
delete_post_meta( $post_ID, \'url\' );
update_post_meta( $post_ID, \'updated\', 1 );
endif;
至于将其与链接到的插件集成。。。你还需要做更多的事情来完成这项工作。我把它作为一个项目留给你。

更新:拆分现有字符串根据您的注释,现有数据不存储在单独的自定义字段中,而是存储在单个自定义字段中,如name, url $ name, url $ name, url. 您可以将该字符串拆分为几个数组,并对其进行迭代以创建新数据。

$oldData = "name1, url1 $ name2, url2 $ name3, url3";
$newData = array();
$dataArrays = explode( " $ ", $oldData );

// $dataArrays = ["name1, url1", "name2, url2", "name3, url3"];

foreach( $dataArrays as $dataArray ) {
    $separated = explode( ", ", $dataArray );
    // $separated = ["name1", "url1"];

    array_push( $newData, array(
        \'name\' => $separated[0],
        \'url\'  => $separated[1]
    ) );
}

/* $newData = array(
       array(
           \'name\' => \'name1\',
           \'url\' => \'url1\'
       ),
       array(
           \'name\' => \'name2\',
           \'url\' => \'url2\'
       ),
       array(
           \'name\' => \'name3\',
           \'url\' => \'url3\'
       )
   );
*/

结束

相关推荐

定制MetaBox:食品菜单项可用日期

我希望创建一个带有复选框的自定义元数据库,用于显示项目可用性。我已经包括了两张我希望实现的示例图像。任何帮助都将不胜感激。此外,我真的只是想知道从哪里开始解决这个问题。有关更多信息,我将创建一个特定于菜单项的自定义帖子类型。这是给当地一家纸杯蛋糕面包店的。谢谢http://brocknunn.com/help-pics/Menu-Dates.jpghttp://brocknunn.com/help-pics/checkbox.png