add_action для publish_post не работает

Я работаю над личным плагином для голосования, я не собираюсь публиковать его публично, потому что я все еще изучаю WP.

В общем, вы можете голосовать за сообщения «вверх» или «вниз». У меня есть 2 таблицы, один собирает IP-адреса (чтобы запретить голосование несколько раз), а другая таблица с именем «post_votes» собирает количество голосов за каждое сообщение.

Когда я публикую новое сообщение, его идентификатор хранится в «post_votes», и я могу обновить «вверх», «вниз» для каждого сообщения, когда люди голосуют. Это сработало несколько дней назад. Я сделал некоторые изменения, и я не могу понять, почему он больше не работает.

Это весь код до сих пор. Мне все еще нужно выполнить некоторые меры предосторожности.

<?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 ?> 

Он успешно создает 2 таблицы, но не вставляет идентификатор сообщения в действие

Не обижайтесь, но я думаю, что согласен с комментатором из вашего другого вопроса … Вам действительно нужно прочитать учебники по 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_ID до (int) заранее …

Это также помогает var_dump (), если вы не используете отладчик PHP. например, в вызове add_votes (), как насчет этого, чтобы увидеть, что происходит ?:

 var_dump($post_ID);die;