apply_filters ( 'the_content', $ content) vs do_shortcode ($ content)


21

테마 옵션 또는 사용자 정의 postmeta 텍스트 영역이 있다고 가정 해 봅시다. 이제 여러 단축 코드, 일반 텍스트, 이미지 등을 실행하고 싶습니다.

모범 사례는 무엇이며 왜 그런가요?

옵션 1:

$content = //my text area data;
echo apply_filters('the_content', $content);

옵션 2 :

$content = //my text area data;
echo do_shortcode($content);

어느 것이 가장 좋은 방법이며 왜 그런지 설명해주십시오.

편집하다

시나리오를 자세히 설명하겠습니다. 고객의 요구 사항에 맞는 테마를 개발합니다. 때로는 게시물 / 페이지 / 사용자 정의 게시물 유형에 게시물 메타를 추가해야 짧은 코드 (슬라이더, 연락처 양식 등) 또는 간단한 텍스트를 추가 할 수 있습니다. 제출 된 텍스트입니다.

단축 코드가 작동하게하려면 옵션 1을 사용 합니다. 이제 누군가에게 이것이 잘못된 방법이라는 소식을 들었습니다 do_shortcode. 그러나 그들은 왜 그것이 잘못되었는지에 대한 설명을주지 않았습니다. 내가 묻는 이유입니다.

이 전체 프로세스는 wp의 기본 텍스트 편집기에서 수행 할 수 있습니다. 그러나 템플릿 별 사용을 위해 해당 옵션을 만들어야합니다. 이것이 고객이 원하는 것입니다.

답변:


16

질문과 답변이 재검토되었습니다

때때로 당신을 잔소리하고 나중에 다시 사냥하는 이러한 질문이 있으며, 이것은 그러한 질문 중 하나입니다.

이 질문은 문제의 대안 솔루션에 대해 생각하게했습니다. 이미 언급했듯이 사용자 정의 필드와 메타 박스는 작은 메타 데이터 조각을 저장하기 위해 있으며 짧은 코드와 기능을 실행할 수있는 콘텐츠를 게시하는 확장 기능으로 작동하지 않습니다. 또한 이미 언급했듯이 귀하의 방법이 잘못되어 사용해서는 안됩니다

내가 게시물에서 흥미로운 것을 발견 한 것은 사용자 정의 필드와 메타 상자를 사용하여 사용자 입력에서 사용자 정의 컨텐츠를 실수로 표시한다는 것입니다. 그래서 나는 앉아서이 작업을 수행하고 사용자 정의 필드 데이터와 메타 박스 데이터를 올바르게 사용할 수있는 가능한 방법을 생각했습니다.

이것이 나의 생각이다 :

시나리오 :

참고 : 이것은 필요에 맞게 수정할 수 있습니다

단일 게시물에서 사용자는 필요에 따라 게시물 뒤에 사용자 정의 컨텐츠를 동적으로 표시하기를 원하거나 요구합니다. 동적이어야합니다. 콘텐츠는 사용자 지정 쿼리 여야하며 사용자는 원할 때마다 표시 할 내용과 원하는 것을 선택해야합니다.

가능한 해결책 :

단축 코드는 사용자 정의 필드에서 실행할 수 없으므로 여기서는 단축 코드가 작동하지 않습니다. do_shortcode동적이 아니며 하드 코딩되어 있기 때문에 원하지 않는 것도 작동하지 않습니다. 귀하의 질문 에서처럼, 우리는 사용자 정의 필드를 사용할 것입니다. 다시 강조하지만 사용자 정의 필드를 사용하여 사용자 정의 쿼리 또는 단축 코드를 실행하지 마십시오

계획:

사용자 정의 필드를 사용하여 쿼리 인수 저장 하면 됩니다 . 우리가하는 일은이라는 사용자 정의 필드를 만드는 것 custom_query_arguments입니다. 글쓰기 에디터 화면에서 사용자 정의 필드를 볼 수 있습니다.

다음 단계는 사용자 정의 쿼리 인수를 필드에 추가하는 것입니다. 제목 1을 기준으로 카테고리 1의 게시물 3 개를 표시해야합니다. 따라서 쿼리 인수는 다음과 같아야합니다. ( 문자열 형식 )

'posts_per_page=3&cat=1&orderby=title'

이것이 이제 사용자 정의 필드에 입력해야합니다. 입력 한 후 사용자 정의 필드의 값을 저장하십시오

다음은 single.php에 커스텀 쿼리를 구성하는 것입니다. 여기서 필요한 것은 실제로 쿼리 인수 인 사용자 정의 필드에서 값 WP_Query을 가져 와서 새 검색 인스턴스에 피드 를 가져와야합니다. 또한 해당 사용자 정의 필드에 실제로 저장된 값이 있는지 확인해야합니다. 사용자 정의 필드가 비어 있으면 아무것도 표시하지 않습니다

코드:

single post 직후에 single.php에서 이와 같은 것을 시도 할 수 있습니다.

$args = get_post_meta( get_queried_object_id(), 'custom_query_arguments', true );
// check if the custom field has a value
if( ! empty( $args ) ) {

    $q = new WP_Query( $args );

    if( $q->have_posts() ) {
        while( $q->have_posts() ) {
            $q->the_post();

            the_title();

        }
        wp_reset_postdata();
    }

} 

사용자가 사용자 정의 쿼리를 제거하려면 사용자 정의 필드의 값을 삭제하고 사용자 정의 필드를 비워두면됩니다. 동일한 검색어를 표시해야하지만 카테고리 10과 총 5 개의 게시물을 표시해야하는 경우 원래 값을 다음으로 대체 할 수 있습니다.

'posts_per_page=5&cat=10&orderby=title'

몇 가지 참고 사항 :

이 사용자 정의 필드 및 메타 상자에 정보를 입력 할 때 올바른 구문 및 형식을 사용해야합니다. 구문 오류 또는 잘못된 정보는 원하지 않는 출력 또는 치명적인 오류로 이어집니다. 고객에게 그러한 정보를 알리는 것이 중요합니다

원래 답변

나는 당신이 성취하려고하는 것을 이해하지 못하지만, 내가 말할 수있는 것에서 그것들은 두 가지 별개의 것입니다

옵션 1

apply_filters('the_content', $content);는 필터링되지 않은 원시 게시물 콘텐츠에 콘텐츠 필터를 적용하는 데 사용되며 일반적으로의 사용에서 비롯됩니다 $post->post_content. 이 필터에는 wp_autopp 태그를 추가 하는 유명한 필터 가 포함 됩니다.the_content()

apply_filters('the_content', $content);템플릿 태그 를 사용 가능 하게 만드는 사용하지 않고 객체 get_posts와 직접 작동 하는 위치와 함께 사용됩니다.WP_Postsetup_postdata( $post )the_content()

옵션 2

do_shortcode 페이지 편집기 화면 백엔드에서 텍스트 편집기 외부의 템플리트 파일에 단축 코드를 추가하는 데 사용되며 기본적으로 후크를 통해 단축 코드를 필터링합니다.

올바른 사용법은 다음과 같습니다

예 : 템플릿 파일에 갤러리 단축 코드 추가

echo do_shortcode( '[gallery]' )

편집 1

귀하의 의견에서, 나는 짧은 코드를 전혀 사용하지 않을 것입니다.

텍스트 편집기를 통해 짧은 코드를 추가하지 않고 do_shortcode템플릿 파일을 통해 직접 추가 (하드 코드) 하려는 경우 템플릿에 함수를 추가하기 만하면됩니다.

예:

다음 단축 코드 기능이있는 경우

function footag_func( $atts ) {
    return "foo = {$atts['foo']}";
}
add_shortcode( 'footag', 'footag_func' );

다음과 같은 템플릿에서 직접 함수를 호출 할 수 있습니다.

echo footag_func();

단축 코드를 구문 분석 할 필요가 없으므로이 방법이 훨씬 빠릅니다.

편집 2

솔직히 말해서 편집에서 완전히 잘못하고 있습니다. 그렇기 때문에 첫 질문을 이해할 수 없었습니다

때로는 게시물 / 페이지 / 사용자 정의 게시물 유형에 게시물 메타를 추가해야 짧은 코드 (슬라이더, 연락처 양식 등) 또는 간단한 텍스트를 추가 할 수 있습니다. 제출 된 텍스트입니다.

단축 코드가 작동하게하려면 옵션 1 .....을 사용하십시오.

사용자 정의 필드 는 텍스트 필드아니며 단축 코드를 실행하는 데 사용되거나 슬라이더 또는 연락처 양식에 사용되는 것은 아닙니다. 게시물과 페이지에서 텍스트 편집기를 바꾸는 데 사용자 정의 필드를 사용해서는 안됩니다.

앞에서 언급했듯이 apply_filters('the_content', $content);원시 게시물 내용에 서식을 적용하는 데 사용됩니다.

여기에 두 가지 선택이 있습니다

  • do_shortcode짧은 코드를 파싱 할 필요가 없으므로 함수를 사용하는 것이 더 빠르기 때문에 권장하지 않는 템플릿 파일에서 직접 사용하십시오.

  • 특정 페이지 / 포스트에 대해 텍스트 편집기에서 바로 코드를 사용하십시오.

나는 당신이 당신의 구조와 당신이 달성하고자하는 것을 새롭게 새롭게 볼 것을 진지하게 권합니다. 사용자 정의 필드 텍스트 편집기 가 아니며 단축 코드 나 슬라이더를 실행할 수 없습니다.

내 권장 사항은 사용자 정의 위젯 또는 사용자 정의 필드와 함께 사용할 수있는 시스템을 살펴 보는 것입니다.


1
설명해 주셔서 감사합니다. 나는 이미 그것을 알고있다. 그러나 목표가 포스트 메타 / 테마 옵션 텍스트 영역에서 짧은 코드 만 출력하는 경우 어떤 옵션이 더 정확한지 묻습니다. 필터링 된 내용을 얻기 위해 option1을 사용하고 있으며 습관이되었습니다. 옵션 1을 사용하여 텍스트 파일에서 짧은 코드를 인쇄하기 만합니다. 그래서 물었다.
тнє Sufi

나는 편집을 보았다. 나는 당신의 요점을 얻었다. 그러나 내 시나리오는 다릅니다. 텍스트 파일 / 영역과 여러 단축 코드가있는 것과 같습니다. 이제 사용자는 해당 영역에 단축 코드를 넣을 수 있습니다. 그래서 직접 함수를 사용할 수 없습니다. 나는 그 부분을 역동적으로 유지해야한다.
тнє Sufi

이 텍스트 필드는 어디에 있습니까? 백엔드 페이지 편집기 화면과 동일합니다
Pieter Goosen

포스트 메타 일 수 있습니다. 또는 테마 옵션이 될 수 있습니다. 나는 두 가지에 the_content 필터를 사용합니다.
тнє Sufi

죄송하지만이 중 어느 것도 의미가 없습니다. 사용자 정의 필드에 단축 코드를 사용하려는 이유는 무엇입니까? 그렇다면 왜 단축 코드를 사용하겠습니까?
피터 구센
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.