web-dev-qa-db-ja.com

ホームページからエディタを削除する

次の機能を使用してホームページからエディタを削除しようとしていますが、これを達成するのに苦労していますか?

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' );

なぜこれらが機能しないのか、そしてどうやってフロントページとして設定されているページからページエディタを削除するのですか?

2
heady12

あなたのアプローチにはいくつかの問題があります

admin_init フックを使用することで、postオブジェクトへの参照がなくなります。これは、投稿が実際にロードされないため、投稿IDを取得したりget_the_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_home および is_front_page が管理者側では機能しないため、ホームページにいるかどうかを区別するためにメタデータを追加する必要があることです。このページでは、そのためのアプローチについて非常に包括的な説明があります。 管理者にホームページのオプションを提示するための最良の方法?

したがって、追加のメタデータを使用した場合は、次のようにして確認できます。

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');         
    }

}

うまくいけば、それはあなたを助けるでしょう

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

実際、私はこれをもう一度調べたところ、もっと簡単な方法があることに気付きました。 Reading設定でフロントページを静的ページに設定している場合は、 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');
    }
}
4
Andrew M

andrewというソリューションをありがとう。フィルタを適用するために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"を一致する言語文字列に変更します。私の場合、第一言語はドイツ語で、第二言語は英語です。

2
Nic Bug

Gutenbergを使用した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 
}
0
Mauro Mascia