programing

WordPress - 줄 바꿈 없이 텍스트 영역에서 여러 줄 텍스트를 삭제하는 방법

skycolor 2023. 4. 2. 10:09
반응형

WordPress - 줄 바꿈 없이 텍스트 영역에서 여러 줄 텍스트를 삭제하는 방법

이렇게 사용자가 입력한 메타 텍스트('메시지'라고 함)를 삭제하고 저장하면...

update_post_meta($post_id, 'message', sanitize_text_field($_POST['message']));

...이렇게 텍스트를 검색하여 다시 표시하려고 합니다...

echo '<textarea id="message" name="message">' . esc_textarea( get_post_meta( $post->ID, 'message', true ) ) . '</textarea>';

모든 줄 끊기기가 사라진다

WordPress 코덱스에 따라 줄 바꿈은 sanitize_text_field() 함수에 의해 삭제됩니다.그러면 사용자가 입력한 텍스트를 줄 바꿈 없이 삭제할 수 있는 방법은 무엇일까요?

Wordpress 4.7.0 이후

sanitize_text_field 대신 sanitize_textarea_field를 사용합니다.

보다 우아한 솔루션:

update_post_meta(
    $post_id,
    'message',
    implode( "\n", array_map( 'sanitize_textarea_field', explode( "\n", $_POST['message'] ) ) )
);

사용하다sanitize_text_field텍스트 필드를 삭제할 경우 선택합니다.

줄 바꿈이 유일한 것이라면sanitize_text_field당신이 갖고 싶은 것을 지우는 것입니다.str_replace위해서"\n"전화하기 전과 후에sanitize_text_field.

$fake_newline = '--OMGKEEPTHISNEWLINE--'; # or some unique string
$escaped_newlines = str_replace("\n", $fake_newline, $_POST['message']);
$sanitized = sanitize_text_field($escaped_newlines);
update_post_meta($post_id, 'message', str_replace($fake_newline", "\n", $sanitized));

더 많은 삭제를 커스터마이즈하고 싶다면 보다 세밀한 처리에 의존해야 합니다.sanitize_*WordPress에서 제공하는 기능입니다.

이 메서드를 사용해 본 결과, 텍스트 영역의 아포스트로피는 들어오는 길에 백슬래시에 의해 이스케이프되고, 나가는 길에 esc_textarea에 의해 삭제되지 않습니다.

그래서 결국엔 내가 이 모든 것들을

stripslashes( esc_textarea( $THING ) ) 

다시 표시할 때 텍스트 영역에서 해당 항목을 성공적으로 제거합니다.

모든 것을 시도해봤지만, 내가 이 일을 할 수 있었던 유일한 방법은 다음과 같았다.

기능.php

wp_customize->add_section('section_id', array(
    'title' => __('custom_section', 'theme_name'),
    'priority' => 10,
    'description' => 'Custom section description',
));

$wp_customize->add_setting('custom_field', array(
    'capability' => 'edit_theme_options',
    'sanitize_callback' => 'sanitize_textarea_field',
));

$wp_customize->add_control('custom_field', array(
    'type' => 'textarea',
    'section' => 'custom_section',
    'label' => __('Custom text area with multiline brakes'),
));

전면에 표시(예: footer.php)

<?php $custom_field= get_theme_mod('custom_field');
    if ($custom_field) {
        echo nl2br( esc_html( $custom_field) );
} ?>

사용해야 합니다.'sanitize_callback' => 'sanitize_textarea_field'그리고.nl2br( esc_html())일하기 위해.

언급URL : https://stackoverflow.com/questions/20444042/wordpress-how-to-sanitize-multi-line-text-from-a-textarea-without-losing-line

반응형