편집기 내에서 단축 코드 텍스트의 모양 변경


11

편집기에서 단축 코드의 모양을 변경하거나 주변 텍스트와 구별 할 수있는 방법이 있습니까?

예를 들어 게시물의 내용이 다음과 같다면 ...

Lorem Ipsum에 대한 참조 사이트, 원점 및 임의의 Lipsum 생성기 관련 정보 제공 Lorem Ipsum에 대한 참조 사이트, 원점 및 임의의 Lipsum 생성기 관련 정보 제공. [shortcode] asfdasfd [/ shortcode] 참조 사이트 Lorem Ipsum 관련 정보, 무작위 Lipsum 생성기 및 출처에 대한 정보 제공 Lorem Ipsum 관련 정보 사이트, 임의의 Lipsum 생성기 및 Lolip Ipsum 관련 정보, 출처에 대한 정보 제공 임의의 Lipsum 생성기뿐만 아니라

... 내부 단축 코드가 굵게 표시되면 다음과 같이 쉽게 볼 수 있습니다.

여기에 이미지 설명을 입력하십시오


그것은 분명히 편리하고 확실하게 일부 regex / js로 가능합니다. 다음은 비슷한 질문 과 플러그인으로 단축 코드에 대한 미리보기를 추가 할 수 있습니다. 단, 제안 <code>이나 <pre>태그 를 강조 표시하는 것은 간단 합니다.
Bryan Willis

1
나는 이것이 당신에게 지금 도움이되지 않는다는 것을 알고 있지만 곧 핵심에 통합하기 위해 Shortcake 를 계속
지켜봐야


/ OFF 주제, @brianjohnhanna 플러그인을 보았지만 코드의 미리보기 (프론트 엔드에서 어떻게 보일지)입니다. 내가 질문을 이해하면 잘 OP의 질문은 강조되어 shortcode tagcontent내부 그것을 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 파일은 비주얼 에디터에서 자바 스크립트를 플러그인으로로드합니다. 플러그인은 관리자 페이지, 문자열 만 페이지에로드 post.php- 참조 if ( 'post.php' === $page ) {.

다음 소스는이라는 자바 스크립트 파일 fb_shortcode_replace.js입니다. assets/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.