升级到 PHP 7.1
Upgrading to PHP 7.1
我有一个关于将我的主题文件升级到 PHP 7.1 的快速问题。我知道这很容易做,但我不明白PHP。
它目前处于 5.3 的旧兼容性中,这是我主题的两个部分中唯一的错误:"ERROR | Using a call-time pass-by-reference is deprecated since PHP 5.3 and prohibited since 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…', '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="<i class='ps-icon-arrow-left'></i>" data-owl-nav-right="<i class='ps-icon-arrow-right'></i>">
<?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();
感谢您的帮助,我真的很感激!
变量 $post_object
前的这个 &
字符强制通过引用赋值。
传递函数参数时不需要 &。默认情况下,对象通过引用传递 PHP5。 WP 官方文档说 you must pass a refrence 到全局 post 变量。您可以通过以下方式满足这两个要求:
$GLOBALS['post'] =& $post_object;
setup_postdata($post_object);
setup_postdata( $GLOBALS['post'] =& $post_object );
正在通过引用进行赋值,这是一种奇怪的方式。
在这行代码中,您引用了 WordPress 的 setup_postdata
函数,该函数基本上在幕后填充了一堆以 WP 为中心的变量。通常你只需调用它: setup_postdata($post_object)
就可以了。
并且不要忘记在循环关闭时调用 wp_reset_postdata()
,这会重置 WP 其他循环的变量,您可能 运行 在网站的其他地方。
我有一个关于将我的主题文件升级到 PHP 7.1 的快速问题。我知道这很容易做,但我不明白PHP。
它目前处于 5.3 的旧兼容性中,这是我主题的两个部分中唯一的错误:"ERROR | Using a call-time pass-by-reference is deprecated since PHP 5.3 and prohibited since 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…', '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="<i class='ps-icon-arrow-left'></i>" data-owl-nav-right="<i class='ps-icon-arrow-right'></i>">
<?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();
感谢您的帮助,我真的很感激!
变量 $post_object
前的这个 &
字符强制通过引用赋值。
传递函数参数时不需要 &。默认情况下,对象通过引用传递 PHP5。 WP 官方文档说 you must pass a refrence 到全局 post 变量。您可以通过以下方式满足这两个要求:
$GLOBALS['post'] =& $post_object;
setup_postdata($post_object);
setup_postdata( $GLOBALS['post'] =& $post_object );
正在通过引用进行赋值,这是一种奇怪的方式。
在这行代码中,您引用了 WordPress 的 setup_postdata
函数,该函数基本上在幕后填充了一堆以 WP 为中心的变量。通常你只需调用它: setup_postdata($post_object)
就可以了。
并且不要忘记在循环关闭时调用 wp_reset_postdata()
,这会重置 WP 其他循环的变量,您可能 运行 在网站的其他地方。