Intereting Posts
Учетный вопрос с активной боковой панелью? Плагин Forum, который позволяет частным группам приглашать только отключить комментарии WordPress от плагина В чем разница между get_home_path () и ABSPATH? Галерея фотографий эскизов Классический, но озадачивающий «Загруженный файл не может быть перемещен» Зацепите в функцию без крючка? Сообщение о проблемах в подкатегории Может кто-нибудь, пожалуйста, скажите мне, что не так с моим плагином? Как переопределить регистрацию WordPress и вставить автоматически сгенерированное имя пользователя? Можете ли вы запускать wordpress с несколькими доменами одновременно (не многосетевыми)? Использовать «архив» как slug для пользовательского типа сообщения Параллельные / одновременные соединения MySQL Слишком много перенаправлений после добавления переадресации SSL на виртуальный хост порта 80 Поле Category Name и Slug должно быть одинаковым, иначе оно разбивает страницы категорий

Извлечение 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 ... }