GET_POST_META在短码内不起作用

时间:2017-05-05 作者:user16072

下面的代码是一个引导滑块,它被转换为自定义的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>

1 个回复
最合适的回答,由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 ScopeVariable Scope and WordPress 作者:David Hayes

结束

相关推荐

未定义变量:WooCommerce_loop

今天,我更新了woocommerce插件,在我的网站上发现以下错误:未定义变量:woocommerce\\u loop我的循环看起来像(对archive-product template 一年前):<?php $newReleasesCounter = 0; $loop = new WP_Query( $args_new_releases ); while ( $loop->have_posts() ) : $loop->the_post(); global $p