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>";
}

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.
       }
    }
}

+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


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

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.