it-swarm.com.de

Editor von Homepage entfernen

Ich versuche, den Editor mit den folgenden Funktionen von der Homepage zu entfernen, aber ich habe Mühe, dies zu erreichen?

function hide_homepage_editor() {
    if ( is_admin() ) {
        if (is_front_page()) {
            remove_post_type_support('page', 'editor');
        }
    }
}
add_action( 'admin_init', 'hide_homepage_editor' );

noch ein Versuch:

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

Weiß jemand, warum diese nicht funktionieren und wie ich den Seiteneditor von der als Startseite eingestellten Seite entfernen kann?

2
heady12

Es gibt ein paar Probleme mit Ihrem Ansatz

Wenn Sie den admin_init -Hook verwenden, haben Sie keinen Verweis auf das Post-Objekt. Dies bedeutet, dass Sie die Beitrags-ID nicht erhalten oder nichts wie get_the_ID verwenden können, da der Beitrag nicht tatsächlich geladen wird. Sie können dies in der Reihenfolge hier https://codex.wordpress.org/Plugin_API/Action_Reference sehen.

Wenn Sie also den Aktions-Hook nach der WP-Aktion ausführen, haben Sie das Post-Objekt. Zum Beispiel

add_action('admin_head', 'remove_content_editor');
/**
 * Remove the content editor from ALL pages 
 */
function remove_content_editor()
{ 
    remove_post_type_support('page', 'editor');        
}

Jetzt entfernt dieses Snippet den Editor von allen Seiten. Das Problem ist, dass is_home und is_front_page auf der Administratorseite nicht funktionieren. Sie müssen also einige Metadaten hinzufügen, um zu unterscheiden, ob Sie sich auf der Startseite befinden. Es gibt eine sehr umfassende Diskussion der Ansätze dafür auf dieser Seite: Beste Möglichkeit, Optionen für die Homepage in Admin zu präsentieren?

Wenn Sie also einige zusätzliche Metadaten verwendet haben, können Sie dies wie folgt überprüfen

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

}

Hoffentlich hilft dir das weiter

******* Update ************

Eigentlich habe ich mich gerade noch einmal damit befasst und festgestellt, dass es einen einfacheren Weg gibt. Wenn Sie in den Leseeinstellungen festgelegt haben, dass die Startseite eine statische Seite ist, können Sie den Wert der Option page_on_front überprüfen. In diesem Fall funktioniert Folgendes

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

danke für die lösung Andrew. Ich habe einen Code für die von polylang übersetzte Seite hinzugefügt, um auch den Filter anzuwenden:

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

Ändern Sie "en" in die entsprechende Sprachzeichenfolge. in meinem fall ist die erste sprache deutsch und die zweite englisch (en).

2
Nic Bug