2016-08-26 7 views
1

Я пытаюсь разместить запись о новом опубликованном сообщении в отдельной таблице db в стороне от обычного процесса, после которого публикуется сообщение.Как и где вы могли бы добавить пользовательский запрос INSERT MySQL в другую таблицу для публикации нового сообщения в WordPress?

Я пытался идти в post.php в моей wp-includes папки, и добавление запроса внутри function wp_insert_post(), но это добавляет записи для Auto Drafts и каждый раз, когда обновление будет сделано.

Я также попытался включить мой оператор insert в функции function wp_publish_post() этого же файла. Это ничего не делает.

Есть ли какая-либо конкретная деталь в любой из этих функций или, возможно, в другом файле, в который я должен помещать свой оператор INSERT, чтобы добавить запись каждый раз, когда публикуется новое сообщение?

+0

https://codex.wordpress.org/Plugin_API#Hook_to_WordPress –

+0

Как отметил Марк B, вы должны попробовать с крючками, это оптимальное решение для того, что вы пытаетесь достичь. Создайте собственный плагин и используйте нужные вам крючки. – Marcs

+0

, если вы хотите вставлять или обновлять что-либо во время вставки или обновления сообщения, тогда вам не нужно вносить изменения в свой базовый файл, вместо этого используйте перехватчики Wordpress. Я думаю, что ссылка на форум поможет вам https://developer.wordpress.org/reference/functions/wp_insert_post. –

ответ

1

Перейдите к своему post.php файлам, расположенным в папке wp-includes.

Найти wp_insert_post() и использовать этот код непосредственно перед оператором return как ваш SQL-запрос.

if ($postarr['post_status'] == 'publish') { 

    try { 
     $db = new PDO('mysql:dbname=YOURDBNAME;host=YOURHOST;charset=utf8', 
         'YOURUSERNAME', 
         'YOURPASSWORD'); 
     $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT); 
     $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
    } 
    catch(PDOException $ex) { 
     echo "did not connect..."; 
    } 

    $sth = $db->prepare("INSERT INTO YourTable VALUES (?, ?, 0)"); 
    $sth->execute(array($value1, $value2)); 

}