Thay đổi sự xuất hiện của văn bản shortcode bên trong trình soạn thảo


11

Có thể thay đổi sự xuất hiện của shortcodes trong trình chỉnh sửa hoặc bằng bất cứ cách nào làm cho nó khác biệt hơn với văn bản xung quanh?

Ví dụ: nếu nội dung của bài đăng như thế này ...

Trang web tham khảo về Lorem Ipsum, cung cấp thông tin về nguồn gốc của nó, cũng như một trình tạo ngẫu nhiên của Lipsum. Trang web chính xác về Lorem Ipsum, cung cấp thông tin về nguồn gốc của nó, cũng như một trình tạo Môi trường ngẫu nhiên. [Shortcode] asfdasfd [/ shortcode] về Lorem Ipsum, cung cấp thông tin về nguồn gốc của nó, cũng như một trình tạo ngẫu nhiên của Lipsum. Trang web chính xác về Lorem Ipsum, cung cấp thông tin về nguồn gốc của nó, cũng như một trình tạo ngẫu nhiên của Lipum. Trang web chính xác về Lorem Ipsum, cung cấp thông tin về nguồn gốc của nó, cũng như một máy phát điện ngẫu nhiên.

... Sẽ thật tuyệt nếu shortcode bên trong được in đậm để có thể dễ dàng nhìn thấy như thế này:

nhập mô tả hình ảnh ở đây


Điều đó chắc chắn sẽ thuận tiện và chắc chắn là có thể với một số regex / js. Đây là một câu hỏi tương tự và một plugin cho phép bạn thêm các bản xem trước cho các mã ngắn mặc dù chỉ cần làm nổi bật tất cả những gì bạn đề xuất, như bạn muốn <code>hoặc <pre>các thẻ chắc chắn sẽ là trình giả lập.
Bryan Willis

1
Tôi biết điều này không hữu ích cho bạn ngay bây giờ nhưng hãy chú ý đến Shortdding để sớm tích hợp vào lõi ... sẽ biến tính năng cốt lõi cần thiết này thành hiện thực
brianjohnhanna


/ TẮT chủ đề từ tôi, @brianjohnhanna Tôi đã thấy plugin đó nhưng đó là một loại xem trước (vì vậy nó sẽ trông như thế nào trên frontend) của mã. Nếu tôi hiểu rõ câu hỏi, câu hỏi của OP sẽ làm nổi bật shortcode tagcontentbên trong câu hỏi đó shortcodetrong trình chỉnh sửa.
Charles

Câu trả lời:


12

Bạn có thể thêm một plugin tùy chỉnh, vào WordPress và trình chỉnh sửa trực quan TinyMCE. Nguồn theo dõi là một ví dụ đơn giản hoạt động và thêm một chuỗi trước và sau tất cả shortcode.

Sử dụng

Shortcode sẽ tìm thấy thông qua regex, có liên quan nếu bạn cần nó cho các mã ngắn khác nhau và đánh dấu khác nhau về điều này. Kịch bản thêm nội dung tùy chỉnh vào shortcode, ở đây <b>FB-TESTtrước và sau thẻ đóng và nội dung. Bạn cũng có thể sử dụng các lớp đánh dấu, css để tạo khả năng hiển thị. Điều quan trọng là, bạn xóa nội dung này trên lưu bài đăng, được kích hoạt trong tập lệnh trên PostProcess. Ở đây chạy tập lệnh và loại bỏ nội dung tùy chỉnh thông qua chức năng restoreShortcodes.

Nhưng, hiện tại là đơn giản, có thể không hợp lệ cho mỗi yêu cầu. Có lẽ bạn nên lưu trữ shortcode trên init và khôi phục với biến được lưu trữ này.

Ảnh chụp màn hình

Xem ảnh chụp màn hình làm ví dụ để hiểu kết quả.

nhập mô tả hình ảnh ở đây

Nguồn

Nguồn cần cấu trúc thư mục này để sử dụng nó:

-- shortcode-replace
 |--php file
 |--assets
   |-- js
     |-- js file

Lúc đầu, một tệp php nhỏ, bao gồm nguồn dưới dạng plugin trong môi trường wp. Để nó trong thư mục chính của plugin shortcode-replace.

<?php # -*- coding: utf-8 -*-

/**
 * Plugin Name:     Shortcode Replace
 * Plugin URI:      
 * Description:     
 * Version:         0.0.1
 * Text Domain:     
 * Domain Path:     /languages
 * License:         MIT
 * License URI:
 */

namespace FbShortcodeReplace;

if ( ! function_exists( 'add_action' ) ) {
    exit();
}

if ( ! is_admin() ) {
    return;
}

add_action( 'admin_enqueue_scripts', __NAMESPACE__ . '\initialize' );
function initialize( $page ) {

    if ( 'post.php' === $page ) {
        add_filter( 'mce_external_plugins', __NAMESPACE__ . '\add_tinymce_plugin' );
    }
}

function add_tinymce_plugin( $plugins ) {

    if ( ! is_array( $plugins ) ) {
        $plugins = array();
    }

    $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '.dev' : '';
    $url     = plugins_url( '/assets/js/fb_shortcode_replace.js', __FILE__ );

    $plugins = array_merge( $plugins, array( 'fb_shortcode_replace' => $url ) );
    return $plugins;
}

Tệp php này tải một javascript làm plugin trong trình chỉnh sửa trực quan. Plugin sẽ chỉ tải trên các trang quản trị, chỉ các trang có chuỗi post.php- xem if ( 'post.php' === $page ) {.

Nguồn theo dõi là tệp javascript, được đặt tên fb_shortcode_replace.js. Để nó trong thư mục assets/js/, bên trong thư mục plugin của plugin này.

tinymce.PluginManager.add( 'fb_shortcode_replace', function( editor ) {

    var shortcode = /\[.+\]/g;
    var additional_before = '<b>FB-TEST';
    var additional_after = 'FB-TEST</b>';

    function ifShortcode( content ) {

        return content.search( /\[.+\]/ ) !== -1;
    }

    function replaceShortcodes( content ) {

        return content.replace( shortcode, function( match ) {
            return html( match );
        } );
    }

    function restoreShortcodes( content ) {

        content = content.replace( additional_before, '' );
        content = content.replace( additional_after, '' );
        return content;
    }

    function html( data ) {

        console.log( data );
        return additional_before + data + additional_after;
    }

    editor.on( 'BeforeSetContent', function( event ) {

        // No shortcodes in content, return.
        if ( ! ifShortcode( event.content ) ) {
            return;
        }

        event.content = replaceShortcodes( event.content );
    } );

    editor.on( 'PostProcess', function( event ) {

        if ( event.get ) {
            event.content = restoreShortcodes( event.content );
        }
    } );
} );

Hữu ích

Gợi ý bổ sung

Plugin Raph chuyển đổi mã ngắn trong html để xem nó và đơn giản hóa để hiểu kết quả. Có lẽ nó cũng hữu ích trong bối cảnh 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.