Ẩn trình chỉnh sửa trực quan trang nếu mẫu nhất định được chọn?


7

Làm cách nào để ẩn trình chỉnh sửa trang (trình soạn thảo WYSIWYG) nếu trang hiện tại được đặt thành một mẫu nhất định.

Tôi đã có đoạn mã sau để thêm vào các hộp meta tùy chỉnh khi các mẫu nhất định được chọn:

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

Điều tôi muốn ví dụ là trình soạn thảo bị xóa nếu $template_file == 'template-page-2quotes.php'

Chỉnh sửa (Mã làm việc):

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

Hãy nhớ rằng đó là 7 giờ sáng thứ Hai và tôi mới bắt đầu uống cà phê! Giải pháp đơn giản nhất tôi nghĩ đến đầu tiên, là tạo một loại bài đăng tùy chỉnh cho các bài đăng này. Sau đó, bạn không thể thêm trình soạn thảo vào các tùy chọn hỗ trợ. Nhưng tôi đoán bạn có lý do để không muốn CPT?
Rev. Voodoo

Xin lỗi, loại bài đăng tùy chỉnh sẽ không hoạt động ở đây vì tôi đang sử dụng các trang thay vì các bài đăng. Tôi biết trong các bài đăng bạn có thể sử dụng 'supports' => array('editor')Tôi đã tự hỏi liệu có bộ lọc hoặc hook mà bạn có thể kích hoạt để xóa trình chỉnh sửa không ...
Scott

Câu trả lời:


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. Tuy nhiên, tôi khuyên bạn nên thêm một vài dòng giải thích vào câu trả lời - làm cho dễ đọc và dễ hiểu hơn cho câu trả lời ...
Johannes Pille 20/03/13


3

bạn có thể thêm một quy tắc CSS đơn giản với display:none;mã chức năng metabox của mình:

if ($template_file == 'template-page-2quotes.php') {
   echo '<style>#postdivrich{display:none;}</style>';
}

Cảm ơn Bai Internet. Tôi đã lấy ý tưởng của bạn và làm việc khác đi. Xem chỉnh sửa
Scott

0

Ngoài các câu trả lời tuyệt vời chỉ dành cho WP, người dùng plugin Trường tùy chỉnh nâng cao có thể chỉ cần thêm một lệnh vào định nghĩa trường của họ, xóa Trình chỉnh sửa khỏi các trang được liên kết:

$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

Vì đây có vẻ là một plugin cực kỳ phổ biến tại các cửa hàng WP mà tôi đã làm việc cùng, nên nên đề cập đến phương pháp này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.