元数据未显示在自定义短代码功能中

时间:2014-03-24 16:17:30

标签: wordpress metadata shortcode

我创建了一个名为sermons的自定义帖子类型,并为此帖子类型添加了一个元框,为每个帖子插入一个MP3网址。 MP3 URL在我的布道页面模板上工作/显示正常,但是当我在我的函数文件中为Recent Sermons创建短代码时,播放器不会出现。所有其他元素都出现在循环中(标题,特色图像,日期),但没有音频播放器。

add_shortcode( 'recent_sermons', 'recent_sermons' );

function recent_sermons( $atts ) {
    ob_start();
    // define attributes and their defaults
    extract( shortcode_atts( array (
        'posts' => 8,
    ), $atts ) );

    // define query parameters based on attributes
    $options = array(
        'posts_per_page' => $posts,
        'post_type' => 'sermons',
    );
    $query = new WP_Query( $options );
    // run the loop based on the query

    if ( $query->have_posts() ) { ?>
<div class="my-sermon-loop">
<?php while ( $query->have_posts() ) : $query->the_post(); ?>
<div class="sermon rec-post-wrap">
        <div class="sermon-post">
            <div class="float-lft">
            <h2><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php printf(__('%s', 'everypraise'), the_title_attribute('echo=0')); ?>"><?php the_title(); ?></a></h2>
                <div class="loop-post-meta">
                    <ul>
                        <li class="date"><?php the_time(__('F jS, Y', 'everypraise')) ?></li>
                    </ul>
                </div>
            </div>
            <div class="float-rt"> <a href="<?php the_permalink() ?>" rel="bookmark" title="<?php printf(__('%s', 'everypraise'), the_title_attribute('echo=0')); ?>"><?php the_post_thumbnail( 'sermons-thumb' ); ?></a> </div>
            <div class="cleared"></div>
                <div class="sermon-audio">
<?php echo apply_filters('the_content', get_post_meta($post->ID, 'wpshed_textfield', true)); ?>
                </div>
        </div>
    </div>
            <?php endwhile;
            wp_reset_postdata(); ?>
</div>
<?php $myvariable = ob_get_clean();
    return $myvariable;
    }
}

1 个答案:

答案 0 :(得分:0)

以下内容适用于输出缓冲区(ob_*函数)。 global $post仅用于测试,在您的代码中已在循环中定义。

add_shortcode( 'test-wp-embed', function( $atts, $content )
{
    global $post, $wp_embed;
    ob_start();
    $mp3 = get_post_meta( $post->ID, 'wpshed_textfield', true );
    echo do_shortcode( $wp_embed->autoembed( $mp3 ) );
    $myvariable = ob_get_clean();
    return $myvariable;
});

但我建议您更改代码以使用get_posts instead of WP_Query。在这种情况下,没有输出缓冲,这有效:

add_shortcode( 'test-wp-oembed', function( $atts, $content )
{
    global $post;
    $mp3 = apply_filters( 'the_content', get_post_meta($post->ID, 'wpshed_textfield', true ) );
    return $mp3;
});