Post Type Switcher
で制作事例 d_jirei を変更する jireiに
タクソノミーたちも
上記なし
結局wpでポストタイプ タクソノミーを空で準備し、
そこにエクスポートした記事をインポートした。
そうすれば、利用しているタクソノミー(ターム)は全部入る
ただし、問題は、画像IDは変わるということ。
そのため、考えたのが、
ファンクションにコードを追加して、画像URLをカスタムフィールドに収めて、
それを含めてインポートするということ、
まず、1つの画像URLは成功した。
ファンク
//カスタムフィールドの画像IDから別カスタムフィールドにURLを保存
function replace_imgid_imgurl($id) {
$post = get_post($id);
// post_typeを判定(post, page, カスタム投稿)
if( $post->post_type == 'd_jirei' ){
$custom_fields = get_post_custom($id);
$jirei_gazou_id = $custom_fields['jirei_gazou'];
if ($jirei_gazou_id):
$jirei_gazou_url = wp_get_attachment_image_src($jirei_gazou_id[0],'full');
$jirei_gazou_url = $jirei_gazou_url[0];
update_post_meta($id, 'jirei_gazou_url', $jirei_gazou_url);
endif;
}
}
add_action( 'wp_insert_post', 'replace_imgid_imgurl' );
インポートした後、逆をやれば、いいのでは。。
https://wemo.tech/tips/2262 らしい
$url = 'https://example.com/wp-content/uploads/2019/img_path.jpg';
$img_id = attachment_url_to_postid( $url );
//カスタムフィールドの画像URLから別カスタムフィールドに画像IDを保存
function replace_imgid_imgurl2($id) {
$post = get_post($id);
// post_typeを判定(post, page, カスタム投稿)
if( $post->post_type == 'd_jirei' ){
$custom_fields = get_post_custom($id);
$jirei_gazou_url = $custom_fields['jirei_gazou_url'];
$jirei_gazou_url = $jirei_gazou_url[0];
if ( $jirei_gazou_url):
$jirei_gazou_id = attachment_url_to_postid( $jirei_gazou_url );
//$jirei_gazou_id = $jirei_gazou_url[0];
update_post_meta($id, 'jirei_gazou', $jirei_gazou_id);
endif;
}
}
add_action( 'wp_insert_post', 'replace_imgid_imgurl2' );
一応これでできたわ。
あとはループフィールド
ギャラリーでできるか
ループフィールドはjirei_gazou_sabsで
jirei_gazou_sabが配列で入ってるだろう
jirei_gazou_sabsはエクスポートした記事にはないがな
これもできた。
////1.メイン画像を旧サイトから書き出す
//画像IDから別カスタムフィールドにURLを保存【カスタムフィールド】
//function replace_imgid_imgurl($id) {
// $post = get_post($id);
// // post_typeを判定(post, page, カスタム投稿)
// if( $post->post_type == 'd_jirei' or $post->post_type == 'jirei' ){
// $custom_fields = get_post_custom($id);
// $jirei_gazou_id = $custom_fields['jirei_gazou'];
//
// if ($jirei_gazou_id):
//
// $jirei_gazou_url = wp_get_attachment_image_src($jirei_gazou_id[0],'full');
// $jirei_gazou_url = $jirei_gazou_url[0];
//
// update_post_meta($id, 'jirei_gazou_url', $jirei_gazou_url);
// endif;
//
// }
//}
//add_action( 'wp_insert_post', 'replace_imgid_imgurl' );
//1-2.メイン画像を新サイトに戻す
//画像URLから別カスタムフィールドに画像IDを保存【カスタムフィールド】
//※URLはデコードされたちゃんとした日本語でないと出ない。
//function replace_imgid_imgurl2($id) {
// $post = get_post($id);
// // post_typeを判定(post, page, カスタム投稿)
// if( $post->post_type == 'd_jirei' ){
// $custom_fields = get_post_custom($id);
//
// $jirei_gazou_url = $custom_fields['jirei_gazou_url'];
// $jirei_gazou_url = $jirei_gazou_url[0];
//
// if ( $jirei_gazou_url):
//
// $jirei_gazou_id = attachment_url_to_postid( $jirei_gazou_url );
// //$jirei_gazou_id = $jirei_gazou_url[0];
//
// update_post_meta($id, 'jirei_gazou', $jirei_gazou_id);
// endif;
//
// }
//}
//add_action( 'wp_insert_post', 'replace_imgid_imgurl2' );
//2.サブ画像を旧サイトから書き出す
//ループフィールドの画像IDからカスタムフィールドにURLを保存【カスタムフィールド】
//function replace_imgid_imgurl3($id) {
// $post = get_post($id);
// // post_typeを判定(post, page, カスタム投稿)
// if( $post->post_type == 'd_jirei' ){
//
// $jirei_gazou_ids ='';//定義
//
// $custom_fields = get_post_custom($id);
// $fields = $custom_fields['jirei_gazou_sab'];
// if($fields){
// foreach ($fields as $field) :
// $img_url = wp_get_attachment_image_src($field,'full');
// $img_url = $img_url[0];
// $jirei_gazou_urls[] = $img_url;
//
// endforeach;
// }
////
// if ($jirei_gazou_urls):
// $jirei_gazou_urls = implode(',', $jirei_gazou_urls);
// update_post_meta($id, 'sub_img_urls', $jirei_gazou_urls);
// endif;
//
// }
//}
//add_action( 'wp_insert_post', 'replace_imgid_imgurl3' );
// 追記..上記元がギャラリーの場合
function replace_imgid_imgurl32($id) {
$post = get_post($id);
// post_typeを判定(post, page, カスタム投稿)
if( $post->post_type == 'd_jirei' ){
$jirei_gazou_ids ='';//定義
$custom_fields = get_post_custom($id);
//$fields = $custom_fields['jirei_gazou_sab']; のかわりに
$fields = get_field('jirei_gazou_sabs');//これがつかえるようだ
if($fields){
foreach ($fields as $field) :
$img_url = wp_get_attachment_image_src($field,'full');
$img_url = $img_url[0];
$jirei_gazou_urls[] = $img_url;
endforeach;
}
//
if ($jirei_gazou_urls):
$jirei_gazou_urls = implode(',', $jirei_gazou_urls);
update_post_meta($id, 'sub_img_urls', $jirei_gazou_urls);
endif;
}
}
add_action( 'wp_insert_post', 'replace_imgid_imgurl32' );
//2-1.サブ画像を新サイトに戻す
//複数の画像URLからギャラリーカスタムフィールドにIDを保存【カスタムフィールド】
//※URLはデコードされたちゃんとした日本語でないと出ない。
//function replace_imgid_imgurl4($id) {
// $post = get_post($id);
// // post_typeを判定(post, page, カスタム投稿)
// if( $post->post_type == 'd_jirei' ){
// $sub_img_ids ='';
// $custom_fields = get_post_custom($id);
// $fields = $custom_fields['sub_img_urls'];
// if($fields){
// $fields = explode(',', $fields[0]);
// foreach ($fields as $field) :
//
// $sub_img_id = attachment_url_to_postid( $field );
// $sub_img_ids[] = $sub_img_id;
// endforeach;
// }
// update_post_meta($id, 'jirei_gazou_sabs', $sub_img_ids);
// }
//}
//add_action( 'wp_insert_post', 'replace_imgid_imgurl4' );
あと、問題は げんざいの記事を更新することだが、
クイック編集ではどうもだめなようだ。
なので、記事いっこずつ更新するしかないようだ。
タクソノミーを作って、全てにクイック編集で、タームをつけて更新したが、それでも変わらなかった。
手作業か、、 まあ まだいいか いっこずつアサインさせるよりは。
あとは、
メディアファイルを同じ構造のままアップさせる。
ちょっとまった。
URLにドメインの入れ替えの細工をしなければ、ならない。。
d-marking.jp/~~
を
d-marking1.jp/~~にしなければな。。
そのコードの追加
//1.メイン画像を旧サイトから書き出す
//画像IDから別カスタムフィールドにURLを保存【カスタムフィールド】
function replace_imgid_imgurl($id) {
$post = get_post($id);
$home_url = home_url(); //ホームのURLを取得する
$new_url = 'http://www.d-marking1.jp'; //引っ越し先のホームのURLを入れる
// post_typeを判定(post, page, カスタム投稿)
if( $post->post_type == 'd_jirei' or $post->post_type == 'jirei' ){
$custom_fields = get_post_custom($id);
$jirei_gazou_id = $custom_fields['jirei_gazou'];
$sma_gazou_id = $custom_fields['suma_img'];
if ($jirei_gazou_id):
$jirei_gazou_url = wp_get_attachment_image_src($jirei_gazou_id[0],'full');
$jirei_gazou_url = $jirei_gazou_url[0];
$jirei_gazou_url = str_replace( $home_url , $new_url, $jirei_gazou_url ); //ホームのURL
update_post_meta($id, 'jirei_gazou_url', $jirei_gazou_url);
endif;
if ($sma_gazou_id):
$sma_gazou_url = wp_get_attachment_image_src($sma_gazou_id[0],'full');
$sma_gazou_url = $sma_gazou_url[0];
$sma_gazou_url = str_replace( $home_url , $new_url, $sma_gazou_url ); //ホームのURL
update_post_meta($id, 'suma_img_url', $sma_gazou_url);
endif;
}
}
add_action( 'wp_insert_post', 'replace_imgid_imgurl' );
//2.ループフィールドの画像IDからカスタムフィールドにURLを保存【カスタムフィールド】
function replace_imgid_imgurl3($id) {
$home_url = home_url(); //ホームのURLを取得する
$new_url = 'http://www.d-marking1.jp'; //引っ越し先のホームのURLを入れる
$post = get_post($id);
// post_typeを判定(post, page, カスタム投稿)
if( $post->post_type == 'd_jirei' or $post->post_type == 'jirei'){
$jirei_gazou_ids ='';//定義
$custom_fields = get_post_custom($id);
$fields = $custom_fields['jirei_gazou_sab'];
if($fields){
foreach ($fields as $field) :
$img_url = wp_get_attachment_image_src($field,'full');
$img_url = $img_url[0];
$img_url = str_replace( $home_url , $new_url, $img_url ); //ホームのURL
$jirei_gazou_urls[] = $img_url;
endforeach;
}
//
if ($jirei_gazou_urls):
$jirei_gazou_urls = implode(',', $jirei_gazou_urls);
update_post_meta($id, 'sub_img_urls', $jirei_gazou_urls);
endif;
}
}
add_action( 'wp_insert_post', 'replace_imgid_imgurl3' );
さあ本番 だ、
新旧サイトに、
jirei_gazou_url
sub_img_urls
suma_img_url
を作成、
先は
jirei_gazou
suma_img
jirei_gazou_sabs
だ。
その前にメディアライブラリを移行してみよう
メディアライブラリ移行 これもやばかったし、いつまで使えるかわからない方法。
Media from FTPを使う
Media from FTP
これまず解説。
日本語ファイル名に対応していない。
オリジナルファイルが削除されます。 の項目
- このプラグインは以下の場合にファイルを削除します。
- ファイル名にスペースが含まれている場合。スペースを「-」に変換してオリジナルファイルを削除します。image example.jpg -> image-example.jpg
- ファイル名にマルチバイト文字が含まれている場合。MD5変換を行いオリジナルファイルを削除します。image例.jpg -> 2edd9ad56212ce13a39f25b429b09012.jpg
- 「アップロードしたファイルを年月ベースのフォルダに整理」の項目にチェックが入っていると、ファイルを年月ベースのフォルダにコピーし、オリジナルファイルを削除します。wp-content/uploads/sites/2/image-example.jpg -> wp-content/uploads/sites/2/2015/09/image-example.jpg
* ファイルをコピーした後に、サムネイルを作成しデータベースに登録します。
日本語URLはサニタイズされて、文字が置き換わってしまう。
よく調べると MD5変換は逆変換不可能とのことで、
URLを予測することができない。
そこでプラグインを開けると、
inc/class-mediafromftp.php
に/* sanitize */の項目がある。
/* sanitize */
$orgfilename = $filename;
$filename = $currentdir . '/' . sanitize_file_name( wp_basename( $filename ) );
rename( $orgfilename, $filename );
// if ( function_exists( 'mb_check_encoding' ) ) {
// if ( ! mb_check_encoding( $filename, 'ASCII' ) ) {
// $currentfile = wp_basename( $filename, $suffix_attach_file );
// $oldfilename = $currentdir . '/' . $currentfile . $suffix_attach_file;
// $filename = $currentdir . '/' . md5( $currentfile ) . $suffix_attach_file;
// $copy_file_org2 = $this->mb_encode_multibyte( $oldfilename, $character_code );
// $copy_file_new2 = $this->mb_encode_multibyte( $filename, $character_code );
// $err_copy = @copy( $copy_file_org2, $copy_file_new2 );
// if ( ! $err_copy ) {
// if ( ! empty( $copy_file_new1 ) ) {
// $copy_file_org2 = $copy_file_org1;
// unlink( $copy_file_new1 );
// }
// return array( -1, $this->mb_utf8( $copy_file_org2, $character_code ), $this->mb_utf8( $currentdir, $character_code ), null );
// }
// }
// }
コメントアウトして、アップすると、なんとか、そのままのファイル名でアップできた。
■、使い方
どうやら、過去のサイトのメディアファイルuplodesを
そのままアップできる
が、毎度フォルダ別にほるのが面倒なため、
新サイトのuplodes/back と名前を変えて直接アップする。
そこのbackをプラグインで入れるわけだが、
設定がある。

アップロードしたファイルを年月ベースのフォルダーに整理はチェックをはずす。
固定された日時で更新 で、失敗してもわかりやすい、日付にしておく。
今回は最も古い日時
この設定で、uplodes/back内のフォルダがそのディレクトリのままアップされて登録される。
ファイル名にスペースが含まれている場合はURLがかわりそうだ。
プラグイン内のサニタイズ項目を無理やりコメントアウトしたので、なんとかアップできる。
そして、また登録コードを細工しなければならない。
URLにuplodes/backを追加しなければならないのだ。
そこでコードを編集
$back_url = 'http://www.d-marking.jp'; //引っ越し前のホームのURLを入れる
$home_url = home_url(); //ホームのURLを取得する
$jirei_gazou_url = str_replace( $back_url , $home_url, $jirei_gazou_url ); //ホームのURLを変更
$jirei_gazou_url = str_replace( 'uploads/' , 'uploads/back/', $jirei_gazou_url ); //アップロードフォルダのURLを変更 例 http://www.d-marking1.jp/wp-content/uploads/2020 を http://www.d-marking1.jp/wp-content/uploads/back/2020 に
を追記
完成コードは最後にのせよう、また変わるといけないので。
と思ったが、結局、デザイン業のことを思うと、画像検索から入ってくる事を思うと、画像URLの変更ってどうなの?
と思い、
フォルダをドロップするだけで、同じフォルダ内にコピーできるので、
その手法で、
まず、念の為、新サイトのuplodesをコピーして圧縮
本当はDBもバックしなきゃね。ここ忘れた。。失敗したら更新がきえてまう。。
旧uplodesを新uplodes内にコピー
パスファインダーでは
2020 2019などを全部掘り込んだら、上書きしないで結合でそのようになった。
後、Media from FTPで読み込ます。
もちろんURLは旧サイトのまま(今回の予定はあくまで、ローカルの別ワードプレスに入れて、後に同じドメインでリニューアルするので、、)で公開できるよてい。
Media from FTP
使い方注意
元のメディアファイルがからのときはスムーズに登録できたが(すべてのファイルを一気に)
1000件を下手に 700件に分けると、
300件を登録する際、すでに700件追加されているので、検索が重くなり、全体だと表示されない。。
2020とか、多い年は2015/10とかでなければ検索結果に出ないので、注意
やり方、
表示件数できるのなら、表示件数は1300件あるなら1500件とかにして一気にやったほうがよい。(サムネイル等作成されたあとはその分検索がおもくなるのできつくなる)
フォルダが表示できないとき(重くて)
アップロード内などに別の退避フォルダを作成して、読み込ます。
読み込めたら、後に、入れ替え。
がスムーズかも
おかしな点

このファイルのところで、とまった?
元からファイル名が-1 ついている。
さらにこれは新さいとにあったファイル
多分最初はついていないやつをアップして、後に、何個もあっぷして、ついていないのをけしたのか??
これをするーしたら登録再開された、、。不明
アップする前の状態をしらべてみると、
最初からこれが入っているが、これはゴミのようだ、。
実際にアップされているのは、
これでなく、
-5というどこかに保存されているファイルだった。
ともかく、 すでにあるファイルのためのエラーであったので、
引っ越し元には関係ないかも
2015の7月のフォルダに3000以上に画像が。。。表示できない。。
旧d-markingからurlを保存する最初のコードメモ
//1.メイン画像を旧サイトから書き出す
//画像IDから別カスタムフィールドにURLを保存【カスタムフィールド】
function replace_imgid_imgurl($id) {
$post = get_post($id);
$home_url = home_url(); //ホームのURLを取得する
$new_url = 'http://www.d-marking1.jp'; //引っ越し先のホームのURLを入れる
// post_typeを判定(post, page, カスタム投稿)
if( $post->post_type == 'd_jirei' or $post->post_type == 'jirei' ){
$custom_fields = get_post_custom($id);
$jirei_gazou_id = $custom_fields['jirei_gazou'];
$sma_gazou_id = $custom_fields['suma_img'];
if ($jirei_gazou_id):
$jirei_gazou_url = wp_get_attachment_image_src($jirei_gazou_id[0],'full');
$jirei_gazou_url = $jirei_gazou_url[0];
$jirei_gazou_url = str_replace( $home_url , $new_url, $jirei_gazou_url ); //ホームのURL
update_post_meta($id, 'jirei_gazou_url', $jirei_gazou_url);
endif;
if ($sma_gazou_id):
$sma_gazou_url = wp_get_attachment_image_src($sma_gazou_id[0],'full');
$sma_gazou_url = $sma_gazou_url[0];
$sma_gazou_url = str_replace( $home_url , $new_url, $sma_gazou_url ); //ホームのURL
update_post_meta($id, 'suma_img_url', $sma_gazou_url);
endif;
}
}
add_action( 'wp_insert_post', 'replace_imgid_imgurl' );
//2.ループフィールドの画像IDからカスタムフィールドにURLを保存【カスタムフィールド】
function replace_imgid_imgurl3($id) {
$home_url = home_url(); //ホームのURLを取得する
$new_url = 'http://www.d-marking1.jp'; //引っ越し先のホームのURLを入れる
$post = get_post($id);
// post_typeを判定(post, page, カスタム投稿)
if( $post->post_type == 'd_jirei' or $post->post_type == 'jirei'){
$jirei_gazou_ids ='';//定義
$custom_fields = get_post_custom($id);
$fields = $custom_fields['jirei_gazou_sab'];
if($fields){
foreach ($fields as $field) :
$img_url = wp_get_attachment_image_src($field,'full');
$img_url = $img_url[0];
$img_url = str_replace( $home_url , $new_url, $img_url ); //ホームのURL
$jirei_gazou_urls[] = $img_url;
endforeach;
}
//
if ($jirei_gazou_urls):
$jirei_gazou_urls = implode(',', $jirei_gazou_urls);
update_post_meta($id, 'sub_img_urls', $jirei_gazou_urls);
endif;
}
}
add_action( 'wp_insert_post', 'replace_imgid_imgurl3' );
これはやめて、通常のアドレスを書き出すようにする。