如果 wp_insert_post_data 条件为真,Wordpress 会阻止 post 被保存
Wordpress prevent post to be saved if condition is true with wp_insert_post_data
我有一个使用自定义字段创建 post 的自定义插件(这些自定义字段将保存为元数据)。
问题是当这些自定义元值与另一个 post 完全相同时。
任务是抛出错误信息而不是保存 post。
到目前为止,我使用 wp_insert_post_data 来触发我的函数,该函数检查这个元值组合是否已经存在于 antoher post.
add_filter( 'wp_insert_post_data' , 'check_duplicate_relation' , '99', 2 );
我的问题是:如何阻止创建 post?我尝试 return array(), return false,但是 post 仍然是用最少的必需值创建的。我知道我的函数应该 return 更改数据,但我尝试以某种方式触发错误消息并且不会创建 post。
知道我该怎么做吗?...或者我应该使用什么钩子?据我搜索,这是应该使用的。
谢谢。
更新:
这是我的功能:
我应该去哪里做什么?
function check_duplicate_relation($data , $postData ) {
if($data['post_type'] == 'bpp_relation' && $data['post_status'] != 'auto-draft') {
if(isset($postData['fields']) && !empty($postData['fields'])) {
$bonusProgramId = intval(array_values($postData['fields'])[0]);
$companyId = intval(array_values($postData['fields'])[1]);
if($bonusProgramId && $bonusProgramId > 1 && $companyId && $companyId > 1) {
$args = array(
'posts_per_page' => 2,
'post_type' => 'bpp_relation',
'meta_query' => array(
array(
'key' => 'company',
'value' => $companyId,
'compare' => '=',
),
array(
'key' => 'bonus_program',
'value' => $bonusProgramId,
'compare' => '=',
)
)
);
$relation = get_posts( $args );
if(empty($relation)) {
return $data;
} else {
// here the error should be returned
}
}
}
}
return $data;
}
查看过滤器 wp_insert_post_empty_content
。如果您 return 一个评估为 true 的值,则 post 将被阻止保存。 See in WordPress source.
我有一个使用自定义字段创建 post 的自定义插件(这些自定义字段将保存为元数据)。
问题是当这些自定义元值与另一个 post 完全相同时。 任务是抛出错误信息而不是保存 post。 到目前为止,我使用 wp_insert_post_data 来触发我的函数,该函数检查这个元值组合是否已经存在于 antoher post.
add_filter( 'wp_insert_post_data' , 'check_duplicate_relation' , '99', 2 );
我的问题是:如何阻止创建 post?我尝试 return array(), return false,但是 post 仍然是用最少的必需值创建的。我知道我的函数应该 return 更改数据,但我尝试以某种方式触发错误消息并且不会创建 post。
知道我该怎么做吗?...或者我应该使用什么钩子?据我搜索,这是应该使用的。
谢谢。
更新: 这是我的功能: 我应该去哪里做什么?
function check_duplicate_relation($data , $postData ) {
if($data['post_type'] == 'bpp_relation' && $data['post_status'] != 'auto-draft') {
if(isset($postData['fields']) && !empty($postData['fields'])) {
$bonusProgramId = intval(array_values($postData['fields'])[0]);
$companyId = intval(array_values($postData['fields'])[1]);
if($bonusProgramId && $bonusProgramId > 1 && $companyId && $companyId > 1) {
$args = array(
'posts_per_page' => 2,
'post_type' => 'bpp_relation',
'meta_query' => array(
array(
'key' => 'company',
'value' => $companyId,
'compare' => '=',
),
array(
'key' => 'bonus_program',
'value' => $bonusProgramId,
'compare' => '=',
)
)
);
$relation = get_posts( $args );
if(empty($relation)) {
return $data;
} else {
// here the error should be returned
}
}
}
}
return $data;
}
查看过滤器 wp_insert_post_empty_content
。如果您 return 一个评估为 true 的值,则 post 将被阻止保存。 See in WordPress source.