WordPress 블로그에서 마이그레이션한 기사의 이미지를 성공적으로 가져왔습니다.
표준 가져오기/내보내기 부족
WordPress는 표준적인 문장, 고정 페이지 등의 가져오기/내보내기 기능이 있지만 XML 형식의 출력이기 때문에 잘 변환되지 않습니다.
구체적으로 말하면
현명한 사람이라면 All In One WP Migration의 확장을 구매해 옮기는 일을 할 생각입니다.
하지만 상황 때문에 관리화면을 맡길 수 없는 일도 많다고 생각합니다.
기사 안에 있는 사진이라도 잘 계승해야 돼요.
예를 들어 글의 첫 번째 그림이 있다면 Auto Featured Image 같은 플러그인을 사용하여 다시 설정할 수 있습니다.
글의 이미지는 원래 사이트와 같은 영역에서 이동하더라도 이미지 데이터를 얻어야 합니다.
이미지 데이터 가져오기
영향을 받지 않기 위해 WordPress 설정 폴더 아래에서 'dev' 폴더의 이름으로 설정하고 다음 스크립트를 따라 이동합니다.
$wp_path = realpath("../");
require_once ($wp_path . '/wp-load.php');
$args = [
'posts_per_page' => -1,
];
$the_query = new WP_Query( $args );
if ($the_query->have_posts()) : while ($the_query->have_posts()) : $the_query->the_post();
$post_id = $the_query->post->ID;
$post_content = get_post_field('post_content', $post_id);
$first_img = '';
ob_start();
ob_end_clean();
$output = preg_match_all('/<img.*?src\s*=\s*[\"|\'](.*?)[\"|\'].*?>/i', $post_content, $matches);
$i = 0;
foreach($matches[1] as $match_s){
$ext_point = strrpos($match_s, ".");
//gifは除外
if($ext_point !== false){
$str_point = $ext_point + 1;
$ext_str = substr($match_s, $str_point);
if($ext_str === 'gif') continue;
}
$ext_str = parse_url($ext_str, PHP_URL_PATH);
save_filesrc(regex_url($match_s), $post->ID.'-'.$i.'.'.$ext_str);
++$i;
}
endwhile;
else:
endif;
wp_reset_postdata();
함수를 사용할 수 있도록 WordPress 설정 폴더 가져오기wp-load.php
를 먼저 설정합니다.통상적인 기고문을 모두 취득하고 보도 내의'src'를 찾아 URL을 취득한다.
아메바 등에서 넘어오면 안면 문자 등이 gif로 바뀌는데, 삭제할 필요가 있어 제외를 구상한 경우다.
위에서 사용한 독립 함수는 다음과 같다.
/**
* ファイルを保存
*
*/
function save_filesrc(string $url, string $post_name)
{
$thumb_raw = curl_get_contents($url);
$file_name_tmp = explode( '/', $url );
$file_name_tmp = array_reverse( $file_name_tmp );
$file_name = $file_name_tmp[0];
$dir_list = scandir('./');
if(!in_array('src',$dir_list,true)){
mkdir('./src', 0705);
}
$save_dir_path = realpath('').'/src/';
// // 画像保存
if ( $thumb_raw )
{
$res = file_put_contents( $save_dir_path . $post_name, $thumb_raw );
}
}
function curl_get_contents($url,$timeout = 60){
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_HEADER,false);
curl_setopt($ch, CURLOPT_ENCODING, "");
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_TIMEOUT,$timeout);
curl_setopt($ch,CURLOPT_FAILONERROR,true);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
작업 폴더에'src'폴더를 만들고 이미지 파일을 호출합니다.이미지 파일은 일본어 파일이면 코드가 혼란스러워
記事ID-記事内順番.ext
라는 이름을 지었다.위의 내용에 따라 한 번 실행하고 src 폴더가 있는지 확인하십시오.
본문의 URL 바꾸기
다음에 가져온 이미지 URL에서 본문을 덮어써야 합니다.
방금 이미지 파일 이름도 변경되었기 때문에 동명으로 고쳐야 합니다.
또 작업 폴더와 달리
wp-content/uploads/old_data/
등의 이름으로 폴더를 만들어 거기에 설정된 구상에 따라 변경한다.$args = [
'posts_per_page' => -1,
];
$the_query = new WP_Query( $args );
if ($the_query->have_posts()) : while ($the_query->have_posts()) : $the_query->the_post();
$post_id = $the_query->post->ID;
$post_content = get_post_field('post_content', $post_id);
$first_img = '';
ob_start();
ob_end_clean();
$output = preg_match_all('/<img.*?src\s*=\s*[\"|\'](.*?)[\"|\'].*?>/i', $post_content, $matches);
$i = 0;
foreach($matches[1] as $match_s){
$ext_point = strrpos($match_s, ".");
//gifは除外
if($ext_point !== false){
$str_point = $ext_point + 1;
$ext_str = substr($match_s, $str_point);
if($ext_str === 'gif') continue;
}
$ext_str = parse_url($ext_str, PHP_URL_PATH);
$rp_title = home_url('/').'wp-content/uploads/old_data/'.$post->ID.'-'.$i.'.'.$ext_str;
$post_content = str_replace($match_s, $rp_title, $post_content);
++$i;
}
global $wpdb;
$result = $wpdb->update(
$wpdb->posts,
[
'post_content' => $post_content,
],
[
'ID' => $post_id,
],
['%s'],
['%d']
);
endwhile;
else:
endif;
wp_reset_postdata();
모두 얻은 순환은 같지만 $rp_title
와 $post_content
를 통해 본문 내의 이미지 URL을 바꿀 준비를 합니다.이어서 wpdb Class를 이용하여 본문을 고쳤다.
덮어쓴 후 src 폴더 안의 그림을
wp-content/uploads/old_data/
로 이동하면 됩니다.적당한 디버깅 중에 진행하면 비교적 안전할 것이다.
Reference
이 문제에 관하여(WordPress 블로그에서 마이그레이션한 기사의 이미지를 성공적으로 가져왔습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/flirt774/articles/83b70a62097d9d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)