강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

이종범님의 프로필 이미지
이종범

작성한 질문수

수익형 AI Agent n8n 전문가 강의, 블로그·쇼츠 자동화

검색 기반 AI 에이전트로 만드는 쇼츠 스크립트 자동 생성

워드프레스 내 대표이미지만 업로드

해결된 질문

작성

·

18

0

안녕하세요 좋은 강의 감사드립니다

블로그 관련,,

IMAGE MAKER 워크플로우에서

업로드 후 set URL을 진행하게 되는데

워드프레스에서 대표 이미지를 바꾸려고 보니, 맨 앞의 이미지만 여러장 업로드 되어 있는 현상이 있더라구요.

업로드 노드에서 {{ $POS }}를 붙여서 하려니 뒤에 Set 노드에서 영향을 받지 않을까 걱정이 되어서요 ~ ㅠ 해결 방법을 알고 싶습니다

 

정리하면, 여러장이 같은 사진(대표사진)으로 올라가는데, 각각 본문에 사용된 사진이 사용됐으면 좋겠습니다

 

감사합니다

답변 2

0

남박사님의 프로필 이미지
남박사
지식공유자

안녕하세요, 종범님.

일단, 질문 주신 내용에서 "맨 앞의 이미지만 여러장 업로드 되어 있는 현상이 있더라구요." 이 상황이 어떤 상황인지 제가 잘 모르겠습니다.

 

// 2. 본문 이미지로 특성 이미지(Featured Image) 자동 설정
// =====================================================================

/**
 * 포스트 본문에 첫 번째 이미지를 특성 이미지로 자동 설정하는 함수.
 * 포스트가 저장되거나 발행될 때 실행됩니다.
 *
 * @param int $post_id 처리할 포스트의 ID.
 * @return void
 */
function auto_set_featured_image_from_content( $post_id ) {
    // 함수 시작을 알리는 로그 기록
    wp_log("🟡 auto_set_featured_image_from_content 실행됨", $post_id, "auto_set_featured_image");

    // 자동 저장(AutoSave) 또는 포스트 리비전(Revision)은 무시합니다.
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
        wp_log("🔍 자동 저장/리비전: 스킵", $post_id, "auto_set_featured_image");
        return;
    }
    if ( wp_is_post_revision( $post_id ) ) {
        wp_log("🔍 포스트 리비전: 스킵", $post_id, "auto_set_featured_image");
        return;
    }
    // 이미 특성 이미지가 설정되어 있다면 함수를 종료합니다. (선택적)
    // 이 줄을 주석 해제하면 이미지가 있는 경우 다시 설정하지 않습니다.
    // if ( has_post_thumbnail( $post_id ) ) return;

    // 포스트 객체를 가져옵니다. 포스트가 존재하지 않으면 종료합니다.
    $post = get_post( $post_id );
    if ( ! $post ) {
        wp_log("❌ 포스트를 찾을 수 없음", $post_id, "auto_set_featured_image");
        return;
    }
    
    // 포스트 본문 내용을 로그로 기록합니다.
    //wp_log("📝 본문 내용: " . $post->post_content, $post_id, "auto_set_featured_image");

    // 1. 본문에서 첫 번째 이미지 URL을 정규표현식을 사용하여 찾습니다.
    // '<img' 태그 내의 'src' 속성 값을 추출합니다.
    if ( preg_match_all('/<img[^>]+src=[\'"]([^\'"]+)[\'"]/i', $post->post_content, $matches) ) {
        // 첫 번째 매치된 이미지 URL이 존재하는지 확인합니다.
        if ( isset( $matches[1][0] ) ) {
            $image_url = $matches[1][0];
            wp_log("🔗 대표 이미지로 사용할 URL: " . $image_url, $post_id, "auto_set_featured_image");

            // ✅ 이미지 다운로드 및 미디어 라이브러리 추가에 필요한 워드프레스 핵심 함수들을 로드합니다.
            // 이 함수들은 'wp-admin/includes' 디렉토리에 있습니다.
            if ( ! function_exists( 'download_url' ) ) {
                require_once( ABSPATH . 'wp-admin/includes/file.php' );
                require_once( ABSPATH . 'wp-admin/includes/media.php' );
                require_once( ABSPATH . 'wp-admin/includes/image.php' );
            }

            // 원격 이미지 URL에서 파일을 임시 디렉토리로 다운로드합니다.
            wp_log(">> 다운로드: " . $image_url, $post_id, "auto_set_featured_image");
            $tmp = download_url( $image_url );
            // 다운로드 실패 시 에러 처리
            if ( is_wp_error( $tmp ) ) {
                wp_log("❌ 이미지 다운로드 실패: " . $tmp->get_error_message(), $post_id, "auto_set_featured_image");
                return;
            }

            // 미디어 핸들링을 위한 파일 배열을 구성합니다.
            $file_array = array(
                'name'      => basename( $image_url ), // 파일명
                'tmp_name'  => $tmp // 임시 파일 경로
            );

			//wp_log(">> 파일목록 핸들링 <<" . $file_array, $post_id, "auto_set_featured_image");
			wp_log(">> 파일목록 핸들링 <<", $post_id, "auto_set_featured_image");
			wp_log($file_array, $post_id, "auto_set_featured_image");
            // 다운로드된 파일을 미디어 라이브러리에 업로드하고 첨부 파일 ID를 얻습니다.
            // 두 번째 인자로 $post_id를 전달하여 해당 포스트에 첨부되도록 합니다.
            $attachment_id = media_handle_sideload( $file_array, $post_id );
			wp_log(">> media_handle_sideload <<", $post_id, "auto_set_featured_image");
            // 업로드 실패 시 에러 처리
            if ( is_wp_error( $attachment_id ) ) {
                wp_log("❌ 이미지 업로드 실패: " . $attachment_id->get_error_message(), $post_id, "auto_set_featured_image");
                @unlink($tmp); // 임시 파일 삭제
                return;
            }

            // 업로드된 이미지 ID를 사용하여 포스트의 특성 이미지로 설정합니다.
            wp_log(">> set_post_thumbnail <<", $post_id, "auto_set_featured_image");
            $success = set_post_thumbnail( $post_id, $attachment_id );
            // 특성 이미지 설정 성공/실패 여부를 로그로 기록합니다.
            wp_log($success ? "✅ 대표 이미지 설정 성공! ID: {$attachment_id}" : "❌ 대표 이미지 설정 실패", $post_id, "auto_set_featured_image");

        } else {
            // 본문에 첫 번째 이미지가 없을 경우 (preg_match_all은 빈 배열이 아님)
            wp_log("❌ 본문에 이미지 없음", $post_id, "auto_set_featured_image");
        }
    } else {
        // preg_match_all이 매치를 찾지 못했을 경우
        wp_log("❌ 본문에서 이미지 태그를 찾을 수 없음", $post_id, "auto_set_featured_image");
    }
}

현재 워드프레스에서 대표 이미지는 functions.php 에서 위 코드의 내용에 의해 본문의 첫번째 이미지가 대표 이미지로 설정되게 코딩되어있는데 어떤 이유로 여러장이 등록되고 있다는건지, 그리고 대표이미지가 여러장 등록되면 어떤 현상이 생기는지에 대해 좀 더 자세한 정보를 주시면 좋을듯 합니다.

업로드 노드에서 {{ $POS }}를 붙여서 하려니 뒤에 Set 노드에서 영향을 받지.. 여기서도 POS가 뭘 의미하는지 제가 잘 이해를 못해서 어떻다 답변을 드리기가 어렵습니다.

좀더 자세한 상황에 대한 설명과 스샷 같은걸 올려주시면 다시 확인해보도록 하겠습니다.

0

안녕하세요, 인프런 AI 인턴입니다. 이종범님.

이미지 업로드 및 관리에서 발생하는 문제는 워드프레스의 미디어 라이브러리 설정과 이미지 업로드 워크플로우의 세부사항에 따라 달라질 수 있습니다. 현재 질문 주신 상황은 여러 장의 이미지가 대표 이미지로 잘 못 설정되어 서로 중복되는 현상인 것으로 보입니다. 다음은 이러한 문제를 해결하기 위한 몇 가지 제안을 드립니다:

해결 방법

  1. 이미지 업로드 및 설정 확인:

    • 이미지 업로드 시 사용되는 워크플로우 노드에서 각 이미지가 고유하게 업로드되도록 하세요. Set Node에서 각 이미지의 파일 경로나 이름이 중복되지 않도록 한다면 이 문제를 해결할 수 있습니다.
  2. {POS} 이용:

    • 워드프레스 업로드 시 이미지의 위치나 순서를 추적하기 위해 {{ $POS }} 와 같은 변수를 이용하여 각 이미지가 고유한 파일 이름 또는 경로를 갖도록 하는 것이 중요합니다. 그렇게 하면 업로드 후, 대표 이미지를 단일 이미지를 선택하도록 설정할 수 있습니다.
  3. 이미지 검증 및 조정 노드 추가:

    • 이미지 업로드 후, 중복되는 이미지를 찾아 제거하거나, 본문의 각 이미지가 특정 조건에 맞게 사용될 수 있도록 Set 노드나 Function 노드를 통해 검증 및 조정 기능을 추가할 수 있습니다.

관련된 내용을 다루고 있는 게시글을 살펴보시면 문제 해결에 도움이 될 수 있습니다:

제가 제공하는 답변 외에도 지식공유자님의 깊이 있는 전문성에 기반한 또다른 해결책을 받아보시기 바랍니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

이종범님의 프로필 이미지
이종범

작성한 질문수

질문하기