WordPress 블로그에서 마이그레이션한 기사의 이미지를 성공적으로 가져왔습니다.

28665 단어 WordPresstech

표준 가져오기/내보내기 부족


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/로 이동하면 됩니다.
    적당한 디버깅 중에 진행하면 비교적 안전할 것이다.

    좋은 웹페이지 즐겨찾기