Куда поместить $ wpdb с помощью плагина / виджета ООП и расширения WP_widget - PullRequest
4 голосов
/ 13 февраля 2012

Я новичок в разработке плагинов и WP, поэтому мне нужна помощь.

Я пытаюсь сделать плагин, который будет использовать / повторно использовать определенные изображения из папки мультимедиа и отображать их в боковом виджете.для определенной страницы, способом, который мне нравится, или с использованием шорткодов на определенной странице.(поэтому должно работать как с виджетами «посты \ страницы», так и с виджетами боковой панели).

Он должен использоваться несколько раз, на многих страницах

Я решил создать свою собственную таблицу в базе данных WP, хотя я уже читал здесь, в посте, что она, возможно, не нужна: Разработка плагина WordPress с использованием ООП

Я борюсь на нескольких полях.Сначала у меня были проблемы, чтобы найти достойное объяснение, как создать виджет, который можно использовать несколько раз.Хорошо, я решил это, используя:

class FeatDispWidget extends WP_Widget {...}

примеров, и это действительно работает, я могу иметь несколько экземпляров, и данные сохраняются в wp_options.

Теперь я пытаюсь использовать $ wpdb.И из всех возможных примеров я вижу, что я должен использовать глобальный $ wpdb или включить некоторые файлы php, или расширить wpdb своим собственным классом БД, но каков наилучший / правильный путь в подходе ООП?

это частьмоего кода, конструктор и попробуйте вызвать функцию БД, которая постоянно дает мне ошибки.

class FeatDispWidget extends WP_Widget {

     private $featdisplayer_table;
     $featdisplayer_table = $wpdb->prefix . 'featdisplayer';


/**
 * Widget setup.
 */
function FeatDispWidget() {
    /* Widget settings. */
    $widget_ops = array( 'classname' => 'featdisp', 'description' => __('Sexy Feature Displayer.', 'featdisp') );

    /* Widget control settings. */
    $control_ops = array( 'width' => 300, 'height' => 350, 'id_base' => 'featdisp-widget' );

    /* Create the widget. */
    $this->WP_Widget( 'featdisp-widget', __('Feature Displayer Widget', 'featdisp'), $widget_ops, $control_ops );
}




    function featDispDBsetup (){
        global $wpdb;
        global $featdisplayer_table;


        if ( $wpdb->get_var( "show tables like '$featdisplayer_table'" ) != $featdisplayer_table ) {
    $sql = "CREATE TABLE $featdisplayer_table (".
        "sandf_id INT NOT NULL AUTO_INCREMENT, ".
        "type VARCHAR( 30 ) NOT NULL, ".
        "attachid INT NOT NULL, ".
        "setid INT NOT NULL, ".
        "imgpath LONGTEXT NOT NULL, ".
                    "title LONGTEXT NOT NULL, ".
        "desc LONGTEXT, ".
                    "linkto LONGTEXT, ".
                    "altertext LONGTEXT, ".
                    "txtnxttoimg LONGTEXT, ".
                    "sortorder INT, ".
        ")";

            require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
    dbDelta( $sql );
        }

    }

Итак, мои вопросы:

1) можно ли расширить WP_widget, как я, и отобразить его на обеих страницах и боковой панели?2) нужно ли расширять WP_widget для того, чтобы создать экземпляр виджета несколько раз (по одному разу на каждой странице) 3) Если я расширяю WP_widget, куда я помещаю $ wpdb для создания таблицы в базе данных wp

пока это все, я думаю, что взял что-то сложное для моего первого виджета, но я не сдаюсь!:)

1 Ответ

12 голосов
/ 01 марта 2012

$wpdb - это просто имя глобального экземпляра обертки базы данных Wordpress.Лучше всего установить имя таблицы в конструкторе и включить ссылку на глобальный объект базы данных в качестве параметра класса, например:

class FeatDispWidget extends WP_Widget {

  private 
    $featdisplayer_table,
    $wpdb;

  public function __construct() {
    global $wpdb;

    $this->wpdb = &$wpdb;
    $this->featdisplayer_table = $this->wpdb->prefix . 'featdisplayer';
  }

  // .. the rest of your widget goes here
}

Затем вы можете ссылаться на $this->wpdb вдругие методы класса.

Что касается других ваших вопросов, вы можете добавить дополнительные «готовые к виджетам» регионы к теме вашего сайта, используя функции register_sidebar и dynamic_sidebar.Подклассы виджетов из WP_Widget могут быть повторно использованы на нескольких боковых панелях без дополнительных модификаций.Однако если вы хотите использовать его на определенных страницах (т. Е. Прикреплять к содержимому публикации), виджет действительно не является правильным решением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...