Remove Editor From Homepage

时间:2017-07-14 作者:heady12

我正在尝试使用以下功能从主页中删除编辑器,但我很难做到这一点?

function hide_homepage_editor() {
    if ( is_admin() ) {
        if (is_front_page()) {
            remove_post_type_support(\'page\', \'editor\');
        }
    }
}
add_action( \'admin_init\', \'hide_homepage_editor\' );
另一次尝试:

function hide_homepage_editor() {
    if ( is_admin() ) {
        $post_id = 0;
        if(isset($_GET[\'post\'])) $post_id = $_GET[\'post\'];
        $template_file = get_post_meta($post_id, \'_wp_page_template\', TRUE);
        if ($template_file == \'front-page.php\') {
            remove_post_type_support(\'page\', \'editor\');
        }
    }
}
add_action( \'admin_init\', \'hide_homepage_editor\' );
有人知道为什么这些都不起作用,以及我如何从frontpage页面集中删除页面编辑器吗?

3 个回复
最合适的回答,由SO网友:Andrew M 整理而成

你的方法有几个问题

通过使用admin_init 钩子您将不会有任何对post对象的引用。这意味着您将无法获取帖子ID或使用诸如get\\u the\\u ID之类的任何操作,因为帖子实际上不会被加载。你可以在这里的顺序中看到https://codex.wordpress.org/Plugin_API/Action_Reference

因此,如果在wp操作之后运行操作钩子,则会得到post对象。例如

add_action(\'admin_head\', \'remove_content_editor\');
/**
 * Remove the content editor from ALL pages 
 */
function remove_content_editor()
{ 
    remove_post_type_support(\'page\', \'editor\');        
}
现在,此代码段将从所有页面中删除编辑器。问题是is_homeis_front_page 在管理方面不起作用,因此您需要添加一些元数据来区分您是否在主页上。本页对这方面的方法进行了非常全面的讨论:Best way to present options for home page in admin?

所以,如果你使用了一些额外的元数据,你可以这样检查

add_action(\'admin_head\', \'remove_content_editor\');
/**
 * Remove the content editor from ALL pages 
 */
function remove_content_editor()
{
    //Check against your meta data here
    if(get_post_meta( get_the_ID(), \'is_home_page\' )){      
        remove_post_type_support(\'page\', \'editor\');         
    }

}
希望这能帮到你

*******更新************

实际上,我刚刚再次研究了这个问题,并意识到有一种更简单的方法。如果在阅读设置中将首页设置为静态页,则可以对照page_on_front 选项值。在这种情况下,以下操作将起作用

add_action(\'admin_head\', \'remove_content_editor\');
/**
 * Remove the content editor from pages as all content is handled through Panels
 */
function remove_content_editor()
{
    if((int) get_option(\'page_on_front\')==get_the_ID())
    {
        remove_post_type_support(\'page\', \'editor\');
    }
}

SO网友:Mauro Mascia

古腾堡Wordpress 5更新:

<?php
/**
 * Disable standard editor and Gutenberg for the homepage
 * keeping the status (enabled/disabled) for others who uses the same filter (i.e. ACF)
 */
add_filter( \'use_block_editor_for_post\', \'yourtheme_hide_editor\', 10, 2 );
function yourtheme_hide_editor( $use_block_editor, $post_type ) {
    if ( (int) get_option( \'page_on_front\' ) == get_the_ID() ) { // on frontpage
        remove_post_type_support( \'page\', \'editor\' ); // disable standard editor
        return false; // and disable gutenberg
    }

    return $use_block_editor; // keep gutenberg status for other pages/posts 
}

SO网友:Nic Bug

谢谢你的解决方案,安德鲁。我为polylang翻译的页面添加了一个代码,以应用过滤器:

/**
 * Remove the content editor from front page
 */
function remove_content_editor(){
    if((int) get_option(\'page_on_front\')==get_the_ID()){
        remove_post_type_support(\'page\', \'editor\');
    }
    if(function_exists("pll_get_post")){
        if((int) pll_get_post(get_the_ID(),"en")==get_the_ID()){
            remove_post_type_support(\'page\', \'editor\');
        }
    }
}
add_action(\'admin_head\', \'remove_content_editor\');
将“en”更改为匹配的语言字符串。就我而言,第一语言是德语,第二语言是英语(en)。

结束

相关推荐

Apply_Filters(‘the_content’)-是否使其忽略快捷代码?

我正在使用apply_filters(\'the_content) 因此,我可以在后端的wp编辑器中看到格式正确的内容。但是,这也会呈现内容中的短代码。我希望它忽略短代码,对其余内容进行过滤,基本上与发帖时一样。如果您在后端查看帖子内容,您将看到短代码,但如果您在网站的页面内查看它,您将看到呈现的短代码(其结果)。这可能吗?