Wordpress: использование тегов шаблонов и функций в шорткодах

Я пытаюсь понять, почему мой шорткод не работает — может ли кто-нибудь понять, почему (извините за дерьмовое форматирование, не могу заставить этот шорткод отображаться правильно)?

По какой-то причине код работает над моим шорткодом. Не уверен, что полностью понимаю, как использовать теги шаблонов /функции WP в шорткодах, поскольку я считаю, что вам нужно использовать что-то вроде get_ в начале функции, чтобы вернуть ее в переменной в шорткодах. Кто-нибудь может помочь?

Спасибо

осу

/* News from Blog category only - category 3 */

add_shortcode( 'latestblogposts', 'osu_latestblogposts' );

function osu_latestblogposts() {
    $start = '<div class="widget widget_osu_blog">';
    $start .= '<a title="Subscribe to our RSS feed" href="/feed?cat=3" class="rss"><img alt="RSS" src="' . get_bloginfo('template_directory') . '/images/ico-rss-big.png"></a>';
    $start .= '<div>';

    $my_query = new WP_Query('category=3&showposts=3');
    while ($my_query->have_posts()) : $my_query->the_post();
        $inner = '<div class="item"><a href="' . get_permalink() . '" title="';
        $inner .= printf( esc_attr__( 'Permalink to %s', 'inspire' ), the_title_attribute( 'echo=0' ) );
        $inner .= '" rel="bookmark" class="title">' . the_title() . '</a>';
        $inner .= '<p class="post-meta">';
        $inner .= '<span class="small">by</span> <span class="post-author"><a title="Posts by ';
        $inner .= the_author();
        $inner .= '" href="' . the_author_posts_link() . '">' . the_author() . '</a></span>';
        $inner .= '<span class="small">on</span> <span class="post-date">';
        $inner .= get_the_date('d/m/Y') . '</span></p>';
        $inner .= the_excerpt() . '</div> <!-- End div.item -->';
    endwhile;

    $end = '</div>';
    $end .= '</div> <!-- End div.widget_osu_blog -->';

    $latestblogposts = $start . $inner . $end;
    return $latestblogposts;
}

person Osu    schedule 07.01.2011    source источник


Ответы (1)


Если я вас правильно понял, вам нужно вызывать функции с необязательным аргументом, чтобы получить возвращаемое значение, а не эхо напрямую. Например, с the_title() у вас есть 3 необязательных аргумента, третий устанавливает вывод (по умолчанию true). the_title().

Для других значений вам нужно будет изменить вызываемую функцию. the_author() всегда отображает (эхо) значение, вместо этого вам нужно вызвать get_the_author().

person AJJ    schedule 07.01.2011
comment
Вам также потребуется заменить the_excerpt() на get_the_excerpt(). - person AJJ; 07.01.2011
comment
Привет, AJweb, спасибо, что ответили мне - вы попали в самую точку. Так это простой случай использования get_ перед большинством этих вещей? Я предполагаю, что мне нужно будет проверить кодекс для каждой из этих функций, чтобы узнать, доступна ли она. Я уверен, что есть более изящный способ поместить цикл в шорткод! - person Osu; 07.01.2011
comment
Правильно, я боюсь, что вам нужно будет проверить функции в кодексе, не всегда бывает просто добавить get_ к имени функции (примером является the_title()). - person AJJ; 08.01.2011
comment
Я предполагаю, что вы всегда можете захватить вывод с помощью ob_start() и ob_get_contents(), хотя я использую буферизацию вывода только в том случае, если нет другого решения, хотя бы из-за дополнительного кода. - person AJJ; 08.01.2011