それは管理者の編集画面に表示される前に、コンテンツをフィルタリングすることができます。
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
がわかったら、そのスクリプトを書くことができます。例えば。
$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'
}
は、このスクリプトを実行するには、単に一時的な新しいページを作成し、そのページのために特別にテンプレートファイルを作成し、そのファイルに上記のコードを入れることができます(その後、ページを参照してください)。