问题描述
是否可以设置”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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。
