2016-06-01 7 views
0

Я пытаюсь создать простой виджет Wordpress, чтобы отображать количество предложений и бонусов, доступных на моем сайте. К сожалению, он, похоже, рушится, как будто чего-то не хватает.

Вот мой код:

 // 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

Во-первых, вам нужно добавить функцию агрегирования для подсчета ваших предложений (изменение в первом запросе).
Во-вторых, вам нужно изменить get_results на get_var, так как у вас есть только 1 переменная, возвращаемая и get_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); 

 Смежные вопросы

  • Нет связанных вопросов^_^