Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在哪里放置$wpdb和OOP插件/小部件,使用和WP_小部件扩展_Php_Wordpress_Oop_Plugins - Fatal编程技术网

Php 在哪里放置$wpdb和OOP插件/小部件,使用和WP_小部件扩展

Php 在哪里放置$wpdb和OOP插件/小部件,使用和WP_小部件扩展,php,wordpress,oop,plugins,Php,Wordpress,Oop,Plugins,我是插件和WP开发的新手,所以我需要一些帮助 我试图做的是使用/重用媒体文件夹中的某些图像,并以我喜欢的方式在每个特定页面的side widget中显示它们,或者在特定页面中使用短代码。(因此应该可以在POST\pages和边栏小部件上使用) 它应该在许多页面上多次使用 我决定在WP数据库中创建我自己的表,尽管我在这里的帖子中读到它可能不需要: 我在好几块地上挣扎。首先,我很难找到合适的解释,如何创建可以多次使用的小部件。好的,我已使用以下方法解决了此问题: class FeatDispWidg

我是插件和WP开发的新手,所以我需要一些帮助

我试图做的是使用/重用媒体文件夹中的某些图像,并以我喜欢的方式在每个特定页面的side widget中显示它们,或者在特定页面中使用短代码。(因此应该可以在POST\pages和边栏小部件上使用)

它应该在许多页面上多次使用

我决定在WP数据库中创建我自己的表,尽管我在这里的帖子中读到它可能不需要:

我在好几块地上挣扎。首先,我很难找到合适的解释,如何创建可以多次使用的小部件。好的,我已使用以下方法解决了此问题:

class FeatDispWidget extends WP_Widget {...}
例如,它真的工作,我可以有多个实例和数据保存做wp_选项

现在,我尝试使用$wpdb。从所有可能的例子中,我看到我必须使用global$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_小部件,并在页面和边栏上显示它吗? 2) 我是否需要扩展WP_小部件,以便将小部件实例化多次(每页一次) 3) 若我扩展WP_小部件,为了在WP数据库中创建表,我应该把$wpdb放在哪里


所以,现在就到此为止,我想我的第一个小部件有些复杂,但我不会放弃!:)

$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

至于您的其他问题,您可以使用和功能向站点的主题添加其他“小部件就绪”区域。从
WP\u Widget
子类的Widget可以在多个侧栏上重复使用,无需额外修改。但是,如果您想在特定页面上使用它(例如,附加到帖子内容),小部件确实不是正确的解决方案