Intereting Posts
Установка wordpress с использованием композитора на определенном языке «Отправить для обзора» для обновления существующих сообщений локализовать элементы в базе данных Получить список всех зарегистрированных боковых панелей dbDelta не устанавливает базу данных Медиа-библиотека. Ограничение изображений для пользовательских типов сообщений. Как WordPress получает URL-адрес обновления? Различные стили сообщений в зависимости от категории Фильтр поиска и сортировка по пользовательскому типу сообщения Разница между архивом и страницами с перечислением страниц Обновление плагинов запрашивает информацию о FTP, почему? (это новый) Нарушения рамок Genesis нарушены? Как добавить фильтр-фильтр в медиа-библиотеку? On Multisite: Loop для отображения первых четырех изображений последних сообщений по всей сети Как я могу создать копию моего сайта в подкаталоге для тестирования темы?

Идентификаторы сообщений, отсутствующие в действительном крючке delete_postmeta

Я использую метаданные на страницах для хранения переменных и кеширования на стороне сервера для динамически созданных кнопок PayPal и других переменных о страницах (для конкретной страницы).

Я пытаюсь подключить обновления метаданных страницы, добавлять и удалять функции. Обновление и добавление прекрасно работают (оба с одинаковой функцией), но я не могу распознать удаление.

Для использования delete_post_data мне нужен post_id но do_action не возвращает это (по крайней мере, то, что я могу понять) из исходного кода WordPress, похоже, возвращает это:

 do_action( 'delete_postmeta', $postmetaids ); //sometimes $post_meta_ids 

где

 $postmetaids = $wpdb->get_col( $wpdb->prepare( "SELECT meta_id FROM $wpdb->postmeta WHERE meta_key = %s", $post_meta_key ) ); 

или

 $post_meta_ids = $wpdb->get_col( $wpdb->prepare( "SELECT meta_id FROM $wpdb->postmeta WHERE post_id = %d ", $postid )); 

Код, который я использую, чтобы вызвать крючки:

 add_action ('update_postmeta', 'wp_paypal_meta_change',1,4); add_action ('add_postmeta', 'wp_paypal_meta_change', 1, 4); add_action ('delete_postmeta','wp_paypal_meta_delete', 1, 2); 

Функция удаления:

 function wp_paypal_meta_delete($post_id, $meta_keys){ /* handles cases where the user intentionally deletes the metadata, and deletes the appropriate hidden metadata variable in order to make sure the cached PayPal form matches the product data. */ if ($meta_keys == 'image'){ delete_post_meta($post_id,'_thumb'); } else if ($meta_keys == 'shipping' || $meta_keys == 'cost' || $meta_keys== 'bookname'){ delete_post_meta($post_id,'_paypal'); } } 

Я знаю, что $post_id не $post_id в функцию, но он там, потому что я надеялся, что WordPress каким-то образом ссылается на него – не работает.

Solutions Collecting From Web of "Идентификаторы сообщений, отсутствующие в действительном крючке delete_postmeta"

Из файла OPs перешел на ответ.

Я нашел ответ, также не прямой путь, я уверен, что есть лучший способ сделать это. в основном я использую небольшой вспомогательный метод, который запрашивает SQL с помощью meta_id и возвращает post_id :

 <?php function get_key_by_id( $meta_ids ) { global $wpdb; $meta_ids = absint( $meta_ids ); // Debugging: // $wpdb->show_errors(); $meta_keys = $wpdb->get_var( $wpdb->prepare( " SELECT meta_key FROM {$wpdb->postmeta} WHERE meta_id = %d " ,$meta_ids ) ); // Debugging: // $wpdb->print_error(); if ( $meta_keys ) return $meta_keys; // else: return false; }