PUBLISH_POST的添加操作不起作用

时间:2010-11-20 作者:at least three characters

我正在开发一个个人投票插件,我不打算公开发布它,因为我还在学习WP。

一般来说,你可以投票给帖子“向上”或“向下”。我有两个表,一个收集IP(不允许多次投票),另一个名为“post\\u votes”的表收集每个帖子的投票数。

当我发布一篇新帖子时,它的ID存储在“post\\u votes”中,我可以在人们投票时更新每个帖子的“up”、“down”。这在几天前奏效了。我做了一些修改,但我不明白为什么它不再工作了。。

这是目前为止的全部代码。。我仍然需要实施一些安全预防措施。

<?php
/*
Plugin Name: Vote Posts
*/

global $vote_posts_version;
$vote_posts_version = "1.0";

function vote_posts_install () {

   global $wpdb;
   global $vote_posts_version;

   $table_1 = $wpdb->prefix . "voter_ips";
   $table_2 = $wpdb->prefix . "vote_posts"; 

   if($wpdb->get_var("SHOW TABLES LIKE \'$table_1 AND $table_2\'") != $table_1 && $table_2) {

      $sql = "CREATE TABLE " . $table_1 . " (
      id bigint(20) NOT NULL AUTO_INCREMENT,
      vote_post_id bigint(20) NOT NULL,
      voter_ip varchar(100) NOT NULL,
      UNIQUE KEY id (id)
      );";

       $sql2 = "CREATE TABLE " . $table_2 . " (
      id bigint(20) NOT NULL AUTO_INCREMENT,
      vote_post_id bigint(20) NOT NULL,
      up int(11) NOT NULL,
      down int(11) NOT NULL,
      UNIQUE KEY id (id)
      );";

      require_once(ABSPATH . \'wp-admin/includes/upgrade.php\');
      dbDelta($sql);
      dbDelta($sql2);

      add_option("vote_posts_version", $vote_posts_version);
   }        
}

register_activation_hook(__FILE__,\'vote_posts_install\');


//add and delete votes

function add_votes($post_ID)  {
global $wpdb;
   if (!($wpdb->get_row("SELECT vote_post_id FROM wp_vote_posts WHERE vote_post_id = $post_ID" ) ) ) { //if not exists add post ID to table
      $wpdb->insert( $wpdb->prefix . \'vote_posts\', array( \'post_id\' => $post_ID ) );
      return $post_ID;
   }
}
add_action ( \'publish_post\', \'add_votes\' ); //should trigger function on publish post

function delete_votes($post_ID)  {
    global $wpdb;
    $wpdb->query("DELETE FROM wp_vote_posts WHERE vote_post_id = $post_ID");
    return $post_ID;
}
add_action ( \'delete_post\', \'delete_votes\' ); //deletes row from post_votes table when a post is deleted from the WP panel

?>
它成功创建了这两个表,但没有在操作中插入post ID

1 个回复
最合适的回答,由SO网友:Denis de Bernardy 整理而成

无意冒犯,但我想我同意你另一个问题的评论。。。在学习这些之前,您确实需要阅读PHP、MySQL和正则表达式教程。更重要的是,您需要学习如何在您喜爱的编辑器中使用正则表达式搜索代码库,并理解您正在阅读的代码。

仅举几个例子,如下所示:

SHOW TABLES LIKE \'$table_1 AND $table_2\'
正在查找名为:

$wpdb->prefix . "voter_ips AND " . $wpdb->prefix . "vote_posts"
糟糕,糟糕,糟糕。。。

同样,虽然您的表都有一个非空的唯一键,从技术上讲,这相当于主键,但MySQL重写引擎和优化器并没有将它们视为主键,因此您应该将其声明为主键。

然后,存在潜在的安全漏洞:

SELECT vote_post_id FROM wp_vote_posts WHERE vote_post_id = $post_ID
。。。无需事先将$post\\u ID转换为(int)。。。

如果您没有使用PHP调试器,那么var\\u dump()内容也会有所帮助。e、 g.在您的add\\u voates()调用中,看看发生了什么,怎么样

var_dump($post_ID);die;

结束