Php 如果wp\U insert\U post\U数据的条件为真,则Wordpress阻止保存post
我有一个自定义插件,它使用自定义字段创建帖子(这些自定义字段将保存为metas) 问题是当这些自定义元值对于另一篇文章完全相同时。 任务是抛出错误消息,而不是保存帖子。 到目前为止,我使用wp_insert_post_数据来触发我的函数,该函数检查antoher post是否已经存在这个元数据组合Php 如果wp\U insert\U post\U数据的条件为真,则Wordpress阻止保存post,php,wordpress,post,hook,Php,Wordpress,Post,Hook,我有一个自定义插件,它使用自定义字段创建帖子(这些自定义字段将保存为metas) 问题是当这些自定义元值对于另一篇文章完全相同时。 任务是抛出错误消息,而不是保存帖子。 到目前为止,我使用wp_insert_post_数据来触发我的函数,该函数检查antoher post是否已经存在这个元数据组合 add_filter( 'wp_insert_post_data' , 'check_duplicate_relation' , '99', 2 ); 我的问题是:如何阻止创建帖子?我试图返回arr
add_filter( 'wp_insert_post_data' , 'check_duplicate_relation' , '99', 2 );
我的问题是:如何阻止创建帖子?我试图返回array(),返回false,但仍然使用最少的必需值创建了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\u insert\u post\u empty\u内容
。如果返回的值计算结果为true,则将阻止保存帖子 请参阅筛选器wp\u insert\u post\u empty\u content
。如果返回的值计算结果为true,则将阻止保存帖子 我编辑了我的答案,在应该返回错误的那一行,我应该叫什么?应用\u筛选器('wp\u insert\u post\u empty\u content'…或添加\u筛选器?我想我尝试了这两种方法,但都不起作用。您将希望使用添加\u筛选器('wp\u insert\u post\u empty\u content'、'your\u function\u name',10,2)
,来注册您的筛选器函数,优先级可能不同于10。“2”参数很重要,因为它只会以其他方式将第一个参数传递给函数。第一个变量是在返回为true时停止后期创建的变量。第二个变量是后期数据。我使用了以下代码行:add_filter('wp_insert_post_empty_content','check_duplicate_relation','10',2);如果我的函数check_duplicate_relation返回true…它应该会触发此空内容错误,对吗?是的,文档解释“将truthy值返回到筛选器将有效地缩短插入的新帖子”但事实并非如此。我不知道……也许我做错了什么……我只是不知道是什么。我编辑了我的答案,在应该返回错误的那一行,我应该调用什么?应用\u过滤器('wp\u insert\u post\u empty\u content'…或添加\u过滤器?我想我尝试了这两种方法,但都不起作用。您将希望使用add\u过滤器('wp\u insert\u post\u empty\u content'、'your\u function\u name',10,2)
,以注册您的筛选函数,其优先级可能不同于10。“2”参数很重要,因为它只会以其他方式将第一个参数传递给函数。第一个变量是在返回为true时停止后期创建的变量。第二个变量是后期数据。我使用了以下代码行:add_filter('wp_insert_post_empty_content','check_duplicate_relation','10',2);如果我的函数check _duplicate _relation返回true…它应该会触发这个空内容错误,对吗?是的,文档解释了“将truthy值返回到过滤器将有效地短路插入的新帖子”,但它没有。我不知道…也许我做错了什么…我只是不知道是什么原因。