下面的代码是一个引导滑块,它被转换为自定义的post类型。这个自定义的帖子类型本身就可以工作,但当我尝试将它放在shortcode中时,它不起作用。特别是get\\u post\\u meta无法工作,因为我可以看到附件文件正常工作
<section id="reviews" class="reviews page">
<div class="container wow fadeInUp">
<div class="row">
<h1 class="sr-only"><?php echo $testimonialsArr[\'title\']; ?></h1>
<div id="review-slider" class="carousel slide carousel-fade" data-ride="carousel" data-interval="false">
<div class="col-xs-12">
<?php
$args=array(
\'post_type\' => \'testimonials\',
\'order\' => \'ASC\'
);
$testimonialQuery = new WP_Query($args);
?>
<?php if ( $testimonialQuery->have_posts() ) :?>
<ol class="carousel-indicators">
<?php while( $testimonialQuery->have_posts() ) : $testimonialQuery->the_post();
$testimonialName = get_post_meta( $post->ID, \'_published_testimonial_name_key\',true);
var_dump($testimonialName);
?>
<li data-target="#review-slider" data-slide-to="<?php echo $testimonialQuery->current_post ?>" class="<?php if( $testimonialQuery->current_post == 0 ):?>active<?php endif;?> wow fadeInLeft" data-wow-delay="0.3s"><?php echo $testimonialName;?></li>
<?php endwhile; ?>
</ol>
<?php wp_reset_postdata(); ?>
<?php endif; ?>
</div>
<!-- Wrapper for slides -->
<div class="col-xs-12">
<div class="row">
<div class="carousel-inner" role="listbox">
<?php if ( $testimonialQuery->have_posts() ) : while( $testimonialQuery->have_posts() ) : $testimonialQuery->the_post();
$testimonialText = get_post_meta( $post->ID, \'_published_testimonial_text_key\',true);
$testimonialAvatar = wp_get_attachment_url( get_post_thumbnail_id() );
$testimonialLink = get_post_meta( $post->ID, \'_published_testimonial_url_key\',true);
?>
<div class="item <?php if( $testimonialQuery->current_post == 0 ):?>active<?php endif;?> clearfix fadeInUp delay-2">
<div class="col-xs-12">
<blockquote>
<?php echo $testimonialText; ?>
</blockquote>
</div>
<div class="col-xs-12 blockquote-cite">
<div class="row no-gutter">
<div class="col-xs-2 col-xs-offset-4 col-sm-2 col-sm-offset-5 col-md-1 col-md-offset-6">
<span class="cite-img"><img src="<?php echo $testimonialAvatar;?>" class="img-responsive" alt="published-img"></span>
</div>
<div class="col-xs-6 col-sm-5 col-md-5">
<div class="cite-right">
<span class="cite-name">Adam Butler</span>
<?php if($testimonialLink):?>
<span class="cite-url"><a href="<?php echo $testimonialLink; ?>"><?php echo $testimonialLink; ?></a></span>
<?php endif; ?>
</div>
</div>
</div>
</div>
</div><!-- end item -->
<?php endwhile;?>
<?php wp_reset_postdata(); ?>
<?php endif; ?>
</div>
<?php wp_reset_postdata(); ?>
</div>
</div>
</div>
</div>
</div><!-- End: .row -->
</div><!-- End: .container-->
</section>
最合适的回答,由SO网友:Howdy_McGee 整理而成
我认为问题在于,在短代码中,您实际上无法访问global $post
对象
您可以使用get_posts()
返回一个数组你可以使用get_the_ID();
.你可以打电话global $post
在快捷码函数的顶部问题是global $post
用于此功能时,技术上超出范围。循环和自定义WP\\U查询在模板中可以正常工作,因为wp()
看跌期权$post
在全局命名空间中,供模板在后台加载模板时使用。添加任何泛型函数、短代码回调函数或add_shortcode()
将匿名函数作为第二个参数传入,全局变量将超出作用域,直到通过调用global $post
.
再加上这个。原因get_*()
功能工作(例如get_the_title()
或get_the_ID()
) 是因为他们都打电话get_post()
使用global $post
并将值向上冒泡。
要了解更多信息,请访问PHP Variable Scope 或Variable Scope and WordPress 作者:David Hayes