次の機能を使用してホームページからエディタを削除しようとしていますが、これを達成するのに苦労していますか?
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' );
なぜこれらが機能しないのか、そしてどうやってフロントページとして設定されているページからページエディタを削除するのですか?
あなたのアプローチにはいくつかの問題があります
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');
}
}
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"を一致する言語文字列に変更します。私の場合、第一言語はドイツ語で、第二言語は英語です。
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
}