와 ㅋㅋㅋ 진짜 골치아프네요

 

다른 분들은 그냥 여러가지로 삽질하지 마시고 CONORY님 유료 모듈 하나로 쉽게 해결하시길

 

기왕 무료 SEO모듈 사용하는 김에 쓸만하게 만들어보려고 하는데 산넘어 산이네요

 

제 사이트만 이상한줄 알았는데 여기 @웹지기님 사이트도 마찬가지...

 

소스코드를 보면, 일단 첨부파일이 있는 경우 섬네일을 갖고 og:image 태그를 생성하도록 되어 있고

 

그와는 별개로, 설정에서 등록한 사이트 이미지를 또 og:image 태그로 생성하도록 되어 있는데

 

이로 인해 글에 첨부이미지가 없는 경우는 괜찮지만 있는 경우는 두개씩 달립니다

 

그래서 페이스북으로 가져가 보면 첨부파일이 있는데도 그 섬네일이 안나오고 사이트 이미지만 나온다던가

 

카톡으로 가져가 보면 한참 로딩하다가 엑박(하얀바탕에 그림표시만 나옴)으로 나온다던가

 

암튼 이모양입니다

 

이거 해결하려고 하는데 PHP 모르는 저로서는 보통 일이 아니네요

 

구글에 찾아봐도 대체 무슨 말인지 모르겠고...

 

아 그리고 이건 여담인데, 혹시 twitter card 애드온 같이 쓰시는 분들은 애드온 파일 열어서 og태그 관련부분 전부 지우고 쓰세요

 

그거때문에 또 중복으로 걸립니다 (그리고 og:url이 짧은주소가 아니라 긴 주소로 나오더군요)

  • ?
    저도 비슷한 문제가 있어서, if문으로 수정했던 것 같습니다.
    썸네일이 이미 존재하는 경우에는 썸네일을 og:image로, 만약에 없다면 설정에 등록된 이미지를 og:image로 노출되게끔이요.
  • ? ?

    어떻게 수정하셨나요?

     

    if ($oDocument->hasUploadedFiles()) {
    $image_ext = array('bmp', 'gif', 'jpg', 'jpeg', 'png');
    foreach ($oDocument->getUploadedFiles() as $file) {
    if ($file->isvalid != 'Y') continue;
    
    $ext = array_pop(explode('.', $file->uploaded_filename));
    
    if (!in_array(strtolower($ext), $image_ext)) continue;
    $piece->image[] = Context::get('request_uri') . $file->uploaded_filename;
    }
    } else {if ($config->site_image_url) $piece->image[] = $config->site_image_url;}

     

     

    이런 식으로 추가하고 이거 이후에 나오는 "if ($config->site_image_url) $piece->image[] = $config->site_image_url;" 는 삭제를 해봤는데

     

    문제가 두가지 생기는데

     

    1. 문서가 아닌 경우 og:image가 생성되지 않음

    2. 첨부파일이 이미지 파일이 아닌 경우 og:image가 생성되지 않음

     

    (조건문이 "문서인 경우"+"첨부파일이 있는/없는 경우"로 되어 있어서..)

     

    이런 문제가 있네요

  • ?

    1번은 해결 완료했네요

     

    뒤쪽 if구문에

     

    } else {
    if (!$is_index) {
    $page = (Context::get('page') > 1) ? Context::get('page') : null;
    $piece->url = getNotEncodedFullUrl('mid', $current_module_info->mid, 'page',$page);
    if ($config->site_image_url) $piece->image[] = $config->site_image_url;
    } else {if ($config->site_image_url) $piece->image[] = $config->site_image_url;}
    }

     

     

    저런 식으로 추가해주니까, 문서가 아닌 경우에도 목록이나 메인페이지에서도 og:image를 출력해 주네요

     

    근데 이걸로는 여전히 "첨부파일이 존재+이미지파일이 아닌 경우"가 해결이 안 돼서... 저 부분은 어떻게 해야 할지 모르겠네요

     

    구글링하는 중인데 아직은 잘 모르겠네요

     

  • ? ?
    else {if ($config->site_image_url) $piece->image[] = $config->site_image_url;} 이 구문을 처음의 큰 if문에도 else로 처리하면 되지 않을까요.
  • ? ?
    따로 처리할만한 곳이 없네요

    다른건 다 되는데

    if ($oDocument->hasUploadedFiles()) {
    $image_ext = array('bmp', 'gif', 'jpg', 'jpeg', 'png');
    foreach ($oDocument->getUploadedFiles() as $file) {
    if ($file->isvalid != 'Y') continue;

    $ext = array_pop(explode('.', $file->uploaded_filename));

    if (!in_array(strtolower($ext), $image_ext)) continue;
    $piece->image[] = Context::get('request_uri') . $file->uploaded_filename;
    }
    }

    이 부분이 문제인지라... 지금 저 if 구문 이후에 else {if ($config->site_image_url) $piece->image[] = $config->site_image_url;} 이럴게 처리되어 있어서, "업로드된 파일이 없으면" 사이트 이미지를 불러오게끔 되어 있는데

    "엄로드된 파일이 있는 경우 + 'bmp', 'gif', 'jpg', 'jpeg', 'png' 파일이 아닌 경우" 이게 문제입니다.

    저기서 어느 부분을 어떻게 바꿔야 그 경우에 사이트이미지를 불러오게 할 수 있는지 모르겠네요
  • ? profile
    if ($oDocument->hasUploadedFiles()) {
    $image_ext = array('bmp', 'gif', 'jpg', 'jpeg', 'png');
    foreach ($oDocument->getUploadedFiles() as $file) {
    if ($file->isvalid != 'Y') continue;

    $ext = array_pop(explode('.', $file->uploaded_filename));
    if (!in_array(strtolower($ext), $image_ext)) continue;
    $piece->image[] = Context::get('request_uri') . $file->uploaded_filename;
    }
    }
    밑에
    if($file->uploaded_filename == null){
    if ($config->site_image_url) $piece->image[] = $config->site_image_url;
    }
    를 추가했는데 이리하면 되지 않을까요..
    어차피 foreach 에서 이미지 파일을 못찾으면 null값일테고 그때만 사이트 이미지를 og:image로 보이게 하면 될듯.
  • profile
    근데 위치에 문제가 있는지 해당 위치가 게시글이 아니면 안되네요 위치만 조정하면 될듯..
  • profile
    원래 if ($config->site_image_url) $piece->image[] = $config->site_image_url; 가 있던 줄을
    if($file->uploaded_filename == null){
    if ($config->site_image_url) $piece->image[] = $config->site_image_url;
    } 으로 바꾸니깐 잘 작동하는거 같네요
  • profile ?
    원래 있던 줄이라는건

    $piece->title = $this->getBrowserTitle($piece->document_title);

    $this->addLink('canonical', $piece->url);


    여기 사이 말씀하시는 건가요?
  • ? profile
    넵.. 거기가 아마 133줄 근처 쯤 되죠..?
  • profile ?
    여전히 안되네요... 이미지가 있는 경우에 중복으로 출력되는 문제는 해결되는데, 첨부파일이 있지만 이미지가 아닌 경우는 여전히 og:image 태그 자체가 생성이 안되네요
  • ? profile

    헐 저 바보인듯..
    if($piece->image == null){

    이걸로 바꿔보세요. 이제 될겁니다..

    이상한걸로 비교하고 있었네요 (...)

  • profile ?
    잘되네요. 감사합니다
  • ?
    오 정보공유하시는 모습 좋네요 ㅎㅎ
  • profile
    아 카카오톡 등에서 잘못 긁어지는게 SEO모듈 때문이였군요.. 고쳐놔야겠네요 이거
  • ?
    그러고보니 본문에서 언급한 twitter card 애드온도 똑같은 문제(첨부파일이 이미지가 아닐 경우 미리보기 이미지가 제대로 생성이 안 되는 문제)가 있네요

    그냥 twitter card 애드온도 전에 meta add 애드온 합친 것처럼(https://xetown.com/qna/152803 ) 같이 합쳐버렸습니다