我有一个关于将主题文件升级到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…', '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();
感谢您的帮助,我真的很感激!
答案 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其他循环重置变量。