删除一个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();
}
?>
我有以下概念:
我有一个带有自定义字段的前端表单,每次在前端创建 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();
}
?>