为什么调用包装短码时wp_video_shortcode内部的短代码会回响?

时间:2018-04-25 10:03:11

标签: php wordpress

我有一个短代码,它会返回如下所示的html:

public function get_video_grid($the_query) {
    $html = '';
    if ( $the_query->have_posts() ) {
        $count = 0;
        while ( $the_query->have_posts()) : $the_query->the_post();
            $attachment = get_attached_media( 'video' );
            $post_ID = get_the_ID();

            global $wpdb;
            $video_url =  wp_get_attachment_url($post_ID);

            $video_attr = array(
                'src' => $video_url
            );

            $item = $wpdb->get_row(
                "
                    SELECT video_start_time
                    FROM " . $wpdb->prefix . "lc
                    WHERE attachment_id = $post_ID
                ",
                ARRAY_A
            );

            $time = $item['video_start_time'];
            $html .= '<div class="video-thumb-wrapper">';
            $html .= '<h4 class="grid-title">' . get_the_title() . '</h4>';
            $html .= '<span class="grid-timestamp">' . gmdate('d.m.Y H:i', strtotime($time)) . '</span>';
            $html .= '<div class="aspect-ratio">';
            $html .= wp_video_shortcode( $video_attr );
            $html .= '</div>';
            $html .= '</div>';
            $count++;
        endwhile;
    }
    return $html;
} // get_video_grid

但是,如果我在文章或do_shortcode()中使用短代码,视频元素将在某些页面上的容器外部呈现。在一些WP安装上,这很好用。 WP的版本似乎没有影响。

如果我尝试将html字符串存储到这样的变量:

<?php
/**
 * Template Name: Modular Page
 */
get_header(); ?>
<?php if ( have_posts() ) while ( have_posts() ) : the_post();

    if ( post_password_required() ) {
        echo get_the_password_form();
    } else {
        lobo_modular_content( $post );
    }

    endwhile;
    $content = do_shortcode("[lilicast_list]");
get_footer(); ?>

视频仍然呈现。值得注意的是,此时没有任何内容可以回应,但我仍然拥有html中的元素。据我所知,我要问的是wp给我一个字符串。

为什么wp_video_shortcode()在其他任何事情之前回显?为什么行为与仅在帖子中添加短代码不一致?

0 个答案:

没有答案