Krótki kod zawsze wyświetla się u góry strony


15

Używam krótkiego kodu, aby pobierać różne pętle za pośrednictwem loops-name.php. Z jakiegoś powodu zawsze znajduje się na górze strony. Poszukałem go i używanie echa zamiast powrotu powoduje ten problem, ale w moim kodzie nie używam echa. Oto krótki kod:

// 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'));
 }

Jakiś pomysł dlaczego tak się dzieje?


Krótki kod do dołączenia pliku? Uważam to za trochę dziwne.
Rutwick Gangurde,

1
„z moim kodem nie używam echa” - czy pliki loop-module.php odbijają się echem czy zwracają dane wyjściowe?
Michael

W tej chwili nie - plik ma po prostu tag akapitu z napisem „test”, dzięki czemu mogę zobaczyć, jak to działa.
John Joe 10'12

użyj get_template_part('loop',$module)zamiast tego, jest ładniejszy, szybszy w pisaniu, obsługuje motywy nadrzędne / podrzędne i jest to zalecana metoda dołączania szablonów do wordpress (tak locate_template może robić niektóre z tych rzeczy, ale spójrz, o ile mniej jest czytelny!)
Tom J Nowell

Odpowiedzi:


16

Możesz buforować dane wyjściowe w następujący sposób:

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

EDYTOWAĆ. Próbowałem tego, działało dobrze.

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
Nie używaj buforowania wyjściowego, jeśli istnieją inne sposoby.
fuxia

Obawiam się, że to nie zadziałało.
John Joe

co poszło nie tak? Próbowałem i zaktualizowałem odpowiedź
off

8

Twój dołączony plik zasadniczo przypomina echo HTML. Na przykład

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

Jest taki sam jak

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

Oba są drukowane natychmiast, a nie zwracane. Po wydrukowaniu pojawia się przed treścią strony. Musisz zwrócić coś, aby zostało uwzględnione w treści.

Jak zauważył @RutwickGangurde - dołączanie pliku szablonu do krótkiego kodu jest niezwykłe.


1
Dzięki, nie wiedziałem tego. Więc muszę umieścić całość w zmiennej i zwrócić ją? Jeśli chodzi o dołączanie pliku szablonu - cóż, chcę ułatwić użytkownikom motywu dostosowanie motywu, a posiadanie dużego pliku shortcode zagnieżdżonego w katalogu głównym motywu nie jest dla nich idealnym rozwiązaniem.
John Joe

Zobacz odpowiedź @ offroffa - to powinno zadziałać
Stephen Harris

1
cóż, chcę ułatwić użytkownikom motywu dostosowanie motywu ” - Ile warstw abstrakcji jest potrzebnych? W pliku shortcode znajduje się niestandardowy plik szablonu. Nie rozumiem, jak to ułatwia użytkownikom. Jeśli chcesz zapewnić możliwość dodawania zawartości statycznej do wszystkich postów, po prostu zdefiniuj dynamic_sidebar()wewnątrz Pętli i pozwól użytkownikom dodawać widżety.
Chip Bennett

Większość użytkowników motywu nie doceni konieczności przeglądania dużego pliku shortcode w celu zmiany prostej klasy css na interfejsie użytkownika. Jeśli wszystko zepsuję za pomocą standardowego systemu loop-name.php, to jest o wiele szybciej, aby znaleźć to, czego potrzebują. Nie idealnie, ale muszę ich uszczęśliwić;)
John Joe

Bardzo dobrze wyjaśnione;
Diego Somar
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.