通过wp_INSERT_POST操作提取post_id(外部数据库查询)

时间:2014-05-12 作者:urka_mazurka

我正在写一个小动作插件。每次创建新帖子时,都应该在外部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(不知道如何获取!)

有什么提示吗?

2 个回复
最合适的回答,由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 );
  • 您没有检查草稿和修订

  • SO网友:totels

    使用post ID作为第一个(也是唯一一个)参数调用挂钩,您不需要获取/检索它,它将被发送到您的函数:

    function insert_new_table( $post_id ) {
      //                 here  ^^^^^^^^
      # ... your code ...
      $sql = "CREATE TABLE {$post_id} (
        id int(11) NOT NULL AUTO_INCREMENT,
        name varchar(255) DEFAULT NULL,
        UNIQUE KEY id (id)
      );";
      # ... more of your code ...
    }
    

    结束

    相关推荐

    $wpdb准备MySQL DATE_FORMAT问题

    今天,我有一个关于wpdb美元的问题。我用过$result = $wpdb->get_var( $wpdb->prepare( \"SELECT DATE_FORMAT(report_date, \'%d-%m-%Y\') FROM table WHERE report_id = %d\", $report_id ) ); 上述代码不起作用,因为%d为DATE\\u格式。我是如何在wordpress中解决这个问题