我是插件和WP开发的新手,所以我需要一些帮助。
我正在尝试做的是插件,它将使用/重用媒体文件夹中的某些图像,并按照我喜欢的方式在某个页面中显示它们,或者在某个页面中使用短代码。 (因此应该在posts \ pages和sidebar小部件上工作)。
它应该在很多页面上多次使用。
我决定在WP数据库中创建自己的表,即使我在帖子上看到可能不需要它:WordPress plugin development using OOP
我在几个领域都很挣扎。首先我遇到问题,找到合适的解释如何创建可以多次使用的小部件。好的,我已经解决了这个问题:
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_widget,我在哪里放置$ wpdb以便在wp数据库中创建表
所以,现在就是这样,我觉得我的第一个小部件有些复杂,但我不放弃! :)
答案 0 :(得分: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_sidebar
和dynamic_sidebar
功能为网站的主题添加其他“小部件就绪”区域。从WP_Widget
分类的小部件可以在多个侧栏上重复使用而无需进行其他修改。但是,如果您想在特定页面上使用它(即附加到帖子内容),则小部件确实不是正确的解决方案。