programing

워드 프레스 쇼트 코드가 잘못된 위치에 있음

closeapi 2023. 10. 18. 22:06
반응형

워드 프레스 쇼트 코드가 잘못된 위치에 있음

워드프레스 플러그인을 만들고 있는데 쇼트코드를 이용해서 포스트 안에 꽤 큰 코드를 넣고 싶습니다.내 문제를 시뮬레이션하는 간단한 코드를 받았습니다.

function shortcode_fn( $attributes ) {
    wanted();
    return "unwanted";
}
add_shortcode( 'simplenote', 'shortcode_fn');

function wanted(){
    echo "wanted";
}

그리고 이 내용으로 글을 올립니다.

start
[simplenote]
end

결과는 다음과 같습니다.

wanted
start
unwanted
end

시작과 끝 사이에 '원하는' 텍스트를 넣었으면 합니다.가장 쉬운 해결책은 "wanted"를 wanted(원하는)로 돌려주는 것이라는 것을 알고 있지만, 이미 이 모든 기능을 가지고 있고 그 기능들은 꽤 큽니다.처음부터 다 쓰지 않고 쉬운 해결책이 있을까요?

@edit: 함수의 모든 에코를 인쇄하지 않고 문자열로 저장할 수 있는 방법이 있을까요?

쉽게 해결할 수 있는 방법은 출력 제어 기능을 사용하는 것입니다.

function shortcode_fn( $attributes ) {
    ob_start(); // start a buffer
    wanted(); // everything is echoed into a buffer
    $wanted = ob_get_clean(); // get the buffer contents and clean it
    return $wanted;
}

다음 링크를 따라오세요 http://codex.wordpress.org/Shortcode_API#Overview

_content가 표시되면 shortcode API는 "[myshortcode]"와 같은 등록된 shortcode를 파싱하고, 속성과 컨텐츠가 있는 경우 이를 분리하여 파싱하며, 해당 shortcode handler 함수를 전달합니다.단축 코드 처리기에서 반환된 문자열(메아리되지 않음)은 단축 코드 자체 대신에 게시물 본문에 삽입됩니다.

따라서 모든 쇼트코드 함수는 반환되어야 하며, "원하는" 함수를 다음과 같이 변경할 수 있습니다.

function wanted(){
    return "wanted";
}

Ruslan Bes의 답변을 이용하면, 코드는 다음과 같습니다.

function shortcode_fn( $attributes ) {
    ob_start(); // start a buffer
    wanted(); // everything is echoed into a buffer
    $wanted = ob_get_clean(); // get the buffer contents and clean it
    return $wanted;
}

add_shortcode( 'simplenote', 'shortcode_fn');

function wanted(){
    echo "wanted";
}

워드프레스의 표준 방식은 두 가지 기능을 제공하는 것입니다.하나.get_wanted()원하는 끈을 돌려줄 수도 있고, 다른 하나는wanted(), 다음과 같습니다.

function wanted() {
    echo get_wanted();
}

둘 중 하나를 할 수 있지만 대부분의 코드를 한 곳에서만 사용할 수 있습니다.이 패턴은 WordPress의 일반적인 패턴입니다. 예를 들어 vs.

@Ruslan이 언급한 것처럼 문자열을 만들기 위해 기존 함수를 다시 작성하지 않고 가장 일반적인 방법은 출력 제어를 사용하는 것입니다.

언급URL : https://stackoverflow.com/questions/23334359/wordpress-shortcodes-in-the-wrong-place

반응형