페이지 상단에 항상 단축 코드 표시


15

loops-name.php를 통해 다른 루프를 가져 오기 위해 짧은 코드를 사용하고 있습니다. 어떤 이유로 든 항상 페이지 상단에 있습니다. 나는 그것을 구글 검색하고 return 대신 echo를 사용하면 문제가 발생하지만 내 코드에서는 echo를 사용하지 않습니다. 단축 코드는 다음과 같습니다.

// setup the shortcode for use
function friendly_loop_shortcode( $atts, $content = null ) {
extract( shortcode_atts( array(
'category' => '',
'module' => ''
), $atts ) );

include(locate_template('loop-'.$module.'.php'));
 }

왜 이런 일이 일어나는지 아십니까?


파일을 포함하기위한 단축 코드? 조금 이상하다고 생각합니다.
Rutwick Gangurde

1
'내 코드로 echo를 사용하지 않습니다' -loop-module.php 파일이 출력을 반환하거나 반환합니까?
Michael

지금은 아닙니다. 파일에는 "test"가 쓰여진 단락 태그가 있으므로 어떻게 작동하는지 확인할 수 있습니다.
john joe

get_template_part('loop',$module)대신 사용 하는 것이 더 예쁘고 타이핑이 빠르며 부모 / 자식 테마를 지원하며 워드 프레스에 템플릿을 포함하는 권장 방법입니다 (예 : locate_template가 이러한 작업 중 일부를 수행 할 수 있지만 읽을 수있는 정도는 줄어 듭니다!)
Tom J Nowell

답변:


16

다음과 같이 출력을 버퍼링 할 수 있습니다.

ob_start();
include(locate_template('loop-'.$module.'.php'));
return ob_get_clean();

편집하다. 나는 이것을 시도하고 잘 작동했다.

function friendly_loop_shortcode( $atts, $content = null ) {
     extract( shortcode_atts( array(
         'category' => '',
         'module' => ''
     ), $atts ) );

     ob_start();
     include(locate_template('loop-'.$module.'.php'));
     $output = ob_get_clean();
     //print $output; // debug
     return $output;
}

if (!is_admin()) {
     add_shortcode('test', 'friendly_loop_shortcode' );
}

4
다른 방법이있는 경우 출력 버퍼링을 사용하지 마십시오 .
fuxia

나는 그것이 작동하지 않는 것을 두려워합니다.
john joe

무엇이 잘못 되었나요? 나는 대답을 시도하고 업데이트했다
offroff

8

포함 된 파일은 본질적으로 HTML을 에코합니다. 예를 들어

<?php
 //Some PHP
 echo 'test';
 //Some more PHP
 ?>

와 같다

<?php
 //Some PHP 
 ?>
 test
<?php
 //Some more PHP
 ?>

둘 다 반환되지 않고 즉시 인쇄됩니다. 인쇄되었으므로 페이지 내용 앞에 나타납니다. 내용에 포함 시키 려면 무언가 를 반환 해야합니다 .

@RutwickGangurde가 지적했듯이 템플릿 파일을 짧은 코드에 포함시키는 것은 일반적이지 않습니다.


1
고마워, 난 몰랐어 그래서 모든 것을 변수에 넣고 반환해야합니까? 템플릿 파일을 포함하는 것에 관해서는-테마 사용자가 테마를 쉽게 사용자 정의하고 루트 테마 디렉토리에서 중첩 된 거대한 단축 코드 파일을 갖는 것이 실제로 이상적이지 않도록 가능한 한 만들고 싶습니다.
john joe

@offroff의 답변 참조-작동해야 함
Stephen Harris

1
" 테마 사용자가 테마를 쉽게 사용자 정의 할 수 있도록하려면 "추상화 계층이 몇 개나 필요합니까? 짧은 코드 안에 사용자 정의 템플릿 파일이 있습니다. 그것이 어떻게 사용자를 더 쉽게 만드는지 모르겠습니다. 모든 게시물에 정적 컨텐츠를 추가하는 기능을 제공 dynamic_sidebar()하려면 루프 내부를 정의하고 사용자가 위젯을 추가하도록하십시오.
Chip Bennett

대부분의 테마 사용자는 프론트 엔드에서 간단한 CSS 클래스를 변경하기 위해 방대한 단축 코드 파일을 탐색해야하는 것에 대해 감사하지 않습니다. 표준 loop-name.php 시스템을 사용하여 모든 것을 분리하면 필요한 것을 찾는 것이 훨씬 빠릅니다. 이상적이지는 않지만 나는 그들을 행복하게해야한다.)
john joe

잘 설명했다.
Diego Somar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.