我正在写一个小动作插件。每次创建新帖子时,都应该在外部db中创建一个新表。表sholud的名称反映了新创建的post\\u id,但我不知道如何传递它。
这是我迄今为止的代码(对于php纯粹主义者,请原谅我使用了旧的mysql\\u connect(但将标志TRUE添加到新的\\u link参数中,我不必为wpdb globals等而烦恼)
function insert_new_table($post_id){
$usernamel = "secret";
$passwordl = "secret";
$hostl = "localhost";
$databasel ="secret";
$connect = mysql_connect($hostl, $usernamel, $passwordl, TRUE) or die("Error");
mysql_select_db($databasel) or die("Error, Cannot locate the database!");
$table_name = \'tablename4\'; //with this variable works
$postidl = get_the_ID(); // i\'m outside the loop .. so what?
$sql = "CREATE TABLE $postidl (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(255) DEFAULT NULL,
UNIQUE KEY id (id)
);";
$query = mysql_query($sql);
return $post_id;
}
add_action( \'wp_insert_post\', \'insert_new_table\' );
在我的$sql查询中使用var$table\\u名称,一切都很顺利;但我无法传递当前正在保存的帖子的post\\u id(不知道如何获取!)
有什么提示吗?
最合适的回答,由SO网友:Tom J Nowell 整理而成
你不应该打电话get_the_ID()
在post循环外部,并使用过滤器作为函数参数将post ID传递给您:
function insert_new_table( $post_id ){
So使用
$post_id
添加注释不要使用mysql_connect
etc该扩展已被弃用,默认情况下不再包含在新版本的PHP中。此代码将在PHP 5.5+上失败,如果必须放弃WP API使用PDO或Mysqli,则不必使用全局wpdb对象,您可以创建自己的:$mydb = new wpdb( $dbuser, $dbpassword, $dbname, $dbhost );
您正在远程数据库中为每个帖子创建一个表,其中包含一个名称和一个ID列,这是一种浪费和糟糕的表设计。让一个表包含所有名称,其中包含一个post ID,这不是更有意义吗?为什么它必须在单独的数据库中?如果您的ID更改,会发生什么情况?为什么不使用自定义帖子类型/帖子元/自定义分类法?您是否意识到如果您的数据库位于其他地方,那么会有很大的延迟成本?您的数据在站点移动或导入/导出后将无法保存。请选择一种缩进方法并坚持使用,您的编辑器应该能够自动修复和缩进,而无需您的任何努力,如果没有,您应该找到一种新的方法。我会推荐Sublimitext或PHPStorm,但也有其他的。WordPress标准使用选项卡式缩进,在屏幕上占据4个空格。PSR标准使用4个空格字符
您没有检查草稿和修订