2012-03-21 2 views
1

맞춤 템플릿이 지정된 새 페이지를 만들었습니다. 해당 페이지의 URL을 방문하면 기본 페이지 레이아웃 (내 템플릿 아님)이 보이고 관리 도구 모음에 미디어 관련 옵션 (예 : 미디어 편집)이 표시됩니다.Wordpress 페이지 슬러그가 미디어 라이브러리 항목과 충돌합니다

일부 머리가 긁힌 후, 나는 그 URL이 미디어 항목을 가리켜 야한다는 것을 어떻게 든 추론했습니다. 나는 페이지 슬러그를 편집하고 "빙고"실제 페이지는 예상대로 나타납니다. 첫 번째 슬러그에서 원래 URL을 방문하면 동일한 미디어 항목이 표시됩니다.

하단 : 우연히도 페이지와 미디어 항목이 같은 이름을 공유하는 것으로 보입니다. 이것이 어떻게 든 WP의 전선을 가로 지르게했습니다.

내 질문 : 어떻게 이런 일이 발생했는지 이해할 수 있습니까? Wordpress는 미디어 라이브러리 ( 이외의 위치는 wp-content/uploads/...)의 모든 항목에 마법의 퍼머 링크를 만듭니다.

주가 : 미디어 항목이 미디어 라이브러리에 정상적으로 업로드

답변

1

예, 워드 프레스에 중복 슬러그/카테고리/분류 체계/태그가 없습니다 (루트 디렉토리 등을 FTP되지 않음). 그래서 당신의 테마가 미디어 파일과 퍼머 링크가 그들 만의 페이지를 가질 수 있고 슬러그가 다른 페이지와 같을 경우, 데이터베이스가 그것을 좋아하지 않기 때문에 대개 그것에 번호를 붙일 것입니다. 관리자에서 수행하는 경우 그 총알이 이미 존재하기 때문에

미디어 슬러그 "예"
페이지 슬러그 "예"작동하지 않습니다, 그것은 자동으로 "예-1"슬러그 변경됩니다.

+0

이전에 "-1"이 추가 된 것을 보았습니다.하지만 여전히 내 이야기에서 그런 일이 일어나지 않은 이유는 아직도 혼란 스럽습니다. WP는 페이지의 제목에 따라 충돌하는 슬러그/퍼멀 링크를 자동 생성했습니다. 마찬가지로, 테마로 미디어 파일이 자신의 페이지를 갖도록 허용/비 허용하는 방법은 무엇입니까? 나는 이것을 의도적으로 가능하게하지 않았다. – emersonthis

+0

attachment.php (http://codex.wordpress.org/images/1/18/Template_Hierarchy.png).업로드 된 파일은 이미 생성 된 슬러그와 충돌해서는 안되며, 시스템 자체를 보호합니다 (이미지에 접미사를 추가합니다). 그래서 무슨 일이 일어 났는지 확신 할 수 없으며, 때때로 URL 구조를 변경하여 퍼머 링크를 새로 고쳐야하는 경우도 있습니다. – Wyck

0

난 그냥이 문제를했고 이런 식으로 고정 :

$post_s=get_posts('posts_per_page=-1'); 
     foreach($post_s as $p){ 
      $atts = get_posts('post_type=attachment&name='.$p->post_name.'&posts_per_page=-1&post_status=inherit'); 
      foreach($atts as $att){ 
       echo 'found!! '.$p->post_name; 
       // Update post 37 
       $my_post = array(
         'ID'   => $atts->ID, 
         'post_name' => $att->post_name.'-image' 
       ); 
       // Update the post into the database 
       wp_update_post($my_post); 
      } 
     } 
+0

이 코드는 정확히 무엇을합니까? 설명해 주시겠습니까? 또한 어디에서 추가합니까? – drdiv

+0

이 코드는 게시물과 동일한 슬러그를 가진 첨부 파일을 찾고 슬러그를 편집하여 끝에 슬픈 "-image"를 추가합니다. 파일을 functions.php 파일에 붙여넣고 사이트를 한 번 다시로드 한 다음 작동 확인 후 해당 파일에서 파일을 제거 할 수 있습니다. – alesub

0

이 늦은 답변입니다,하지만 난 alesub이 준 답의 깨끗한 버전을주고 싶어.

function wp21418_append_to_post_name() { 

    // Checks to see if the option images_updated has been set or has a value of true. 
    if (get_option('images_updated') === 'true') : 
     return; 
    endif; 

    // get all attachment posts. 
    $attachments = get_posts([ 
     'post_type' => 'attachment', 
     'post_status' => 'inherit', 
     'name' => $p->slug, 
     'posts_per_page' => -1, 
    ]); 

    // For each attachment, loop and update the post_name 
    foreach($attachments as $p){ 

     $attachment = array(
      'ID'   => $p->ID, 
      'post_name' => $p->post_name.'-image' 
     ); 
     // Update the post into the database 
     wp_update_post($attachment); 

    } 

    // Once everything is looped, add the option to the database. 
    add_option('images_updated', 'true'); 
} 

add_action('after_setup_theme', 'wp21418_append_to_post_name'); 

이 기능은 테마가 설정된 직후에 액션 훅에서 실행됩니다. 첫 번째 줄은 데이터베이스에 옵션이 있는지 확인합니다. images_updated. 그 옵션이 존재하면, 우리는 그 함수를 보증하고 어떤 처리도하지 않는다. 그렇지 않으면 옵션이 존재하지 않으면 함수를 실행하고 끝에 옵션을 설정합니다.

이렇게하면 한 번만 실행됩니다. 새로 고침 후 함수를 제거 할 필요가 없습니다. 다시 실행하려면 상단의 if 문을 간단히 제거하면됩니다. 주의해야로 : 이미 -image을 경우에도이 post_names의 끝에서 또 다른 -image을 추가 할 것입니다하고 (예를 들어, -image-image)

그 상황에 대한 검사 이상의 파일 이름이있을 수 있습니다. 누군가가 정말로 필요로하는 경우 그 답변을 업데이트합니다.

관련 문제