【发布时间】:2012-03-04 21:44:06
【问题描述】:
我是插件和 WP 开发的新手,所以我需要一些帮助。
我正在尝试做的是插件,它将使用/重用媒体文件夹中的某些图像并将它们显示在侧面小部件中,每个页面,以我喜欢的方式,或在某些页面中使用短代码。 (因此应该适用于帖子\页面和侧边栏小部件)。
它应该在许多页面上多次使用。
我决定做的是在 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 数据库中创建表
所以,这就是现在,我想我为我的第一个小部件做了一些复杂的事情,但我不会放弃! :)
【问题讨论】: