web-dev-qa-db-fra.com

Supprimer l'éditeur de la page d'accueil

J'essaie de supprimer l'éditeur de la page d'accueil en utilisant les fonctions suivantes, mais j'ai du mal à atteindre cet objectif?

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

un autre essai:

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

Quelqu'un sait pourquoi ils ne fonctionnent pas et comment puis-je supprimer l'éditeur de page de la page définie comme page d'accueil?

2
heady12

Votre approche pose quelques problèmes

En utilisant admin_init hook, vous n'aurez aucune référence à l'objet post. Cela signifie que vous ne pourrez pas obtenir l'ID de publication ni utiliser quoi que ce soit comme get_the_ID car la publication ne sera pas chargée. Vous pouvez voir cela dans l'ordre ici https://codex.wordpress.org/Plugin_API/Action_Reference

Donc, si vous exécutez le crochet d’action après l’action wp, vous aurez l’objet post. Par exemple

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

Maintenant, cet extrait supprimera l'éditeur de toutes les pages. Le problème est que is_home et is_front_page ne fonctionnera pas du côté de l’administrateur. Vous devrez donc ajouter des métadonnées pour savoir si vous êtes sur la page d’accueil. Il y a une discussion très complète des approches pour cela sur cette page: Le meilleur moyen de présenter les options de page d'accueil en admin?

Donc, si vous avez utilisé des méta-données supplémentaires, vous pouvez alors vérifier ceci comme

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

}

Espérons que cela vous aidera

******* Mettre à jour ************

En fait, je viens d’examiner à nouveau cette question et j’ai réalisé qu’il existe un moyen plus simple. Si vous avez défini la page d'accueil comme une page statique dans les paramètres de lecture, vous pouvez vérifier la valeur de l'option page_on_front . Dans ce cas, ce qui suit fonctionnera

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

merci pour la solution Andrew. J'ai ajouté un code pour la page traduite par polylang pour appliquer également le filtre:

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

Remplacez "en" par la chaîne de langue correspondante. dans mon cas, la première langue est l'allemand et le deuxième anglais (en).

2
Nic Bug