エディター内のショートコードテキストの外観を変更する


11

エディターでショートコードの外観を変更したり、周囲のテキストと区別しやすくしたりできますか?

たとえば、投稿のコンテンツが次のような場合...

Lorem Ipsumに関するリファレンスサイト。その起源に関する情報とランダムなLipsumジェネレータ。LoremIpsumに関するリファレンスサイト。その起源に関する情報とランダムなLipsumジェネレータ。[shortcode] asfdasfd [/ shortcode] Reference site Lorem Ipsumについて、その起源に関する情報と、ランダムなLipsumジェネレーターを提供します。LoremIpsumに関する参照サイト、その起源に関する情報とランダムなLipsumジェネレーターを提供します。LoremIpsumに関する参照サイト、その起源に関する情報を提供します、だけでなく、ランダムなリップサムジェネレーター。

...中のショートコードが太字になっているといいので、次のように簡単に確認できます。

ここに画像の説明を入力してください


それは間違いなく便利で、いくつかのregex / jsで確かに可能です。ここで同様の質問とあなたが追加することができますプラグインショートコード用のプレビューをあなたが示唆したように、単純にすべてを強調したが、あなたが希望のように、<code>または<pre>タグは間違いなくsimpilerだろうが。
ブライアンウィリス

1
今のところ、これは
役に立た


私からの/ OFFトピック、@ brianjohnhannaそのプラグインを見たことがありますが、それはコードの一種のプレビュー(フロントエンドでの外観)です。私は質問を理解していれば良くOPの質問がハイライト表示されるshortcode tagと、content内部のことをshortcodeエディタで。
Charles

回答:


12

WordPressおよびTinyMCEビジュアルエディターにカスタムプラグインを追加できます。以下のソースは、単純な例であり、すべてのショートコードの前後に文字列を追加しています。

使用法

ショートコードは正規表現を介して検索されます。これに必要なショートコードやマークが異なる場合に必要です。スクリプトは、ここで<b>FB-TEST終了タグとコンテンツの前後にカスタムコンテンツをショートコードに追加します。マークアップ、CSSクラスを使用して可視性を作成することもできます。重要なのは、このコンテンツを投稿の保存時に削除し、のスクリプトで実行することPostProcessです。ここでスクリプトを実行し、関数を介してカスタムコンテンツを削除しますrestoreShortcodes

しかし、現在、これは単純であり、各要件に対して有効ではない可能性があります。おそらく、ショートコードをinitに保存し、この保存された変数で復元する必要があります。

スクリーンショット

結果を理解するには、例としてスクリーンショットを参照してください。

ここに画像の説明を入力してください

ソース

ソースで使用するには、次のディレクトリ構造が必要です。

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

まず、ソースをwp環境のプラグインとして含む小さなphpファイル。プラグインのメインディレクトリに残します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 ) {

次のソースは、という名前のJavaScriptファイルですfb_shortcode_replace.jsassets/js/このプラグインのプラグインディレクトリ内のディレクトリに残します。

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

役に立つ

追加のヒント

プラグインRaphのそれを表示し、結果を理解するために簡素化するために、HTMLでの変換のショートコード。たぶん、このコンテキストでも役立ちます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.