2016-06-01 5 views
0

私は、自分のウェブサイトで利用可能なオファーとボーナスの量を表示する簡単なワードプレスウィジェットを作ろうとしています。残念ながら、何かが欠けているように、クラッシュしているようです。

 // Block direct requests 
    if (!defined('ABSPATH')) 
    die('-1'); 


add_action('widgets_init', function(){ 
    register_widget('MatchedBettingBonusCount'); 
}); 

/** 
* Adds MatchedBettingBonusCount widget. 
*/ 
class MatchedBettingBonusCount extends WP_Widget { 

    /** 
    * Register widget with WordPress. 
    */ 
    function __construct() { 
     parent::__construct(
      'MatchedBettingBonusCount', // Base ID 
      __('MatchedBettingBonusCount', 'text_domain'), // Name 
      array('description' => __('My first widget!', 'text_domain'),) // Args 
     ); 
    } 

    /** 
    * Front-end display of widget. 
    * 
    * @see WP_Widget::widget() 
    * 
    * @param array $args  Widget arguments. 
    * @param array $instance Saved values from database. 
    */ 
    public function widget($args, $instance) { 

     $sqlOfferCount = "SELECT * FROM vhyky_posts WHERE post_type = 'cs_cause' AND post_status = 'publish'"; 
     $sqlOfferSum = "SELECT sum(vpm.meta_value) FROM vhyky_posts vp, vhyky_postmeta vpm WHERE post_type = 'cs_cause' AND post_status = 'publish' AND vp.id = vpm.post_id"; 

     global $wpdb; 
     $offerCount = $wpdb->get_results($sqlOfferCount); 
     $offerSum = $wpdb->get_results($sqlOfferCount); 


     echo $args['before_widget']; 
     if (! empty($instance['title'])) { 
      echo $args['before_title'] . apply_filters('widget_title', $instance['title']). $args['after_title']; 
     } 
     echo __('We currently have <strong>'.$offerCount. '</strong> sign-up offers. Totalling an amazing <strong>&pound;'. $offerSum .'</strong> of bonuses' , 'text_domain'); 
     echo $args['after_widget']; 
    } 

    /** 
    * Back-end widget form. 
    * 
    * @see WP_Widget::form() 
    * 
    * @param array $instance Previously saved values from database. 
    */ 
    public function form($instance) { 
     if (isset($instance[ 'title' ])) { 
      $title = $instance[ 'title' ]; 
     } 
     else { 
      $title = __('New title', 'text_domain'); 
     } 
     ?> 
     <p> 
      <label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title:'); ?></label> 
      <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo esc_attr($title); ?>"> 
     </p> 
     <?php 
    } 

    /** 
    * Sanitize widget form values as they are saved. 
    * 
    * @see WP_Widget::update() 
    * 
    * @param array $new_instance Values just sent to be saved. 
    * @param array $old_instance Previously saved values from database. 
    * 
    * @return array Updated safe values to be saved. 
    */ 
    public function update($new_instance, $old_instance) { 
     $instance = array(); 
     $instance['title'] = (! empty($new_instance['title'])) ? strip_tags($new_instance['title']) : ''; 

     return $instance; 
    } 

} // class My_Widget 

私がしようとしている多くのものが古くなるようだ:

は、ここに私のコードです。現在の値はとなります

+0

'$のwpdb'は、あなたが'グローバルの$ PWDBを使用する必要があり、あなたの関数では魔法のように表示されません; '。 –

+0

おかげでジェラルド。私は、$ sqlOfferCount前にこれを含めているが、それはまだ限り、あなたはそれだけで盲目の推測だ実際のエラーメッセージを投稿しないように、同じ問題 – BCLtd

+0

まあの原因となっています。 –

答えて

1

まず、オファーをカウントするために(最初のクエリの変更)集計関数を追加する必要があります。
第二に、あなたは、デフォルトの戻りオブジェクトの配列によって1つの変数返されるとget_resultsを持っているのでget_varget_resultsを変更する必要があります。

はここで変更されたコードです:

$sqlOfferCount = "SELECT count(*) FROM vhyky_posts WHERE post_type = 'cs_cause' AND post_status = 'publish'"; 
    $sqlOfferSum = "SELECT sum(vpm.meta_value) FROM vhyky_posts vp, vhyky_postmeta vpm WHERE post_type = 'cs_cause' AND post_status = 'publish' AND vp.id = vpm.post_id"; 

    global $wpdb; 
    $offerCount = $wpdb->get_var($sqlOfferCount); 
    $offerSum = $wpdb->get_var($sqlOfferCount); 
関連する問題