2012-03-21 54 views
1

我創建了一個新的頁面被分配一個自定義模板。當我訪問該頁面的網址時,我看到了默認頁面佈局(不是我的模板),管理工具欄顯示了與媒體有關的選項(例如:編輯媒體)。WordPress的網頁塞衝突

有些撓頭之後,我推斷,在某種程度上該URL必須指向一個媒體項目。我編輯了頁面slu and,並且「賓果」實際頁面與預期一樣出現。當我訪問原始URL(來自第一個slu))時,我看到相同的媒體項目。

底線:看起來巧合的是頁面和媒體項目共享相同的名稱,這是以某種方式導致WP的電線越過。

我的問題:有人可以幫助我瞭解如何/爲什麼發生這種情況?是否WordPress的創造神奇永久鏈接在媒體庫(他們的位置在其他wp-content/uploads/...)的一切嗎?

注:媒體項目已正常上傳到媒體庫(不進入FTP根目錄等)

回答

1

是,在WordPress你不能有重複的蛞蝓/分類/分類/標籤。因此,如果您的主題允許媒體文件和固定鏈接擁有自己的頁面,並且slug與另一個相同,它通常會附加一個數字,因爲數據庫不喜歡它。

媒體塞「榜樣」
頁塞「榜樣」是行不通的,因爲這已經塞存在,如果管理員做了它會自動改變蛞蝓爲「例如-1」。

+0

我見過的附加「-1」之前,但我仍然感到困惑爲什麼沒有在我的故事發生。 WP根據頁面的標題自動生成衝突的slu//永久鏈接。同樣,主題如何允許/禁止媒體文件擁有自己的頁面?我絕對沒有故意啓用它。 – emersonthis 2012-03-22 13:17:04

+0

在attachment.php下(http://codex.wordpress.org/images/1/18/Template_Hierarchy.png)。上傳的文件不應該與已經創建的slu conflict衝突,系統會自我保護(它也會爲圖片添加後綴),所以不知道發生了什麼,有時如果您更改了url結構,則必須刷新永久鏈接。 – Wyck 2012-03-22 14:31:57

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 2015-01-15 17:14:45

+0

此代碼查找與帖子具有相同段落的附件,並在其末尾添加「-image」編輯它們的段落。您可以將其粘貼到您的functions.php文件中,重新加載您的網站一次,並在驗證它的工作後將其從該文件中刪除。 – alesub 2015-07-24 20:52:17

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語句。 作爲一個警告:這樣做會在post_names末尾添加另一個-image即使他們有-image已經(例如,-image-image

可能會有更大的文件名檢查這種情況。如果有人真的需要,請更新答案。