Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果wp\U insert\U post\U数据的条件为真,则Wordpress阻止保存post_Php_Wordpress_Post_Hook - Fatal编程技术网

Php 如果wp\U insert\U post\U数据的条件为真,则Wordpress阻止保存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

我有一个自定义插件,它使用自定义字段创建帖子(这些自定义字段将保存为metas)

问题是当这些自定义元值对于另一篇文章完全相同时。 任务是抛出错误消息,而不是保存帖子。 到目前为止,我使用wp_insert_post_数据来触发我的函数,该函数检查antoher post是否已经存在这个元数据组合

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值返回到过滤器将有效地短路插入的新帖子”,但它没有。我不知道…也许我做错了什么…我只是不知道是什么原因。