javascript 将API响应中的内容添加到新图像上传

ogq8wdun  于 2023-04-28  发布在  Java
关注(0)|答案(2)|浏览(111)

我正在尝试使用Astica API来获取新附件上传的内容。虽然我在WordPress之外使用API没有问题,但我似乎无法让它在WordPress内部工作。

意向:

1.上传新附件图片时触发功能
1.将$image_url发送到API
1.从响应中提取“caption〉text”
1.将文本添加到post_content字段。
Astica documentation

功能:

function cwpai_add_content_to_new_attachment( $attachment_id ) {
    // Get the attachment post object
    $attachment = get_post( $attachment_id );
    $image_url = wp_get_attachment_url( $attachment_id );
    
    // Make sure the attachment is an image
    if ( 'image' === substr( $attachment->post_mime_type, 0, 5 ) ) {
        // Get the current content of the attachment
        $content = $attachment->post_content;
        
        // Add image URL to the caption
        $new_content = $content ? "{$content}<br>{$image_url}" : $image_url;
        
        // Update the attachment post with the new content
       
        
        //Add Astica API script
        wp_enqueue_script( 'asticaAPI', 'https://www.astica.org/endpoint/ml/javascript/2023-04-10/astica.core.js' );
        
        //Add custom script
        wp_add_inline_script( 'asticaAPI', '
            function your_astica_CallBack(data) {   
                if(typeof data.error != "undefined") { alert(data.error); }         
                console.log(data); //view all data
                //Update the attachment post with the Astica response
                wp_update_post( array(
                    "ID" => '.$attachment_id.',
                    "post_content" => json_encode(data)
                ) );
            }
            asticaAPI_start("KEY");

            asticaVision(
                "2.0_full", //modelVersion: 1.0_full, 2.0_full
                "'.$image_url.'", //Input Image
                "description, tags,", //or "all"
                your_astica_CallBack, //Your Custom Callback function
            ); 
           
        ' );
    }
}
add_action( 'add_attachment', 'cwpai_add_content_to_new_attachment' )

在WordPress内部和外部进行测试,尝试使用rest API,但没有运气。也试着用jQuery加载它,没有冲突。我也想不通。

klsxnrf1

klsxnrf11#

wp_add_inline_script是注入JavaScript代码,其中wp_update_post是PHP函数。你不能在JavaScript代码中调用PHP函数以供用户执行。

jhkqcmku

jhkqcmku2#

代码中有几个问题可能是导致此问题的原因。首先,您需要在HTML的head部分包含Astica API脚本,而不是使用wp_enqueue_script()wp_add_inline_script()。您可以通过将以下代码添加到主题的header.php文件中来完成此操作:

<head>
    <script src="https://www.astica.org/endpoint/ml/javascript/2023-04-10/astica.core.js"></script>
</head>

接下来,需要修改your_astica_CallBack函数,以便从响应中提取标题文本并更新帖子内容。假设响应是JSON格式的,并且包含一个caption字段,你可以修改函数如下:

function your_astica_CallBack(data) {   
    if(typeof data.error != "undefined") { 
        alert(data.error); 
    }         
    console.log(data); //view all data

    // Extract the caption text from the response
    var caption = data.caption.text;

    // Update the attachment post with the Astica response
    wp_update_post( array(
        "ID" => '.$attachment_id.',
        "post_content" => caption
    ) );
}

最后,您需要更新wp_update_post()函数以仅更新post content字段并删除json_encode()函数,因为标题文本已经是字符串:

wp_update_post( array(
    "ID" => '.$attachment_id.',
    "post_content" => $new_content
) );

通过这些更改,函数应该可以按预期工作,并将Astica生成的标题文本添加到附件帖子的帖子内容字段。

相关问题