正如我在评论中所说,由于这是一个自定义端点,您可以通过主回调取消帖子创建,例如:
\'callback\' => function () {
if ( some condition ) {
// create the post
} else {
// return existing post or something else
}
}
下面是一个示例,其中POST端点创建一个已发布的POST(属于
post
类型),但仅当没有与名为
title
:
注意:注册自定义REST路由时,请使用自己的命名空间(例如。my-namespace/v1
) 而不是wp/v2
.
add_action( \'rest_api_init\', function() {
register_rest_route( \'my-namespace/v1\', \'/foobar\', array(
\'methods\' => \'POST\',
\'callback\' => function ( $request ) {
$posts = get_posts( array(
\'post_type\' => \'post\',
\'title\' => $request[\'title\'],
\'fields\' => \'ids\',
) );
if ( ! empty( $posts ) ) {
return new WP_Error(
\'rest_post_exists\',
\'There is already a post with the same title.\',
array( \'status\' => 400 )
);
}
return wp_insert_post( array(
\'post_type\' => \'post\',
\'post_title\' => $request[\'title\'],
\'post_status\' => \'publish\',
) );
},
\'permission_callback\' => function ( $request ) {
return current_user_can( \'publish_posts\' );
},
\'args\' => array(
\'title\' => array(
\'type\' => \'string\',
\'required\' => true,
\'validate_callback\' => function ( $param, $request ) {
if ( ! preg_match( \'/[a-z0-9]+/\', $param ) ) {
return new WP_Error(
\'rest_invalid_title\',
\'Please enter a valid title for the post.\',
array( \'status\' => 400 )
);
}
return true;
}
),
),
) );
} );
但是,请注意,如果
foobar
实际上是一个自定义帖子类型,那么在注册帖子类型时(请参见
register_post_type()
), 你可以设置
show_in_rest
到
true
然后设置
rest_controller_class
自定义REST控制器类的名称,如
here.