wordpress插件的致命错误

时间:2018-01-17 15:52:30

标签: php wordpress

我在多站点平台上下载了一个插件。当我尝试激活它时,它给了我一个错误:

致命错误:在第15行的写上下文中不能使用函数返回值。

第15行:

/* Change to true */
if (false == defined( 'CWCFP_PLUGIN' ) && empty( get_option( 'cwcfp-update-notice-dismissed' ) ) ){
    add_action( 'admin_notices', 'cwcf_update_notice' );
}

我尝试将其更改为true已经无法正常工作。

整个代码:

<?php
if ( ! defined( 'ABSPATH' ) ) {
    exit; // Exit if accessed directly
}
function cwcf_update_notice() {
    $url = 'https://conditionalcheckoutfields.com/downloads/conditional-woo-checkout-field-pro/';
    $link = sprintf( wp_kses( __( '<a href="%s">Click here</a> to upgrade Conditional Checkout Field to Pro! Get an unlimited number of checkout fields, duplicate checkout fields based on product quantity in the customer\'s cart, and more!', 'conditional-woo-checkout-field' ), array( 'a' => array( 'href' => array() ) ) ), esc_url( $url ) );
    ?>
    <div class="notice notice-info cwcfp-update-notice is-dismissible">
        <p><?php echo $link; ?></p>
    </div>
    <?php
}
/* Change to true */
if (false == defined( 'CWCFP_PLUGIN' ) && empty( get_option( 'cwcfp-update-notice-dismissed' ) ) ){
    add_action( 'admin_notices', 'cwcf_update_notice' );
}

add_action( 'admin_enqueue_scripts', 'cwcf_update_notice_assets' );

function cwcf_update_notice_assets() {
    wp_enqueue_script( 'cwcfp-notice-update', CWCF_PLUGIN_URL . '/includes/js/notice-update.js', array( 'jquery' ), '1.0', true );
    wp_enqueue_script( 'cwcf-notice-review', CWCF_PLUGIN_URL . '/includes/js/notice-review.js', array( 'jquery' ), '1.0', true );
}

add_action( 'wp_ajax_cwcfp_dismiss_notice', 'cwcfp_dismiss_notice' );

function cwcfp_dismiss_notice(){
    update_option( 'cwcfp-update-notice-dismissed', '1' );
}

function cwcf_review_notice() {
    $url = 'https://wordpress.org/support/plugin/conditional-woo-checkout-field/reviews/#new-post';
    $link = sprintf( wp_kses( __( 'Could we ask for a 5 star review of Conditional Checkout Field? It would be greatly appreciated! <a href="%s">Click here</a> to leave a review.', 'conditional-woo-checkout-field' ), array( 'a' => array( 'href' => array() ) ) ), esc_url( $url ) );
    ?>
    <div class="notice notice-info cwcf-review-notice is-dismissible">
        <p><?php echo $link; ?></p>
    </div>
    <?php
}
/* Change to true */
if ( false == defined( 'CWCFP_PLUGIN' ) && empty( get_option( 'cwcf-review-notice-dismissed' ) && !empty( get_option( 'cwcfp-update-notice-dismissed' ) ) ) ){
    add_action( 'admin_notices', 'cwcf_review_notice' );
}

add_action( 'wp_ajax_cwcf_review_dismiss_notice', 'cwcf_review_dismiss_notice' );

function cwcf_review_dismiss_notice(){
    update_option( 'cwcf-review-notice-dismissed', '1' );
}

1 个答案:

答案 0 :(得分:3)

尝试改变:

if (false == defined( 'CWCFP_PLUGIN' ) && empty( get_option( 'cwcfp-update-notice-dismissed' ) ) ){
// ...

为:

$cwcfp_update_notice_dismissed = get_option( 'cwcfp-update-notice-dismissed' );
if (false == defined( 'CWCFP_PLUGIN' ) && empty( $cwcfp_update_notice_dismissed ) ){
// ...

为什么?

  

在PHP 5.5之前,empty()仅支持变量;其他任何东西都会导致解析错误。换句话说,以下将不起作用:empty(trim($ name))。相反,使用trim($ name)== false。

更多信息:http://php.net/manual/en/function.empty.php

更好的代码

如果要检查用户,请忽略通知。更好用:

if (false == defined( 'CWCFP_PLUGIN' ) && get_option( 'cwcfp-update-notice-dismissed', false ) == true ){
// ...

以上代码将检查:

  • 如果您的cwcfp-update-notice-dismissed表中不存在_options或没有值,请返回默认值 false 。用户首次安装时会看到通知,或者没有选中以解除复选框。
  • 如果cwcfp-update-notice-dismissed存在,请获取其值而不是默认值。

更多信息:https://developer.wordpress.org/reference/functions/get_option/