升级到PHP 7.1

问题描述 投票:1回答:2

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

它目前处于5.3的旧兼容性中,这是我主题的两个部分中唯一的错误:“错误|使用调用时传递引用自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();

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

php wordpress php-7.1
2个回答
-1
投票

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

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

当你关闭循环时,不要忘记调用wp_reset_postdata(),这会重置你可能在网站上其他地方运行的WP其他循环的变量。


-1
投票

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

传递函数参数时,你不需要&。默认情况下,PHP5通过引用传递对象。官方WP文件说,you must pass a refrence到全球变量。您可以这样填写两个要求:

$GLOBALS['post'] =& $post_object;
setup_postdata($post_object);
© www.soinside.com 2019 - 2024. All rights reserved.