При удалении одного сообщения удалите все соответствующие сообщения. - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть следующая концепция:

У меня есть форма веб-интерфейса с настраиваемым полем, которое сохраняет текущий фрагмент при каждом создании сообщения в веб-интерфейсе.Например:

В сообщении 1 есть слаг = 1234

Когда я нахожусь в сообщении 1 с слагом 1234, я могу создать сообщение 2 с формой для встраивания, и «1234» будет сохранено внастраиваемое поле "custum-id-1" сообщения 2.

теперь при удалении одного из сообщений я хочу получить фрагмент текущего удаленного сообщения и выполнить поиск, если любое другое сообщение имеет имя этого элемента.в качестве значения в поле custom-id-1 и удалите их.Это означает, что если сообщение 1234 было удалено, то сообщение 2 также должно быть удалено, поскольку custom-id-1 сообщения 2 сохранил имя слагаемого сообщения 1.

Как мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Предполагается, что данные хранятся в виде целого числа / строки в сообщении.Вы можете добавить этот код для запроса поста, мета поста которого равна текущему кандидату на удаление, а затем удалить их, повторяя результаты.

<?php
add_action('before_delete_post', 'my_before_delete_post');
function my_before_delete_post($postid)
{
    $args  = array(
        'post_type' => array(
            'post'
        ),
        'meta_query' => array(
            array(
                'key' => 'custum-id-1',
                'value' => get_post_field( 'post_name', $postid )
            )
        )
    );
    // The Query
    $query = new WP_Query($args);
    // The Loop
    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            wp_delete_post(get_the_ID());
        }
    }
    wp_reset_postdata();
}
?>
0 голосов
/ 01 февраля 2019

сначала, в зависимости от того, какую базу данных вы используете, вам нужно указать «каскад удаления» при создании таблицы.

    ex:
    CREATE TABLE supplier
( supplier_id numeric(10) not null,
  supplier_name varchar2(50) not null,
  contact_name varchar2(50),
  CONSTRAINT supplier_pk PRIMARY KEY (supplier_id)
);

CREATE TABLE products
( product_id numeric(10) not null,
  supplier_id numeric(10) not null,
  CONSTRAINT fk_supplier
    FOREIGN KEY (supplier_id)
    REFERENCES supplier(supplier_id)
    ON DELETE CASCADE
);

таблица продуктов связана с таблицей поставщиков с помощью внешнего ключа supplier_id,Если вы удалите запись из таблицы поставщиков, соответствующая запись продуктов с тем же идентификатором поставщика также будет удалена.

ex.
delete from supplier where supplier_id = 1

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

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