Zmień wygląd tekstu shortcode w edytorze

11

Czy można zmienić wygląd skrótów w edytorze lub w jakikolwiek inny sposób odróżnić go od otaczającego tekstu?

Na przykład, jeśli treść postu jest taka ...

Strona referencyjna o Lorem Ipsum, podająca informacje o jego pochodzeniu, a także losowy generator Lipsum. Strona referencyjna o Lorem Ipsum, podająca informacje o jego pochodzeniu, a także losowy generator Lipsum. [Shortcode] asfdasfd [/ shortcode] o Lorem Ipsum, podając informacje o jego pochodzeniu, a także losowy generator Lipsum. Strona referencyjna o Lorem Ipsum, podająca informacje o jego pochodzeniu, a także losowy generator Lipsum. Strona referencyjna o Lorem Ipsum, podająca informacje o jego pochodzeniu, a także losowy generator Lipsum.

... byłoby miło, gdyby skrót wewnątrz był pogrubiony, dzięki czemu można go łatwo zobaczyć w następujący sposób:

wprowadź opis zdjęcia tutaj

Ivan Topić
źródło
To byłoby zdecydowanie wygodne i na pewno jest możliwe w przypadku niektórych wyrażeń regularnych / js. Oto podobne pytanie i wtyczka, która pozwala dodawać podglądy skrótów, chociaż podświetla wszystko tak, jak zasugerowałeś, tak jakbyś to zrobił <code>lub <pre>tagi byłyby z pewnością prostsze.
Bryan Willis
1
Wiem, że nie jest to dla ciebie teraz pomocne, ale
miej
/ OFF temat ode mnie, @brianjohnhanna Widziałem tę wtyczkę, ale jest to rodzaj podglądu (więc jak będzie wyglądać na interfejsie) kodu. Jeśli dobrze rozumiem pytanie, pytanie OP podkreśla shortcode tagi contentwewnątrz tego shortcodew edytorze.
Charles

Odpowiedzi:

12

Możesz dodać niestandardową wtyczkę do WordPress, a także edytora wizualnego TinyMCE. Poniższe źródło jest przykładem, że proste działa i dodaje ciąg przed i po krótkim kodzie.

Stosowanie

Krótki kod znajdzie się poprzez regex, odpowiedni, jeśli potrzebujesz go dla różnych skrótów i różnych znaków na tym. Skrypt dodaje niestandardową treść do krótkiego kodu, tutaj <b>FB-TESTprzed i po tagu zamykającym i treści. Możesz także użyć znaczników, klas css, aby utworzyć widoczność. Ważne jest to, że usuwasz tę treść podczas zapisywania postu, uruchomionego w skrypcie na PostProcess. Tutaj uruchom skrypt i usuń niestandardową zawartość za pomocą funkcji restoreShortcodes.

Ale obecnie jest to proste, może nie ważne dla każdego wymagania. Być może powinieneś zapisać krótki kod przy init i przywrócić z tą przechowywaną zmienną.

Zrzut ekranu

Zobacz zrzut ekranu jako przykład, aby zrozumieć wynik.

wprowadź opis zdjęcia tutaj

Źródło

Źródło potrzebuje tej struktury katalogów, aby z niego skorzystać:

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

Najpierw mały plik php, który zawiera źródło jako wtyczkę w środowisku wp. Pozostaw go w głównym katalogu wtyczki 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;
}

Ten plik php ładuje javascript jako wtyczkę w edytorze wizualnym. Wtyczka ładuje się tylko na stronach administracyjnych, tylko na stronach z ciągiem post.php- patrz if ( 'post.php' === $page ) {.

Następujące źródło to plik javascript o nazwie fb_shortcode_replace.js. Pozostaw go w katalogu assets/js/, w katalogu wtyczek tej wtyczki.

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

Pomocny

Dodatkowa wskazówka

Wtyczka Raph konwertuje skróty w HTML, aby je wyświetlić i uprościć zrozumienie wyniku. Być może jest to również pomocne w tym kontekście.

bueltge
źródło