我正在尝试使用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加载它,没有冲突。我也想不通。
2条答案
按热度按时间klsxnrf11#
wp_add_inline_script
是注入JavaScript代码,其中wp_update_post
是PHP函数。你不能在JavaScript代码中调用PHP函数以供用户执行。jhkqcmku2#
代码中有几个问题可能是导致此问题的原因。首先,您需要在HTML的head部分包含Astica API脚本,而不是使用
wp_enqueue_script()
和wp_add_inline_script()
。您可以通过将以下代码添加到主题的header.php
文件中来完成此操作:接下来,需要修改
your_astica_CallBack
函数,以便从响应中提取标题文本并更新帖子内容。假设响应是JSON格式的,并且包含一个caption
字段,你可以修改函数如下:最后,您需要更新
wp_update_post()
函数以仅更新post content字段并删除json_encode()
函数,因为标题文本已经是字符串:通过这些更改,函数应该可以按预期工作,并将Astica生成的标题文本添加到附件帖子的帖子内容字段。