2016-02-11 3 views
0

NEWBIE ЗДЕСЬ.php foreach loop echo, print, return dillema

Я пишу этот плагин wordpress, так что я могу использовать get_posts() в качестве короткого кода.

function getposts_func($atts) { 
    $atts = shortcode_atts(array('category' => '',), $atts, 'get_posts'); 
    $cat=$atts['category']; 
    global $post; 
    $args = array(
       'category'  => $cat, 
       'numberposts' => -1, 
       'order'   => 'ASC', 
       ); 
    $myposts = get_posts($args); 
    foreach($myposts as $post) : setup_postdata($post); 
     $post_permalink = get_permalink(); 
     $post_title = get_the_title(); 
     echo '<li><a href="' . $post_permalink . '">' . $post_title . '</a></li>'; 
    endforeach; 
    wp_reset_postdata();} add_shortcode('get_posts', 'getposts_func'); 

ПРОБЛЕМА: он выводит ДО фактического содержания. Я где-то читал, что это из-за ECHO, и что мне нужно использовать RETURN. Однако, если я использую return, он прерывает цикл и выводится только одно сообщение. Я также пытался использовать PRINT, но это просто в основном то же самое с ECHO.

Моя теория заключается в том, что мне нужно ВОЗВРАТИТЬ значения как МАССИВ. Но я точно не знаю, как это сделать. Я пытался использовать буфер $ output [], но терпеть неудачу.

Любые помощь ребята?

+0

Как я уже сказал, я не разработчик WP. Кажется мне, что вы возвращаете, зависит от понимания того, что ожидает «add_shortcode» [см. Руководство] (https://codex.wordpress.org/Function_Reference/add_shortcode) – RiggsFolly

+0

@RiggsFolly Ваш первый комментарий, похоже, сработал. извините, я подумал, что это не так (я просто забыл обновить). лол. Дурак я. –

+0

Ой, я отменил свой ответ, так что вы можете увидеть его снова. – RiggsFolly

ответ

1

Если возвращение на самом деле так, как вы должны закодировать это, то просто сохранить все строки в переменной должны быть возвращены в конце процесса

function getposts_func($atts) { 

    $htm = ''; 

    $atts = shortcode_atts(array('category' => '',), $atts, 'get_posts'); 
    $cat=$atts['category']; 
    global $post; 
    $args = array(
       'category'  => $cat, 
       'numberposts' => -1, 
       'order'   => 'ASC', 
       ); 
    $myposts = get_posts($args); 
    foreach($myposts as $post) : 
     setup_postdata($post); 
     $post_permalink = get_permalink(); 
     $post_title = get_the_title(); 

     $htm .= '<li><a href="' . $post_permalink . '">' . $post_title . '</a></li>'; 

    endforeach; 
    wp_reset_postdata(); 

    return $htm; 
} 

add_shortcode('get_posts', 'getposts_func'); 

Если на самом деле вы хотите, чтобы это было массив, который возвращается (я не эксперт WP)

function getposts_func($atts) { 

    $htm = array(); 

    $atts = shortcode_atts(array('category' => '',), $atts, 'get_posts'); 
    $cat=$atts['category']; 
    global $post; 
    $args = array(
       'category'  => $cat, 
       'numberposts' => -1, 
       'order'   => 'ASC', 
       ); 
    $myposts = get_posts($args); 
    foreach($myposts as $post) : 
     setup_postdata($post); 
     $post_permalink = get_permalink(); 
     $post_title = get_the_title(); 

     $htm[] = '<li><a href="' . $post_permalink . '">' . $post_title . '</a></li>'; 

    endforeach; 
    wp_reset_postdata(); 

    return $htm; 
} 

add_shortcode('get_posts', 'getposts_func'); 
+0

, который, кажется, нарушает код. –

3

Если изменить Еогеасп часть использовать переменную для возвращения вы будете иметь информацию.