是否为页面列表中的层次结构创建“虚拟”父页面?

时间:2013-04-12 作者:markratledge

Is it possible to set up a "dummy" page - just a page title that appears in the page listing, and a page that is not editable and doesn\'t have a slug?

这更像是一个假设性的问题,因为我不知道从哪里开始编写代码,也不知道如何选择最佳方式。

我希望可以选择在页面列表中设置这样的父/子层次结构,以便子页面位于父页面之下,但父页面只是一个占位符,而不是真正的页面。

原因:对于没有WordPress经验的用户来说,按照父/子层次结构组织页面是很有帮助的,尤其是如果有很多页面的话,这样相关页面在页面列表中会更有组织。如果子页面是在父页面下组织的,则用户也可以可视化地构建菜单。问题是父页面可以编辑,而不是已建立页面内容的一部分,根据我的经验,这会导致用户混淆。

我可以使用一个函数删除特定页面的编辑器,并在robots中使用entires。txt不索引虚拟父级,但这意味着为新父级更改这些索引。而父页面仍然有一个slug,即使它被

那么,有没有一种方法可以创建一个函数,该函数可以创建页面标题并能够分配子页面,但父页面不可修改、不可编辑并且没有slug

enter image description here

1 个回复
最合适的回答,由SO网友:Wyck 整理而成

好的,这是我的尝试,它非常粗糙,最终我无法删除父项的链接/颜色,但父项链接将不起作用。。所以它有点起作用了。

首先创建设置了以下参数的CPT:

$args = array( 
        \'hierarchical\'        => true,
        \'public\'              => false,
        \'show_ui\'             => true,
        \'show_in_menu\'        => true,
        \'capability_type\'     => \'post\', 
        \'supports\'            => array( \'title\',\'page-attributes\' ),
    );
根据需要填写其余内容,这将使您能够在管理中显示父帖子/页面,但不在前端显示,它还允许通过page-attributes.

现在,我们可以加入一个过滤器,删除父级的小链接“编辑”、“查看”和“垃圾桶”。

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# 但是孩子们会没事的。

缺点是父项仍然是一个蓝色链接而不是黑色文本,我找不到任何简单的方法从标题中删除链接,或者通过javascript添加自定义CSS,而不扩展WP List Table.

当然,您可以使用the_title 筛选,但甚至将其设置为NULL 通过上述条件仍显示< a href=..>

此外,可能还有一种更简单的方法来完成所有这一切,只需使用is_post_type_hierarchical 滤器

Github link to Table Class 标题代码。

结束

相关推荐

仅在wp-admin中显示死亡白屏

我可以登录该网站,但登录后,我在wp admin中看到一个白色屏幕。我仍然可以访问该网站,它显示我已使用每个页面顶部的工具栏登录,但每当我进入wp admin时,都会遇到一个白色屏幕。我尝试过重命名themes和plugins文件夹,甚至删除了这两个文件夹。我尝试将php内存限制提高到128M,但仍然没有成功。有什么建议吗?如果我必须重新安装Wordpress,我如何才能不丢失已经存在的一切?编辑:我也打开了调试,但仍然没有收到任何错误、警告或通知。