自写插件中显示价格的GET_PRICE(和其他)出错

时间:2018-06-08 作者:Patrick Batemann

我现在有3-4周的大问题。我写的一个插件(我不是程序员,我只是从另一个插件复制和修改过)在保存产品后会输出一个白色的死亡屏幕。前端一切正常,功能完美。

插件应该从数据库中获取价格,并通过一个短代码[显示\\u价格]输出它,用于普通主题样式或[显示\\u价格\\u否\\u样式],无需任何样式。

请参阅所附插件的代码。

非常感谢您的帮助:):)

(顺便说一句:我对其他功能也有问题,例如“get\\u sku”或“get\\u title”)

非常感谢Patrick

因此,这应该创建一个执行函数的短代码,以正确获取价格和输出。保存包含快捷码的产品时,会发生以下错误:

致命错误:未捕获错误:在/home/中对null调用成员函数get\\u title()。sites/123/site5586569/web/wordpress/wp-content/plugins/woocommerce-display-Variable/display\\u-Variable。php:180堆栈跟踪:#0/主/。sites/123/site5586569/web/wordpress/wp-content/plugins/woocommerce-display-Variable/display\\u-Variable。php(140):display\\u info(5449)#1/home/。站点/123/site5586569/web/wordpress/wp包含/短代码。php(319):display\\u info\\u shortcode(“”,,“display\\u info”)\\2[内部函数]:do\\u shortcode\\u tag(Array)\\35; 3/home/。站点/123/site5586569/web/wordpress/wp包含/短代码。php(197):preg\\u replace\\u回调(\'/\\[(\\[?)(displa…\',\'do\\u shortcode\\u ta…\',\'display\\u info]\\n\')\\4/home/。sites/123/site5586569/web/wordpress/wp-content/themes/enfold/config-templatebuilder/avia-template-builder/php/shortcode-helper。班php(485):do\\u短代码(“[显示信息]\\n”)\\5/home/。sites/123/site5586569/web/wordpress/wp content/themes/enfold/config templatebuilder/avia shortcodes/textblock。php(253):ShortcodeHelper::avia\\u apply\\u autop(\'

插件代码

if ( in_array( \'woocommerce/woocommerce.php\', apply_filters( \'active_plugins\', get_option( \'active_plugins\' ) ) ) ){
add_shortcode(\'display_price\', \'display_price_shortcode\');
}

function display_price_shortcode($atts) {
    global $post;

    extract(shortcode_atts(array(
        \'id\' => $post->ID,
    ), $atts));


    if(get_post_type($id)==\'product\'){
        ob_start();
        display_price_no_style_only($id);
        return ob_get_clean();
    }else{
        return "";
    }

}

function display_price_no_style_only($id="" ){
    global $wpdb;
    global $post;
    global $product;

    if(empty($id)){
        $id=$post->post_id;
    }

    if(get_post_type( $id )==\'product\'){
        $derpreis = $wpdb->get_var( "
            SELECT COUNT(meta_value) FROM $wpdb->postmeta
            WHERE meta_key = \'_price\'
            AND post_id = $id
            ");

        }

    if($derpreis > 0 ) {

        echo \'<span class="displayprice">\'. $product->get_price_html() . \'</span>\';
    }

    if($derpreis = 0 ) {

        echo \'Preis nicht verfügbar\';
    }

}

if ( in_array( \'woocommerce/woocommerce.php\', apply_filters( \'active_plugins\', get_option( \'active_plugins\' ) ) ) ){
add_shortcode(\'display_price_no_style\', \'display_price_no_style_shortcode\');
}

function display_price_no_style_shortcode($atts) {
    global $post;

    extract(shortcode_atts(array(
        \'id\' => $post->ID,
    ), $atts));

    if(get_post_type($id)==\'product\'){
        ob_start();
        display_price_only($id);
        return ob_get_clean();
    }else{
        return "";
    }

}

function display_price_only($id="" ){
    global $wpdb;
    global $post;
    global $product;

    if(empty($id)){
        $id=$post->post_id;
    }

    if(get_post_type( $id )==\'product\'){
        $derpreis = $wpdb->get_var( "
            SELECT COUNT(meta_value) FROM $wpdb->postmeta
            WHERE meta_key = \'_price\'
            AND post_id = $id
            ");
        }
    if($derpreis > 0 ) {
            echo $product->get_price_html();
    }
    if($derpreis = 0 ) {
        echo \'Kein Preis verfügbar\';
    }
}

1 个回复
SO网友:Bjorn

The error

来自文件:

/wp-content/plugins/woocommerce-display-various/display_various.php
第180行。

禁用插件“woocommerce display Variable”,并检查问题是否仍然存在。

<小时>

Your code

为什么要使用输出缓冲(ob_start())? 此外,您没有正确使用它。

您的代码还有很多需要改进的地方。。。

查看我的更改:

add_action(\'init\',\'add_custom_price_shortcodes\');

function add_custom_price_shortcodes() {
  if ( class_exists( \'woocommerce\' ) ) {
    add_shortcode(\'display_price\', \'display_price_shortcode\');
    add_shortcode(\'display_price_no_style\', \'display_price_no_style_shortcode\');
  }
}

function display_price_shortcode() {
  global $post;

  if(get_post_type($post->ID) == \'product\'){
    return price_shortcode_display_price($post->ID, \'with_style\');
  } else {
    return "";
  }
}

function display_price_no_style_shortcode() {
  global $post;

  if(get_post_type($post->ID) == \'product\'){
    return price_shortcode_display_price($post->ID, \'no_style\');
  } else {
    return "";
  }
}

function price_shortcode_display_price($post_id, $type = \'no_style\') {

  $product = wc_get_product($post_id);

  if($product) {

    $derpreis = $product->get_price();

    if($derpreis > 0 ) {
      if( $type == \'no_style\') {
        return $product->get_price_html();
      }
      if( $type == \'with_style\') {
        return \'<span class="displayprice">\'. $product->get_price_html() . \'</span>\';
      }
    } else {
      return \'Kein Preis verfügbar\';
    }
  } else {
    return \'Kein Preis verfügbar\';
  }
}
你好,比约恩

结束

相关推荐

WordPress Plugins won't save

我有一个WordPress网站,我刚刚接管了一个客户,因此我没有能力与以前的网站管理员/开发人员交谈。该网站使用的是YOOtheme对Subway稍加修改的版本。为了更新插件位置,Subway的一部分有“小部件选项”。我无法更改外观或小部件显示的页面,因为我无法保存任何内容。它看起来像已保存,但没有保存,或者您会在保存按钮旁边看到“加载循环”,它一直在运行。Things to note:<WordPress和插件是最新的。在我们转移到新服务器之前,插件是可更新的。新服务器有一个max\\u inpu