我正在尝试使用插件来阅读附件的帖子元数据,并使用它来更新附加到的帖子的内容。我在我的主题function.php中使用以下内容:
add_action( 'afip_created_post', 'get_desc', 10, 2 );
function get_desc( $post_id, $attachment_id ) {
$postmeta = get_post_meta ($attachment_id, '_wp_attachment_metadata', true);
$meta = $postmeta['image_meta'];
$mmwwdesc = $meta['description'];
wp_update_post( array( 'ID' => $post_id, 'post_content' => $mmwwdesc ) );
}
然后在插件中使用此行来挂钩函数
do_action( 'afip_created_post', $new_post_id, $post_id );
如果我使用另一个帖子中的数字填写变量“$ attachment_id”,即“15”,我会将说明插入已发布的帖子中。如果我将输出更改为wp_update_post( array( 'ID' => $post_id, 'post_content' => $attachment_id ) );
,我会在已发布帖子的正文中回显id号。我不明白为什么原始代码不起作用,因为$ attachment_id似乎是正确定义的。我只是一个php的初学者。有什么明显的东西我做错了吗?变量$attachment_id
在应该返回时是否被回应,或类似的技术?
背景:我正在使用两个wordpress插件,一个名为Media Metadata Workflow Wizard(MMWW),另一个名为Automatic Featured Image Post(AFIP)。 MMWW提取图像元数据并将其作为post meta写入数据库。 AFIP使用上传的媒体创建新帖子,并将每个图像附加到帖子,将其设置为帖子缩略图。我不认为在调用函数时元数据没有准备就绪,因为AFIP在上传媒体后创建帖子,并将其元数据写入数据库。在创建帖子后,我也将我的功能挂钩作为帖子的更新。
我做了大量的搜索,试验并没有成功。有人可以帮帮我吗?
谢谢!
答案 0 :(得分:1)
我认为你的问题是get_post_meta函数在functions.php中返回空白。处理此问题的方法是使用带有wordpress的MYSQL查询来返回psot元数据中的数据。
首先你需要全局$ wpdb对象,所以在函数开头写:global $wpdb;
然后你需要使用mysql和$ wpdb对象执行get_post_meta操作:
$postmeta = $wpdb->get_var("SELECT meta_value FROM $wpdb->postmeta" WHERE meta_key = '_wp_attachment_metadata' AND post_id = $attachment_id");
用wpdb查询替换你的get_post_meta行,你应该没问题。