Wordpress трудности с сохранением wp_term_relationship - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь отладить мой проект Dokan-Woocommerce-Wordpress. По какой-то причине мое insert утверждение не "завершено". Например, кажется, что объект $wpdb выполняет запрос, но результаты не отражаются в содержимом базы данных. Вот как выглядит код моего тестового плагина:

function save_term_john( $post_id )
{

global $wpdb;

$post_id = 380;
$tid = 200;

$sql = "INSERT INTO {$wpdb->prefix}term_relationships (object_id,term_taxonomy_id) SELECT ".intval($post_id).",".intval($tid);
$wpdb->query($sql);
file_put_contents("./testcall.txt",$wpdb->last_query."\n\n",FILE_APPEND | LOCK_EX);
file_put_contents("./testcall.txt",$wpdb->last_error."\n\n",FILE_APPEND | LOCK_EX);

$sql = "UPDATE {$wpdb->prefix}term_relationships SET term_taxonomy_id = ".intval($tid)." WHERE object_id = ".intval($post_id)." AND term_taxonomy_id = ".intval($tid);
$wpdb->query($sql);     
file_put_contents("./testcall.txt",$wpdb->last_query."\n\n",FILE_APPEND | LOCK_EX);
file_put_contents("./testcall.txt",$wpdb->last_error."\n\n",FILE_APPEND | LOCK_EX);


}

add_action( 'save_post', 'save_term_john' );

Я запускаю это, нажимая сохранить продукт в моем проекте dokan-woocommerce-wordpress.

Затем, когда я просматриваю таблицу базы данных wp_term_relationships, запись для object_id:380,taxonomy_term_id:200 не появляется.

My testcall.txt показывает следующие результаты

INSERT INTO wp_term_relationships (object_id,term_taxonomy_id) SELECT 380,200 /* From [john.com/dashboard/products/?product_id=380&action=edit&message=success] in [/1/wp-content/plugins/john/john.php:218] */



UPDATE wp_term_relationships SET term_taxonomy_id = 200 WHERE object_id = 380 AND term_taxonomy_id = 200 /* From [john.com/dashboard/products/?product_id=380&action=edit&message=success] in [/wp-content/plugins/john/john.php:223] */



INSERT INTO wp_term_relationships (object_id,term_taxonomy_id) SELECT 380,200 /* From [john.com/dashboard/products/?product_id=380&action=edit&message=success] in [/wp-content/plugins/john/john.php:218] */

Duplicate entry '380-200' for key 'PRIMARY'

UPDATE wp_term_relationships SET term_taxonomy_id = 200 WHERE object_id = 380 AND term_taxonomy_id = 200 /* From [john.com/dashboard/products/?product_id=380&action=edit&message=success] in [/wp-content/plugins/john/john.php:223] */

Итак, согласно моему testcall.txt, мой save_post хук был запущен дважды? И по какой-то причине мое заявление на вставку не было «выполнено»? И есть сообщение о дублировании записи, хотя я не вижу этот дубликат в моей базе данных?

Когда я беру те же самые запросы из своего testcall.txt и запускаю их непосредственно для базы данных, все работает нормально.

Что я делаю не так? Почему save_term_john не сохраняет запись в базе данных?

EDIT

Подождите ... теперь мне интересно ... это потому, что есть какой-то хук WordPress, который срабатывает дальше по ходу процесса? И этот хук делает что-то вроде сброса всех терминов отношений или что-то странное, подобное Я потерян ...

EDIT

Я обновил код по другому сценарию, который более четко показывает мою проблему. Обратите внимание, что в моих журналах отображается ошибка дублирующегося ключа, хотя я не могу найти эту дублирующую запись в своей базе данных?

EDIT

Когда я изменяю свою функцию на эту, тогда термин появляется, как и ожидалось в таблице wp_terms_relationships.

function save_term_john( $post_id )
{
$post_id = 380;
$tid = 200;
$result = wp_set_object_terms($post_id,$tid,'product_shipping_class',true);
exit;
}

Но проблема в том, что оператор выхода убивает всю страницу. Если я удаляю оператор выхода, то что-то еще вниз по течению заставляет мою вновь сохраненную запись исчезать.

То есть я действительно думаю, что что-то происходит внизу по течению? Как мне тогда программно сохранить новый термин в объекте?

EDIT

Может быть, мне нужно попробовать использовать этот крючок? https://developer.wordpress.org/reference/hooks/set_object_terms/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...