code

구텐베르크 블록에 WordPress REST API를 사용할 때 HTML 엔티티가 디코딩되지 않습니다.

starcafe 2023. 4. 3. 21:38
반응형

구텐베르크 블록에 WordPress REST API를 사용할 때 HTML 엔티티가 디코딩되지 않습니다.

WordPress REST API에 Posts를 얻기 위해 요청을 하는 커스텀 Gutenberg 블록을 만들고 있습니다.사용하고 있다axiosREST 엔드포인트에 요청을 발행합니다.

결과가 돌아오면 Post 객체의 배열이 있고 Post의 제목을 볼 수 있지만 모두 JSON 객체에 포함되어 있습니다.title.rendered및 HTML 엔티티를 포함합니다.

title: {
    rendered: "This has a hyphen – oh dear"
}`

를 입력하려고 합니다.<SelectControl>따라서 React를 사용할 방법이 없습니다.dangerouslySetInnerHTML엔티티 문제를 해결할 수 있는 방법.옵션을 입력할 때 이러한 엔티티를 제거하려면 어떻게 해야 합니까?

REST 응답의 옵션을 입력하기 위해 사용하는 코드는 다음과 같습니다.

const options = response.data.map((post) => {
    return {
        label: post.title.rendered,
        value: post.id,
    };
});

당장 확실한 것은 아니지만, 실제로 Blocks API에서 사용할 수 있는 방법이 있습니다.

블록 코드 맨 위에 다음과 같이 입력합니다.

const { decodeEntities } = wp.htmlEntities;

그 후 다음과 같이 사용할 수 있습니다.

const options = response.data.map((post) => {
    return {
        label: decodeEntities(post.title.rendered),
        value: post.id,
    };
});

바주자!HTML 엔티티가 사라졌습니다.

그리고 왜 필터를 사용하지 않는가?

$post_type = "post";
add_filter( "rest_prepare_{$post_type}", 'prefix_title_entity_decode' );
function prefix_title_entity_decode( $response ) {
    $data = $response->get_data();
    $data['title']['rendered'] = html_entity_decode( $data['title']['rendered'] );
    $response->set_data( $data );
    return $response;
}

언급URL : https://stackoverflow.com/questions/52229126/html-entities-are-not-being-decoded-when-using-wordpress-rest-api-for-gutenberg

반응형