問題描述
是否可以設定”dummy” 頁面 – 僅顯示在頁面列表中的頁面標題,以及不可編輯且沒有外掛的頁面?
這更像是一個假設的問題,因為我不知道從哪裡開始程式碼或確定最好的方式。
我想選擇在頁面列表中設定這樣的父/子層次結構,以便子頁面位於父項下,但父頁面只是佔位符,而不是真實頁面。
原因:對於在 WordPress 中沒有很多經驗的使用者,組織父/子層次結構中的頁面 (特別是有大量頁面) 非常有用,以便相關頁面更有條理地在頁面列表中。如果子頁面組織在父級下方,使用者也可以視覺化構建選單。問題是父頁面可以編輯,而不是已建立的頁面內容的一部分,根據我的經驗,這會導致使用者混淆。
我可以使用一個功能來刪除特定頁面的編輯器,並使用 robots.txt 中的 entires 來不對虛擬父項進行索引,但這意味著更改新的父項。那個父母頁面仍然有一個 s lug 聲,即使被阻止的機智
那麼有沒有辦法建立一個建立頁面標題並具有分配子頁面的功能的功能,但是父頁面不可開啟,不可編輯,並且沒有 s??
最佳解決方案
OK 這裡是我的嘗試,它是相當駭客,最終我無法刪除父專案的連結/顏色,但父連結將無法正常工作。所以這有用。
首先建立一個 CPT,並設定以下引數:
$args = array(
'hierarchical' => true,
'public' => false,
'show_ui' => true,
'show_in_menu' => true,
'capability_type' => 'post',
'supports' => array( 'title','page-attributes' ),
);
根據需要填寫其餘的內容,這將使您能夠在管理員中顯示一個父帖子/頁面,但不在前端,它還允許透過 page-attributes 進行父功能。
現在我們可以丟擲一個過濾器,刪除父級的小型”edit”,”view” 和”trash” 連結。
function wpse_95518($actions) {
global $post;
//rename this to your CPT
if ($post->post_type =="parent"){
// check if it's a parent
if ( ! (is_post_type_hierarchical('parent') && $post->post_parent )) {
unset( $actions['inline hide-if-no-js']);
unset( $actions['trash'] );
unset( $actions['view'] );
unset( $actions['edit'] );
}
return $actions;
}
return $actions;
}
add_filter('page_row_actions', 'wpse_95518');
現在事情有點時髦,刪除父標題連結功能來編輯帖子。
function wpse_removetitle_95518($action){
global $post;
if ($post->post_type =="parent"){
if ( is_post_type_hierarchical('parent') && $post->post_parent ) {
return $action;
}else{
return '#'; //just in case
}
}
return $action;
}
add_filter( 'get_edit_post_link', 'wpse_removetitle_95518');
現在 CPT 的父項不應該透過管理員中的連結進行編輯,它將顯示為 edit.php?post_type=parent#,但是孩子們將會正常。
缺點是,父專案仍然是藍色連結而不是黑色文字,我找不到任何簡單的方法來從標題中刪除連結或新增自定義 CSS,以透過 javascript 來擴充套件 WP List Table 。
您可以使用 the_title 過濾器更改父標題,但透過上述條件將其設定為 NULL 仍然顯示< a href=..>
也可以使用 is_post_type_hierarchical 過濾器來簡化所有這些操作。
Github link to Table Class 程式碼的標題。
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。
