2012-02-13 5 views
4

私はプラグインとWP開発の新人です。

私がしようとしているのは、メディアフォルダの特定のイメージを使用/再利用するプラグインです。サイドウィジェット、特定のページ、好きな方法、または特定のページ内のショートコードを使用して表示します。 (したがって、両方の投稿\ページとサイドバーウィジェットで動作するはずです)。

多くのページで何度も使用する必要があります。私がやることにしました何

は、私はそれが多分必要とされていないことをポストにここに読んだにも関わらず、WPのデータベースに自分のテーブルを作成することです:WordPress plugin development using OOP

、私はいくつかのフィールドに苦労しています。最初に、複数回使用できるウィジェットを作成する方法をうまく説明するのに問題がありました。 OK、私は、この使用して解決している:

class FeatDispWidget extends WP_Widget {...} 

例を、そしてそれは本当に私が複数のインスタンスを持つことができ、動作し、データがwp_optionsを行う保存されます。

今、私は$ wpdbを使用しようとしています。そして、可能なすべての例から、グローバル$ wpdbを使用するか、またはいくつかのPHPファイルを含めるか、独自のDBクラスを使用してwpdbを拡張する必要がありますが、OOPアプローチではどのような方法が最適ですか?

これは私のコードの一部であり、コンストラクタであり、常にエラーを出すdb関数を呼び出そうとします。

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のデータベースにテーブルを作成するために、$のwpdbを置けばいいWP_widgetを、拡張する場合これは今のところ私の最初のウィジェットのために何かを複雑にしたと思うが、私はあきらめるつもりはない! :)

答えて

12

$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_sidebardynamic_sidebar機能を使用して、サイトのテーマに「ウィジェット対応」領域を追加することができます。 WP_Widgetからサブクラス化されたウィジェットは、追加の変更なしに複数のサイドバーで再利用できます。ただし、特定のページ(コンテンツを投稿するために添付)で使用する場合、ウィジェットは実際には適切なソリューションではありません。

関連する問題