错误REST API的参数无效

时间:2020-10-08 作者:AAA

试图使用Wordpress API创建带有标记/类别等的博客文章,但遇到了一些错误。我正在Wordpress实例外部运行下面的PHP代码,并获得以下信息:

代码

function CreatePost($title, $content, $tag){
    $username = \'username\';
    $password = \'password\';
    $category = \'test category words name test\';
    $rest_api_url = "https://www.urlurlurlurl.com/wp-json/wp/v2/posts";

$data_string = json_encode([
    \'title\'    => $title,
    \'content\'  => $content,
    \'status\'   => \'publish\',
    \'tags\' => \'test tag\',
    \'category\' => $category
]);


$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $rest_api_url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);

curl_setopt($ch, CURLOPT_HTTPHEADER, [
    \'Content-Type: application/json\',
    \'Content-Length: \' . strlen($data_string),
    \'Authorization: Basic \' . base64_encode($username . \':\' . $password),
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$result = curl_exec($ch);
echo $result;
curl_close($ch);
}
错误

{"code":"rest_invalid_param","message":"Invalid parameter(s): tags","data":{"status":400,"params":{"tags":"tags[0] is not of type integer."}}}

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

有问题的错误-“无效参数:标记;和标记[0]为not of type integer.“;,意味着您需要提供标记ID列表,而不是名称或段塞。例如,\'tags\' => 123\'tags\' => [ 123 ] 都是有效的。(也接受逗号分隔列表,例如。\'tags\' => \'123,4,5\'.)

所有这些也适用于默认值category 分类法和自定义分类法(例如。my_tax), 除了category, 您应该使用categories 而不是category. 例如,使用\'categories\' => 5 而不是\'category\' => 5.

根据您的评论:

有没有办法让我总是用名字而不是ID?

您可以尝试其中一种(或两种都用于测试…):

您可以首先使用REST API创建标记/类别(例如。/wp/v2/categories ,并从API响应中获取标记/类别ID,然后在创建帖子时使用它。

因此,您将发出两个REST API请求,一个用于创建标记/类别,另一个用于创建帖子。

在WordPress网站上,您可以register custom REST API fields 喜欢tags_namecategories_slug:

// In your theme functions.php file:

add_action( \'rest_api_init\', \'my_register_rest_fields\' );
function my_register_rest_fields() {
    register_rest_field( \'post\', \'tags_name\', [
        \'update_callback\' => function ( $names, $post ) {
            return wp_set_post_tags( $post->ID, $names );
        }
    ] );

    register_rest_field( \'post\', \'categories_slug\', [
        \'update_callback\' => function ( $slugs, $post ) {
            $ids = [];

            foreach ( wp_parse_list( $slugs ) as $slug ) {
                if ( $category = get_category_by_slug( $slug ) ) {
                    $ids[] = $category->term_id;
                }
            }

            return ( ! empty( $ids ) ) ?
                wp_set_post_categories( $post->ID, $ids ) : false;
        }
    ] );
}
然后,在创建帖子时,在API请求正文/数据中,使用\'categories_slug\' => \'cat-one, cat-two, etc\' 对于类别,以及\'tags_name\' => \'one, two, etc\' 用于标记。请记住,对于类别,您需要使用类别而不是名称。