programing

echo를 사용한 워드프레스 vs 쇼트코드 함수 반환

bestprogram 2023. 2. 26. 16:23

echo를 사용한 워드프레스 vs 쇼트코드 함수 반환

둘 다 눈에 띄었다echo그리고.return는 워드프레스에 쇼트코드 함수의 내용을 표시하는데 정상적으로 동작합니다.

function foobar_shortcode($atts) {
    echo "Foo Bar"; //this works fine
}

function foobar_shortcode($atts) {
    return "Foo Bar"; //so does this
}

이것들 중 하나를 사용하는 것에 차이가 있나요?그렇다면 워드프레스에 대해 권장되는 접근 방식은 무엇입니까?저는 평소에echo이 경우 - 괜찮습니까?

에코가 당신의 특정한 경우에 효과가 있을 수 있지만 당신은 절대 그것을 사용해서는 안 된다.쇼트 코드는 아무것도 출력하는 것이 아니라 콘텐츠만 반환해야 합니다.

다음은 코덱스의 쇼트 코드 메모입니다.

쇼트 코드로 호출된 함수는 어떤 종류의 출력도 생성해서는 안 된다는 점에 유의해 주세요.쇼트 코드 함수는 쇼트 코드를 대체하기 위해 사용되는 텍스트를 반환해야 합니다.출력을 직접 생성하면 예기치 않은 결과가 발생합니다.

http://codex.wordpress.org/Function_Reference/add_shortcode#Notes

출력 버퍼링

출력이 어려워지거나 회피하기 어려운 상황에 직면할 수 있습니다.예를 들어 쇼트 코드콜백 내에서 마크업을 생성하기 위해 함수를 호출해야 할 수 있습니다.이 함수가 값을 반환하지 않고 직접 출력하는 경우 출력 버퍼링이라고 하는 기술을 사용하여 값을 처리할 수 있습니다.

출력 버퍼링을 사용하면 코드에 의해 생성된 출력을 캡처하여 문자열에 복사할 수 있습니다.

버퍼를 기동하다ob_start()다 읽으시면 꼭 지우고ob_get_clean()두 함수 사이에 나타나는 모든 출력은 내부 버퍼에 기록됩니다.

예:

function foobar_shortcode( $atts ) {
    ob_start();

    // any output after ob_start() will be stored in an internal buffer...
    example_function_that_generates_output();

    // example from original question - use of echo
    echo 'Foo Bar';

    // we can even close / reopen our PHP tags to directly insert HTML.
    ?>
        <p>Hello World</p>
    <?php

    // return the buffer contents and delete
    return ob_get_clean();
}
add_shortcode( 'foobar', 'foobar_shortcode' );

https://www.php.net/manual/en/function.ob-start.php

대량의 컨텐츠를 출력하는 경우는, 다음을 사용할 필요가 있습니다.

add_shortcode('test', 'test_func');

function test_func( $args ) {
  ob_start();
  ?> 
  <!-- your contents/html/(maybe in separate file to include) code etc --> 
  <?php

  return ob_get_clean();
}

쇼트 코드로 「에코」를 사용하고 있는 경우, 쇼트 코드가 처리되는 장소에는 정보가 표시됩니다.이것은, 쇼트 코드를 실제로 추가한 장소는 아닙니다."return"을 사용하면 페이지 내에서 쇼트 코드를 추가한 위치에 정확히 정보가 반환됩니다.

예를 들어, 이미지가 있는 경우 쇼트 코드, 텍스트:
에코: 이미지 위에 출력됩니다.
Return: 이미지 뒤 및 텍스트 앞에 출력됩니다(숏 코드를 실제로 추가한 위치).

다음을 사용합니다.

function foobar_shortcode($atts) {
    return "Foo Bar"; //so does this
}

다음과 같은 작업을 수행하는 것이 더 쉽습니다.

$output = '<div class="container">' . do_shortcode('foobar') . '</div>';
echo $ouput;

나중에...

점은 '하다'는 것입니다.echo 종료할 가 없는 , 페이지에 합니다. return둘 다 함수를 종료하고 텍스트를 함수 호출로 되돌립니다.

에코의 경우:

function foobar_shortcode($atts) {
    echo "Foo"; // "Foo" is echoed to the page
    echo "Bar"; // "Bar" is echoed to the page
}
$var = foobar_shortcode() // $var has a value of NULL

반품:

function foobar_shortcode($atts) {
    return "Foo"; // "Foo" is returned, terminating the function
    echo "Bar"; // This line is never reached
}
$var = foobar_shortcode() // $var has a value of "Foo"

에코와 리턴이 같은 것은 아닙니다.첫 번째 기능에서 메아리가 완성되면 할 일이 없어질 뿐이지그래서 다시..

두 번째 fx에서는 함수를 명시적으로 종료하고 값을 호출 함수로 되돌립니다.

언급URL : https://stackoverflow.com/questions/21538180/wordpress-using-echo-vs-return-in-shortcode-function