Extra TinyMCE 편집기는 <p>와 <br> 태그를 제거합니까?


22

안녕하세요, 사용자 정의 메타 상자에 표시되는 일부 텍스트 영역에 TinyMCE를 추가했습니다. 편집기가 저장 <p>하거나 <br/>태그 하지 않는 것을 제외하고는 모든 형식이 완벽하게 작동 합니다. 줄 바꿈을 유지하지 않습니다.

TinyMCE는 다음과 같이 설정됩니다 :

wp_tiny_mce(true, array('editor_selector' => $field['class'] ) );

'<textarea name="', $field['id'], '" class="', $field['class'], '" id="', $field['id'], '" cols="60" rows="8" style="width:97%">', $meta ? esc_html($meta) : $field['std'], '</textarea>';

그리고 모든 것이 완벽하게 작동합니다. <P><BR>태그를 제외한 모든 서식 버튼이 제대로 작동 합니다.

포스트 메타가 저장되기 전이나 후에 에디터가 그것들을 제거하고 있는지 확실하지 않습니다.

아이디어?


한 가지 방식으로 작동하게했습니다. 코어의 기능을 복제하고 변경함으로써 'remove_linebreaks' => true에게 'remove_linebreaks' => false. 그러나 'remove_linebreaks' => false함수에 전달 된 설정 배열을 지정하면 작동하지 않습니다.
Pippin

@Arthur Carabott 네, 저도 트릭을했습니다. 문서에 대한 링크를 추가해 봅시다 : codex.wordpress.org/Function_Reference/wpautop Bye!
Luca Reghellin

우리는 매우 이상한 것을보고 있습니다. 직접 입력 / 복사하여 붙여 넣은 게시물은 편집시 구분이 유지됩니다. 우리가 가져온 게시물은 편집시 줄 바꿈을 날려 버리는 편집기가 적용됩니다.
JCL1178

답변:


16

나는 최근 에이 일을했다. metaname메타 상자 이름을 검색하여 바꿔야 합니다.

형식을 유지하기위한 핵심 wpautop();은 데이터를 저장할 때 사용하는 것이 었습니다 .

add_action( 'add_meta_boxes', 'add_metaname_box');

add_action( 'save_post', 'metaname_save');

function add_metaname_box() {
    add_meta_box(
        'metaname_id',
        __( 'metaname text', 'metaname_textdomain'),
        'metaname_custom_box',
        'page'
    );
}

function metaname_custom_box() {
    global $post;
    wp_nonce_field( plugin_basename( __FILE__ ), 'metaname_noncename' );
    $data = get_post_meta($post->ID, 'metaname_custom_box', true);
    echo <<<EOT
    <script type="text/javascript">
jQuery(document).ready(function() {
    jQuery("#metaname_custom_box").addClass("mceEditor");
    if ( typeof( tinyMCE ) == "object" &&
         typeof( tinyMCE.execCommand ) == "function" ) {
        tinyMCE.execCommand("mceAddControl", false, "metaname_custom_box");
    }
});
</script>
    <textarea id="metaname_custom_box" name="metaname_custom_box">$data</textarea>
EOT;
}

function metaname_save($post_id) {
    global $post;

    // Verify
     if ( !wp_verify_nonce( $_POST['metaname_noncename'], plugin_basename(__FILE__) )) {
         return $post_id;
     }
     if ( 'page' == $_POST['post_type'] ) {
         if ( !current_user_can( 'edit_page', $post_id ))
             return $post_id;
     } else {
         if ( !current_user_can( 'edit_post', $post_id ))
             return $post_id;
     }

     $key = 'metaname_custom_box';
    $data = wpautop($_POST[$key]);

     // New, Update, and Delete
     if(get_post_meta($post_id, $key) == "") 
         add_post_meta($post_id, $key, $data, true);
     elseif($data != get_post_meta($post_id, $key, true))
         update_post_meta($post_id, $key, $data); 
     elseif($data == "")
         delete_post_meta($post_id, $key, get_post_meta($post_id, $key, true));        
}

update_post_meta삽입 할 항목이없는 add_post_meta경우 에도 meta_key
vmassuchetto

5

TinyMCE를 사용자 정의하는 데 사용하는 내용은 다음과 같습니다.

// http://tinymce.moxiecode.com/wiki.php/Configuration
function cbnet_tinymce_config( $init ) {

    // Don't remove line breaks
    $init['remove_linebreaks'] = false; 

    // Pass $init back to WordPress
    return $init;
}
add_filter('tiny_mce_before_init', 'cbnet_tinymce_config');

나는 이것이 당신이 이미 시도한 것이라고 생각합니까?

편집하다:

다음과 같은 다른 구성 변경 사항을 포함해야 할 수도 있습니다.

// Convert newline characters to BR tags
$init['convert_newlines_to_brs'] = true; 
// Do not remove redundant BR tags
$init['remove_redundant_brs'] = false;

TinyMCE 구성 매개 변수를 가지고 놀고 변경해야 할 것을 찾으십시오.


아니, 나는 그것을 사용하지 않았다. 함수로 wp_tiny_mce를 어떻게 필터링합니까?
Pippin

에 코드를 삭제하십시오 functions.php.
Chip Bennett

흠, 작동하지 않습니다.
Pippin

내 편집을 참조하십시오. 올바른 구성 매개 변수를 타겟팅하지 않았을 수 있습니다.
Chip Bennett

1
이미에 연결되어 있어야합니다 tiny_mce_before_init. 다른 기능이나 객체 등에 포함되어 있지 않습니까?
Chip Bennett

5

이것은 이후 버전의 Wordpress에서 약간 변경된 것으로 보입니다. 이제이 기능을 비활성화 할 수 있습니다 :

add_filter('tiny_mce_before_init', function($init) {
    $init['wpautop'] = false;
    return $init;
}

3

아마도 이것에 대한 더 간단한 해결 방법을 찾았습니다.

실제 템플릿에서 다음을 변경하십시오.

<?php echo get_the_content());?>

이에:

<?php echo wpautop(get_the_content());?>

이 방법으로 wpautop () 템플릿별로 TinyMCE에 의해 제거 된 태그를 템플릿에 추가합니다.


2

왜 wordpress new 함수 wp_editor를 사용하여 tinymce를 렌더링하지 않겠습니까? 그렇게하면 모든 것이 처리됩니다. 그리고 사용자에게 컨텐츠를 보여줄 때 필터를 적용하십시오 the_content.

이처럼 :

$meta = "content of the metabox";
echo apply_filters('the_content', $meta);

필터 the_content는 링크 브레이크를 자동으로 <br>및 로 변환합니다 <p>.


이 질문이 게시 될 당시 wp_editor () 함수를 사용할 수 없었습니다.
Pippin

1

또 다른 간단한 해결책 : 단축 코드 사용!

이 코드를 functions.php에 넣고 br 태그를 표시 할 위치마다 컨텐츠 편집기 (HTML 또는 visual)에서 [br]을 사용하십시오.

add_shortcode("br", "br_tag");

function br_tag(){
    return("<br/>");                            

}

1

이것은 워드 프레스에 메타 박스를 사용하는 사람을위한 것입니다 : 플러그인 이름 : 메타 박스 플러그인 URI : deluxeblogtips com / meta-box

정적 함수에서 /vendor/meta-box/inc/fields/wysiwyg.php를 수정했습니다.

static function html( $html, $meta, $field )

//just after the else i have added :
$meta = html_entity_decode($meta); // 
//and solve the problem ;)

하지만 더 나은 솔루션은-

이것을 functions.php에 넣고 metaboxes 플러그인에서 필터를 호출합니다.

function meta_wysiwyg_antes_save($meta)
{   
    $meta = html_entity_decode($meta);
    return $meta;
}
add_filter("rwmb_(ID-OF-METABOX-FIELD)_meta", "meta_wysiwyg_antes_save"); //en meta-box.php 194

이제 더 이상 플러그인을 업데이트 할 수 없습니다. 좋은 해결책이 아닙니다.
fuxia

좀 더 건설적인 의견이 있습니까? :) functions.php에서이 코드를 어디에 넣을 수 있습니까?
claudio

save_post플러그인보다 먼저 연결 하여 별도의 기능으로 값을 준비 하시겠습니까?
fuxia
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.