2013-11-13 5 views
0

Я начал работать над созданием шорткода WordPress и возникают трудности с пониманием, как для вывода конкретно с помощью «Return», код у меня естьEcho против Return для отображения кода

if (!function_exists('kfl')) { 
    function kfl($atts, $content = null) { 
     extract(shortcode_atts(array(
      'title'  => 'Title goes here', 
     ), $atts)); 

     return "<div class=\"container panel\">"; 
     return "<h3 class=\"kfl title\">".$title."</h3>"; 
     return "</div>"; 
    } 
    add_shortcode('kfl', 'kfl'); 
} 

?> 

Когда я использовать это ничего не отображается, если я удаляю вторую строку возврата и добавляю заголовок. $ в первую строку, я получаю панель контейнера и незанятый заголовок. Если я заменил Returns на Echo, все работает нормально, но я предполагаю, что должна быть причина, по которой используется «return» (в большинстве случаев).

Любые советы или рекомендации будут наиболее ценными.

Благодаря

+0

Никаких строк кода не выполняется после 'return'. –

ответ

1

Обычно функция, которая зарегистрирована как шорткод, имеет переменный, в которой вы постепенно вставить код и затем верните его. В вашем случае:

if (!function_exists('kfl')) { 
    function kfl($atts, $content = null) { 
     extract(shortcode_atts(array(
      'title'  => 'Title goes here', 
     ), $atts)); 

     $output = "<div class=\"container panel\">"; 

     $output .= "<h3 class=\"kfl title\">".$title."</h3>"; 

     $output .= "</div>"; 

     return $output; 
    } 
    add_shortcode('kfl', 'kfl'); 
} 
0

После выполнения хитов возвращения, он оставляет функцию. Таким образом, три возврата в строке означают, что второй и третий никогда не выполняются. Вы можете сделать что-то вроде этого, используя оператор конкатенации для соединения трех частей в одну строку:

function foo() { 
    // blah blah blah 
    return 
     '...' . 
     '...' . 
     '...'; 
} 
+0

Могу ли я просто использовать эхо для всех трех линий? – Naz

+0

Зависит от того, как вызывается функция. Возврат значения не выводит его нигде. I.e., если ваша функция возвращает строку, и вы выполняете 'echo foo()', тогда она будет эхо-значение, возвращаемое функцией foo(). С другой стороны, если вы используете эхо в функции, вам не нужно вызывать эхо при вызове функции, вам нужно только вызвать ее через 'foo()'. –

+0

в функции обратного вызова короткого кода вам нужно вернуть вывод – diggy

0

Вы можете объединить элементы с . и возвращает результат в конце:

$html = ''; 
$html .= '<div class="container panel">'; 
$html .= '<h3 class="kfl title">' . $title . '</h3>'; 
$html .= '</div>'; 
return $html; 
1

проблема в вашем коде приходит здесь:

return "<div class=\"container panel\">"; 
    return "<h3 class=\"kfl title\">".$title."</h3>"; 
    return "</div>"; 

, когда 1-й return обрабатывается, контроллер выйдет из функции, так что 2-й и 3-й returns не будут выполнены.

, если вам нужно вернуть все из них, а затем объединить их все в одной переменной и вернуть его в конце концов, как это:

$return = "<div class=\"container panel\"><h3 class=\"kfl title\">".$title."</h3></div>"; 
return $return ; 

еще, если вы просто хотите, чтобы отобразить все из них затем использовать :

echo "<div class=\"container panel\">"; 
    echo "<h3 class=\"kfl title\">".$title."</h3>"; 
    echo "</div>"; 
Смежные вопросы