1

我正在尝试获取一个插件来读取附件的帖子元数据,并使用它来更新它所附加的帖子的内容。我在我的主题 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 );

如果我用另一个帖子中的数字(即“15”)填写变量“$attachment_id”,我会将描述插入到已发布的帖子中。如果我将输出更改为,wp_update_post( array( 'ID' => $post_id, 'post_content' => $attachment_id ) );我会在已发布帖子的正文中得到回显的 id 号。我不明白为什么原始代码不起作用,因为 $attachment_id 似乎已正确定义。我只是 php 的初学者。有什么明显的我做错了吗?变量$attachment_id应该在返回时被回显,还是类似的技术?

背景:我正在使用两个 wordpress 插件,一个称为媒体元数据工作流向导 (MMWW),另一个称为自动特色图像发布 (AFIP)。MMWW 提取图像元数据并将其作为后期元数据写入数据库。AFIP 使用上传的媒体创建新帖子,并将每个图像附加到帖子,将其设置为帖子缩略图。我不认为这是调用函数时元数据未准备好的问题,因为 AFIP 在媒体上传后创建帖子,并将其元数据写入数据库。在它已经创建之后,我还将我的功能作为帖子的更新挂钩。

我进行了广泛的搜索,反复试验,但没有成功。有人可以帮帮我吗?

谢谢!

4

1 回答 1

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 行,你应该没问题。

于 2013-07-25T08:43:41.170 回答