問題描述

是否可以改變編輯器中的縮略圖的外觀,或者以任何方式使其與周圍的文本更為區別?

例如,如果帖子的內容是這樣的…

Reference site about Lorem Ipsum, giving information on its origins, as well as a random Lipsum generator.Reference site about Lorem Ipsum, giving information on its origins, as well as a random Lipsum generator.[shortcode]asfdasfd[/shortcode]Reference site about Lorem Ipsum, giving information on its origins, as well as a random Lipsum generator.Reference site about Lorem Ipsum, giving information on its origins, as well as a random Lipsum generator.Reference site about Lorem Ipsum, giving information on its origins, as well as a random Lipsum generator.

… 如果內部的短碼是大膽的,那麼這樣很容易被看到,這樣會很好:

最佳解決方案

您可以添加自定義插件到 WordPress 以及 TinyMCE 可視化編輯器。以下源代碼是一個簡單的例子,它可以在所有的短代碼之前和之後添加一個字符串。

Usage

短碼將通過正則表達式找到,如果您需要它,可以使用不同的短碼和不同的標記。該腳本將自定義內容添加到短代碼中,此處為<b>FB-TEST 前後的標籤和內容。您還可以使用標記,css 類來創建可見性。重要的是,您在保存帖子中刪除此內容,在 PostProcess 的腳本中觸發。這裏運行腳本並通過函數 restoreShortcodes 刪除自定義內容。

但是,目前來説這是簡單的,也許對每個需求都無效。也許你應該使用這個存儲的變量來存儲初始化和還原的短代碼。

Screenshot

以截圖為例,瞭解結果。

Source

源需要這個目錄結構來使用它:

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

起初是一個小的 php 文件,其中包含源代碼作為插件在 wp 環境中。將其放在插件 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;
}

這個 php 文件在可視化編輯器中加載一個 javascript 作為插件。插件只能在管理頁面上加載,只有帶有字符串 post.php 的頁面 – 請參閲 if ( 'post.php' === $page ) {

以下源代碼是名為 fb_shortcode_replace.js 的 javascript 文件。將它放在 assets/js/目錄下,這個插件的 plugin 目錄下。

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

Helpful

額外提示

插件 Raph 轉換 html 中的縮略圖以查看它並簡化以瞭解結果。也許這在這方面也是有幫助的。

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。