编辑序列化数据WordPress仪表板

时间:2016-11-28 19:33:52

标签: php wordpress dashboard

我刚刚继承了一个自定义插件,它接受Formstack提交并从中创建WordPress帖子。帖子创建得很好,但表单内容在post_content中存储为序列化数据。

我的任务是在WP Dashboard中编辑这些帖子。目前,当您点击帖子标题时,会出现一个只显示数据的页面;无法编辑数据。

启用编辑器控件"支持"在functions.php文件中,我给编辑器提供了刚刚在编辑器中转储的序列化数据。

我从未在WP中为特定的帖子类型设置自定义编辑页面。是否有人可以指导我这样一个解释这个问题的网站?我在圈子里跑。

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

您可以在管理编辑屏幕中显示内容之前对内容进行过滤。

function my_filter_function_name( $content, $post_id ) {
  if(get_post_type($post_id) == 'the_post_type_in_question'){
      $serialized_content = $content;
      $content_array = unserialize($serialized_content);
      // do something with this array to put it in the format you want
      // .....
      $content = $new_formatted_content;
  }
  return $content;
}
add_filter( 'content_edit_pre', 'my_filter_function_name', 10, 2 );

但是,这似乎不会对你有用。

在您的情况下,我建议您花时间编写一个脚本来转换所有这些帖子,以便将所有内容存储为post meta。 (首先创建自定义字段。)

如果您的主题不是基于任何框架构建的,那么我认为创建自定义字段的最快方法是使用Advanced Custom Fields plugin

然后,一旦你知道meta_keys,就可以编写该脚本。 E.g。

$posts = get_posts('post_type'=>'the_post_type','posts_per_page'=> -1);

foreach($posts as $post){

    $content_array = unserialize($post->post_content);

    // how you do the next bit will depend on whether or not this is an associative array. I'm going to assume it is (because it's a little easier :) )

    foreach($content_array as $meta_key=>$meta_value){
        update_post_meta($post->ID, $meta_key, $meta_value);
    }

    // just put what you actually want as the post content back into the post content:
    wp_update_post(array('ID'=>$post->ID,'post_content'=>$content_array['post_content'])); // assuming the key of the element you want to be the post content is 'post_content'

}

要运行此脚本,您只需创建一个临时新页面,然后专门为该页面创建一个模板文件,并将上述代码放入该文件中(然后访问该页面)。