我刚刚继承了一个自定义插件,它接受Formstack提交并从中创建WordPress帖子。帖子创建得很好,但表单内容在post_content中存储为序列化数据。
我的任务是在WP Dashboard中编辑这些帖子。目前,当您点击帖子标题时,会出现一个只显示数据的页面;无法编辑数据。
启用编辑器控件"支持"在functions.php文件中,我给编辑器提供了刚刚在编辑器中转储的序列化数据。
我从未在WP中为特定的帖子类型设置自定义编辑页面。是否有人可以指导我这样一个解释这个问题的网站?我在圈子里跑。
答案 0 :(得分:0)
您需要修改插件,以便在修改之前数据为unserialize
d,然后在保存到数据库之前serialize
d ...
或者,尝试使用WP的核心功能:
答案 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'
}
要运行此脚本,您只需创建一个临时新页面,然后专门为该页面创建一个模板文件,并将上述代码放入该文件中(然后访问该页面)。