Извлечение post_id через действие wp_insert_post (внешний запрос db)

Я пишу небольшой плагин действий. каждый раз, когда создается новое сообщение, во внешнем db должна создаваться новая таблица. Название таблицы sholud отражает post_id вновь созданного сообщения, но я не могу понять, как его передать.

Вот мой код до сих пор (для php purists, простите меня за использование старого mysql_connect (но добавив флаг TRUE к параметру new_link, мне не нужно беспокоиться о глобальных параметрах wpdb и т. Д.),

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' ); 

все идет гладко, используя var $ table_name в моем запросе sql sql; но я не могу передать post_id сообщения, которое в настоящее время сохраняется (не знаю, как его получить!)

Любой намек?

Solutions Collecting From Web of "Извлечение post_id через действие wp_insert_post (внешний запрос db)"

Вы не должны вызывать get_the_ID() вне цикла post, а идентификатор сообщения передается вам с использованием фильтра в качестве аргумента функции:

 function insert_new_table( $post_id ){ 

Поэтому используйте $post_id

Добавленные заметки

  • Не используйте mysql_connect т. Д., Это расширение устарело и больше не включено по умолчанию в более новые версии PHP. Этот код не будет работать на PHP 5.5+, если вы должны отказаться от WP API, используйте PDO или Mysqli
  • Вам не нужно использовать глобальный объект wpdb, вы можете создать свой собственный: $mydb = new wpdb( $dbuser, $dbpassword, $dbname, $dbhost );
  • Вы создаете таблицу для каждого сообщения в удаленной базе данных с именем и столбцом идентификатора, это расточительный и плохой дизайн таблицы. Разве не имеет смысла иметь единую таблицу, содержащую все имена с идентификатором сообщения? Почему он должен быть в отдельной базе данных? Что произойдет, если ваши идентификаторы меняются? Почему бы не использовать пользовательские типы сообщений / почтовые мета / пользовательские таксономии? Вы понимаете, что будет значительная латентная стоимость, если ваша база данных находится в другом месте? Ваши данные не смогут пережить перемещение сайта или импорт / экспорт
  • Выберите метод отступов и придерживайтесь его, ваш редактор должен быть способен автоматически исправлять и отступать без каких-либо усилий от вас, если нет, вы должны найти новый. Я бы порекомендовал sublimetext или PHPStorm, но другие существуют. Стандарты WordPress используют вкладку с отступом, занимающую 4 пробела на экране. Стандарты PSR используют 4 пробела.
  • Вы не проверяете проекты и изменения

Крючок вызывается с идентификатором post в качестве первого (и единственного) аргумента, вам не нужно его извлекать / извлекать, он отправляется в вашу функцию:

 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 ... }