Visuellen Seiteneditor ausblenden, wenn eine bestimmte Vorlage ausgewählt ist?

7

Wie verstecke ich den Seiteneditor (WYSIWYG-Editor), wenn die aktuelle Seite auf eine bestimmte Vorlage eingestellt ist?

Ich habe den folgenden Code bereits in benutzerdefinierten Meta-Feldern hinzuzufügen, wenn bestimmte Vorlagen ausgewählt werden:

add_action('admin_init','my_meta_init');
function my_meta_init()
{
    $post_id = $_GET['post'] ? $_GET['post'] : $_POST['post_ID'];
    $template_file = get_post_meta($post_id, '_wp_page_template', TRUE);

    $savemeta = true;

    if ($template_file == 'template-page-2quotes.php') {
        add_meta_box('main_quote_meta-meta', 'Top Quote', 'main_quote_meta', 'page', 'side', 'low');
        add_meta_box('sub_quote_meta-meta', 'Right Hand Side Quote', 'sub_quote_meta', 'page', 'normal', 'low');
    } elseif ($template_file == 'template-page-1quote.php') {
        add_meta_box('sub_quote_meta-meta', 'Right Hand Side Quote', 'sub_quote_meta', 'page', 'normal', 'low');
    } elseif ($template_file == 'template-page-factsnfigures.php') {
        add_meta_box('facts_n_figures-meta', 'Amount Raised', 'facts_n_figures', 'page', 'normal', 'low');
    } elseif ($template_file == 'template-page-fundraising.php') {
        add_meta_box('fundraising_ideas-meta', 'Fundraising Ideas', 'fundraising_ideas', 'page', 'side', 'low');
    } else {
        $savemeta = false;  
    }
    if($savemeta == true) {
        add_action('save_post','my_meta_save');
    }
}

Was ich zum Beispiel möchte, ist, dass der Editor entfernt wird, wenn $template_file == 'template-page-2quotes.php'

Bearbeiten (Arbeitscode):

add_action('admin_init','my_meta_init');
function my_meta_init()
{
    $post_id = $_GET['post'] ? $_GET['post'] : $_POST['post_ID'];
    $template_file = get_post_meta($post_id, '_wp_page_template', TRUE);

    $savemeta = true;
    $hideeditor = false;

    if ($template_file == 'template-page-2quotes.php') {
        add_meta_box('main_quote_meta-meta', 'Top Quote', 'main_quote_meta', 'page', 'side', 'low');
        add_meta_box('sub_quote_meta-meta', 'Right Hand Side Quote', 'sub_quote_meta', 'page', 'normal', 'low');
    } elseif ($template_file == 'template-page-1quote.php') {
        add_meta_box('sub_quote_meta-meta', 'Right Hand Side Quote', 'sub_quote_meta', 'page', 'normal', 'low');
    } elseif ($template_file == 'template-page-factsnfigures.php') {
        add_meta_box('facts_n_figures-meta', 'Amount Raised', 'facts_n_figures', 'page', 'normal', 'low');
    } elseif ($template_file == 'template-page-fundraising.php') {
        add_meta_box('fundraising_ideas-meta', 'Fundraising Ideas', 'fundraising_ideas', 'page', 'side', 'low');
    } elseif($template_file == 'template-page-news.php') {
        $hideeditor = true;
        $savemeta = false;
    } else {
        $savemeta = false;  
    }
    if($savemeta == true) {
        add_action('save_post','my_meta_save');
    }
    if($hideeditor == true) {
        add_action('admin_print_styles', 'admin_no_editor_style');
    }
}
function admin_no_editor_style() {
    echo "<style>#postdivrich{display:none;}</style>";
}
Scott
quelle
Denken Sie daran, es ist Montag 7 Uhr morgens und ich habe gerade meinen Kaffee angefangen! Die einfachste Lösung, an die ich als erstes denke, besteht darin, einen benutzerdefinierten Beitragstyp für diese Beiträge zu erstellen. Dann können Sie den unterstützten Optionen einfach keinen Editor hinzufügen. Aber ich vermute, Sie haben Gründe, möglicherweise kein CPT zu wollen?
Rev. Voodoo
Der benutzerdefinierte Beitragstyp funktioniert hier leider nicht, da ich eher Seiten als Beiträge verwende. Ich bin mir bewusst, dass Sie sich in Posts, die Sie verwenden können, 'supports' => array('editor')gefragt haben, ob es einen Filter oder Hook gibt, den Sie auslösen können, um den Editor zu entfernen ...
Scott

Antworten:

12
add_action( 'init', 'remove_editor_init' );

function remove_editor_init() {
    // If not in the admin, return.
    if ( ! is_admin() ) {
       return;
    }

    // Get the post ID on edit post with filter_input super global inspection.
    $current_post_id = filter_input( INPUT_GET, 'post', FILTER_SANITIZE_NUMBER_INT );
    // Get the post ID on update post with filter_input super global inspection.
    $update_post_id = filter_input( INPUT_POST, 'post_ID', FILTER_SANITIZE_NUMBER_INT );

    // Check to see if the post ID is set, else return.
    if ( isset( $current_post_id ) ) {
       $post_id = absint( $current_post_id );
    } else if ( isset( $update_post_id ) ) {
       $post_id = absint( $update_post_id );
    } else {
       return;
    }

    // Don't do anything unless there is a post_id.
    if ( isset( $post_id ) ) {
       // Get the template of the current post.
       $template_file = get_post_meta( $post_id, '_wp_page_template', true );

       // Example of removing page editor for page-your-template.php template.
       if (  'page-your-template.php' === $template_file ) {
           remove_post_type_support( 'page', 'editor' );
           // Other features can also be removed in addition to the editor. See: https://codex.wordpress.org/Function_Reference/remove_post_type_support.
       }
    }
}
foread
quelle
+1. Trotzdem würde ich vorschlagen, einer Antwort ein paar erklärende Zeilen hinzuzufügen - sorgt für eine bessere Lesbarkeit und Verständlichkeit der Antwort ...
Johannes Pille
5
add_action('init', 'remove_editor_init');
function remove_editor_init() {
    remove_post_type_support('page', 'editor');
}

Sie können dies in Ihre vorhandene Logik zum Erkennen der aktuellen Seitenvorlage einbinden, sodass Sie den Editor nur für bestimmte Seiten deaktivieren.

Siehe: http://codex.wordpress.org/Function_Reference/remove_post_type_support

Jonathan Nicol
quelle
3

Sie können eine einfache CSS-Regel mit display:none;in Ihrem Metabox-Funktionscode hinzufügen :

if ($template_file == 'template-page-2quotes.php') {
   echo '<style>#postdivrich{display:none;}</style>';
}
Bainternet
quelle
Danke Bainternet. Ich habe Ihre Idee aufgegriffen und anders bearbeitet. Siehe bearbeiten
Scott
0

Zusätzlich zu den hervorragenden Nur-WP-Antworten können Benutzer des Plugins " Erweiterte benutzerdefinierte Felder" ihren Felddefinitionen einfach eine einzige Direktive hinzufügen, um den Editor von den zugehörigen Seiten zu entfernen:

$args = array(); // Already defined with many elements

$args['hide_on_screen'] = array('the_content'); // Remove the Editor from associated Pages

acf_add_local_field_group($args); // Already defined for use with extant $args

Da dies in den WP-Shops, mit denen ich gearbeitet habe, ein außerordentlich häufiges Plugin zu sein scheint, sollte diese Methode erwähnt werden.

dotancohen
quelle