升级到PHP 7.1

时间:2018-09-13 17:27:29

标签: php wordpress php-7.1

我有一个关于将主题文件升级到PHP 7.1的快速问题。我知道这很容易做到,但是我不了解PHP。

当前它具有5.3的旧兼容性,这是我主题的2个部分中的唯一错误:“自PHP 5.3起,不赞成使用调用时间传递引用,而自PHP 5.4起,则不建议使用调用时传递引用。”

我会问我的主题开发人员,但是上一次他们做了一些事情,他们删除了我所有的自定义CSS代码。他们的大力支持,我再也不能相信他们了。

两个问题行都使用此代码setup_postdata( $GLOBALS['post'] =& $post_object );

主题文件1:

if ( ! defined( 'ABSPATH' ) ) {
    exit;
}
if ( $upsells ) : ?>
<div class="ps-section pb-50">
    <div class="ps-container">
        <div class="ps-section__header text-center">
            <h2 class="ps-section__title"><?php esc_html_e('You may also like&hellip;', 'xuper');?></h2>
        </div>

        <div class="ps-section__content">
            <div class="ps-slider--center owl-slider products" data-owl-auto="true" data-owl-loop="true" data-owl-speed="5000" data-owl-gap="30" data-owl-nav="true" data-owl-dots="false" data-owl-item="4" data-owl-item-xs="1" data-owl-item-sm="2" data-owl-item-md="3" data-owl-item-lg="4" data-owl-duration="1000" data-owl-mousedrag="on" data-owl-nav-left="&lt;i class='ps-icon-arrow-left'&gt;&lt;/i&gt;" data-owl-nav-right="&lt;i class='ps-icon-arrow-right'&gt;&lt;/i&gt;">

                <?php foreach ( $upsells as $upsell ) : ?>

                    <?php
                        $post_object = get_post( $upsell->get_id() );

                        setup_postdata( $GLOBALS['post'] =& $post_object );

                        wc_get_template_part( 'content', 'product' ); ?>

                <?php endforeach; ?>
            </div>
        </div>
    </div>
</div>      
                                                        `                              `                     
                    <?php
                        $post_object = get_post( $related_product->get_id() );

                        `setup_postdata( $GLOBALS['post'] =& $post_object );

                        wc_get_template_part( 'content', 'product' ); ?>

                <?php endforeach; ?>
            </div>
        </div>
    </div>
</div>  

wp_reset_postdata();

感谢您的帮助,我真的很感激!

2 个答案:

答案 0 :(得分:-1)

变量&之前的这个$post_object字符强制通过引用进行分配。

在传递函数参数时不需要&。默认情况下,PHP5通过引用传递对象。官方WP文件说you must pass a refrence为全局post变量。您可以通过以下方式满足这两个要求:

$GLOBALS['post'] =& $post_object;
setup_postdata($post_object);

答案 1 :(得分:-1)

setup_postdata( $GLOBALS['post'] =& $post_object );通过引用进行分配,这是一种奇怪的方式。

在这行代码中,您引用的是WordPress的setup_postdata函数,该函数基本上在幕后填充了一些以WP为中心的变量。通常,您只需使用setup_postdata($post_object)来调用它,就可以了。

在循环关闭时,别忘了调用wp_reset_postdata(),这会为您可能在站点其他地方运行的WP其他循环重置变量。