scurtcoduri afișate înaintea conținutului

16 oct. 2012, 12:27:01
Vizualizări: 14.4K
Voturi: 10

Posibilă duplicare:
problemă cu scurtcodul

Scurtcodurile nu funcționează corect.

Pentru cei care încercați să reproduceți problema acasă, iată un ghid pas cu pas simplu.


1) Porniți o instalare nouă de WordPress (3.4.2).

2) Accesați twentyeleven/functions.php și adăugați următoarele:

function test() {
echo '-TEST-';
}
add_shortcode('testshortcode', 'test');

3) Editați postarea 'hello world' să conțină:

Bun venit în WordPress. Aceasta este prima ta postare. Editează-o sau șterge-o, apoi începe să bloghezi!
[testshortcode] 
foobar

4) Salvați și vizualizați, rezultatele mele arată astfel:

-TEST-
Bun venit în WordPress. Aceasta este prima ta postare. Editează-o sau șterge-o, apoi începe să bloghezi!
foobar

când ar trebui să arate așa:

Bun venit în WordPress. Aceasta este prima ta postare. Editează-o sau șterge-o, apoi începe să bloghezi!
-TEST-
foobar

Ce naiba se întâmplă aici?

1
Comentarii

În loc de "echo '-TEST-';" folosește "return '-TEST-';".

Softmixt Softmixt
6 apr. 2018 00:07:58
Toate răspunsurile la întrebare 1
5
17

Funcțiile de callback pentru shortcode trebuie să returneze, nu să afișeze. Deci folosește următoarea metodă:

function test() {
    return '-TEST-';
}
add_shortcode( 'testshortcode', 'test' );

Mai multe informații: http://codex.wordpress.org/Shortcode_API

Dacă trebuie să folosești echo, poți face și astfel (util dacă ai mult markup și e dificil să lucrezi cu stringuri)-

function test() {
    ob_start();
    echo '-TEST-';
    return ob_get_contents();
}
add_shortcode( 'testshortcode', 'test' );
16 oct. 2012 12:29:05
Comentarii

Este interesant, funcționează pe o instalare curată dar nu funcționează într-un plugin care face același lucru, folosea echo și a eșuat ca în exemplul meu, dar când l-am schimbat la return tot nu a funcționat. Iată plugin-ul http://wordpress.org/extend/plugins/wordpress-media-tags/

Neros Neros
16 oct. 2012 12:37:04

Am descărcat plugin-ul & l-am verificat, dacă înlocuiești echo cu return acolo, va returna conținutul către funcția apelantă, nu către WordPress.

Mridul Aggarwal Mridul Aggarwal
16 oct. 2012 12:50:06

Tocmai am realizat asta și eram pe punctul de a comenta, dacă pui un alt return pe funcția apelată de callback și înlocuiești echo, funcționează. Mersi.

Neros Neros
16 oct. 2012 12:51:32

Acest conținut a fost afișat de două ori pentru mine (o dată înaintea conținutului, a doua oară în locul dorit). Am rezolvat asta prin:

function test() { ob_start(); echo '-TEST-'; $ReturnString = ob_get_contents(); ob_end_clean(); return $ReturnString; }

Harkály Gergő Harkály Gergő
19 dec. 2016 02:33:34

Pentru cei care au conținutul afișat de două ori, în loc de ob_get_contents, folosiți ob_get_clean

DreamWave DreamWave
9 mar. 2020 15:16:51