Okay=正在开发我发布的插件over here, 我遇到了一些麻烦。
我决定从头开始编写插件。正如我所指出的,这是一个定制的ajax库/组合,我正试图将其管理工作纳入wp admin。最终的目标是使用wp进行查询/排序,并通过该插件将xml或json传递回httprequest。
首先,当插件第一次被激活时,我试图创建一个新表,并向其中插入一些测试数据(我遵循wordpress codex 指南。)然而,当插件成功激活时,什么都没有发生。我没有(再)收到错误,但没有插入表,也没有添加数据。
我意识到codex脚本是程序性的,我正在使用一个类,但我认为所有内容的范围都是正确的。事实上我不知道是不是,特别是global $wpdb
. 我对php还是相当陌生的-它似乎有一些我还不太熟悉的范围界定怪癖。
无论如何,这就是我目前所得到的。非常简单,但还没有成功。
<?php
/*
Plugin Name: B99 Portfolio
Plugin URI: http://www.joshbosworth.com/
Description: B99 Portfolio data logic
Version: 0.1
Author: Josh Bosworth
Author URI: http://www.joshbosworth.com
*/
global $b99_pf_db_version;
$b99_pf_db_version = "1.0";
if ( !class_exists( \'B99_Portfolio\')){
require_once(ABSPATH . \'wp-admin/includes/upgrade.php\');
class B99_Portfolio
{
public function B99_Portfolio(){}
public function __construct(){
add_action(\'admin_menu\', array( &$this, \'b99_portfolio_admin_actions\' ));
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// admin
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
public function b99_portfolio_admin_actions(){
add_media_page( \'B99 Portfolio\', \'B99 Portfolio\', \'manage_options\', \'B99_Portfolio\', array( &$this, \'b99_portfolio_admin\'));
}
public function b99_portfolio_admin(){
if (!current_user_can(\'manage_options\'))
{
wp_die( __(\'You do not have sufficient permissions to access this page.\') );
}
include(\'b99-portfolio-admin.php\');
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// db table
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
var $table_name;
public function b99_pf_install(){
global $wpdb;
$this->table_name = $wpdb->prefix . "b99_pf";
$sql = "CREATE TABLE " . $this->table_name . " ( //changed to class var
id mediumint(9) NOT NULL AUTO_INCREMENT,
time datetime DEFAULT \'0000-00-00 00:00:00\' NOT NULL,
title tinytext NOT NULL,
cat tinytext DEFAULT NOT NULL, //changed from \'default\'
tag tinytext NOT NULL,
note text NOT NULL,
date tinytext NOT NULL,
hr_path tinytext NOT NULL,
lr_path tinytext NOT NULL,
UNIQUE KEY id (id)
);";
dbDelta($sql);
add_option("b99_pf_db_version", $b99_pf_db_version);
}
public function b99_pf_install_data(){
global $wpdb;
$title = \'Testing Furiously\';
$cat = \'illustration,design\';
$tag = \'sketch\';
$note = \'Seriously Testing\';
$date = \'june 2008\';
$hr_path= \'hr/testing.furiously-hr.jpg\';
$lr_path= \'lr/testing.furiously-lr.jpg\';
$rows_affected = $wpdb->insert( $this->table_name, array( \'time\' => current_time(\'mysql\'), //changed table_name to class var
\'title\' => $title,
\'cat\' => $cat,
\'tag\' => $tag,
\'note\' => $note,
\'hr_path\'=>$hr_path,
\'lr_path\'=>$lr_path
) );
}
} //end class
}
if( class_exists(B99_Portfolio)){
$b99_PF = new B99_Portfolio();
register_activation_hook(__FILE__, array(&$b99_PF, \'b99_pf_install\'));
register_activation_hook(__FILE__, array(&$b99_PF, \'b99_pf_install_data\'));
}
?>
任何建议都是最好的。坦率地说,对我的总体计划采取不同或相反的态度也可以。
提前谢谢。
顺便问一下,我该怎么调试wordpress?我正在使用netbeans/xampp。。。
=更新=
好的-能够启动并运行xdebug(谢谢!)。关于这段代码,我还有几个问题。
-Just general php - 我对可变范围有点困惑
$classvar // implied public modifier?
private function someFunction(){
$classvar // let me get this straight - this is a new local var
$classvar !=$this->classvar? // right? if so thats an important clarification...
}
-$wpdb
为什么?
global $wpdb
$rows_affected = $wpdb->insert(...
而且不仅仅是
global $wbdb->insert(...
-register_activation_hook / wordpress db rebuild.
我注意到,激活钩子在每次加载管理页面时都会运行,而不仅仅是在插件被“激活”时,这似乎是合乎逻辑的行为。而且似乎wp查询也会重建,或者至少在整个wordpress数据库上运行dbDelta,每次重建管理页面也会这样?并不是说这似乎是错的,但我不知道为什么。我应该注意,我只是使用myPhpAdmin来查看表是否被添加到db结构中。
很明显,我整个职业生涯都在为客户服务;)虽然我过去使用过很多php功能,但这可能是我第一次尝试“简单”的服务器端例程或复制/粘贴以外的任何操作。无论如何-谢谢你的帮助-