删除一个post时,删除所有相关的post

When deleting one post, delete all relevant posts

我有以下概念:

我有一个带有自定义字段的前端表单,每次在前端创建 post 时都会保存当前的 slug。喜欢以下内容:

Post 1 个有 slug="1234"

当我在 Post 1 和 slug 1234 时,我可以使用嵌入表单创建 Post 2,并且“1234”将保存在自定义字段 "custum-id-1" 中 Post 2.

现在删除 Post 中的一个时,我想获取当前已删除 post 的 slug 并搜索是否有另一个 post 具有该 slug 的名称作为值custom-id-1 字段并将它们也删除。这意味着如果 Post 1234 被删除,那么 Post 2 也应该被删除,因为 Post 2 的 custom-id-1 保存了 Post 的 slug 名称一。

我怎样才能做到这一点?

首先,根据您使用的数据库,您需要在创建 table

时指定 "delete cascade"
    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
);

产品 table 使用外键 supplier_id 连接到供应商 table。 如果您删除了供应商table的记录,对应的具有相同supplier_id的产品记录也将被删除。

ex.
delete from supplier where supplier_id = 1

即使您只指定从供应商处删除,相应的产品记录也会自动删除table。

假设数据在post中存储为integer/string。您可以添加此代码以查询 post,其中 post 元等于当前删除候选者,然后通过结果迭代删除它们。

<?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();
}
?>