将经过预清理的附件文件名保存为标题或标题

时间:2016-09-23 作者:Tom G

我已经尝试了一些搜索,但到目前为止还没有找到比这更好的。我有一个客户,他必须将大量图像上传到图库中,为了节省时间,他在Photoshop中将标题保存为文件名。就个人而言,我更愿意在WP内完成,但这是他的工作流程,不会改变!

有没有办法获取经过预清理的文件名并将其保存为元数据?

我已经看过了wp_handle_upload_prefilter 但从我所看到的情况来看,这并不正确。

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

不幸地wp_handle_upload_prefilter 挂钩尚未识别附件ID。太早了,运行预清理的文件名(在移动附件并将其存储为帖子之前)

逻辑上,你能做的就是使用这个钩子wp_handle_upload_prefilter 但是,应该存储一个包含经过预清理的文件名的寿命很短的瞬态。

添加附件后,我们可以使用add_attachment() 钩您可以使用存储的瞬时值更新附件标题、标题或任何其他元数据。

最后,您将删除瞬态。

我确实测试了这个方法,并且似乎在本地主机安装上进行了多附件和单附件上传。

好的,这就是如何使用代码来完成它。

挂接wp\\u handle\\u upload\\u prefilter并将预清理的文件名(无扩展名)存储为WordPress瞬态,使用set_transient

add_action( \'wp_handle_upload_prefilter\', \'_remember_presanitized_filename\' );
function _remember_presanitized_filename( $file ) {
    $file_parts = pathinfo( $file[\'name\'] );
    set_transient( \'_set_attachment_title\', $file_parts[\'filename\'], 30 );
    return $file;
}
捕获瞬态选项以更新添加的附件
add_action( \'add_attachment\', \'_set_attachment_title\' );
function _set_attachment_title( $attachment_id ) {
    $title = get_transient( \'_set_attachment_title\' );
    if ( $title ) {

        // to update attachment title and caption
        wp_update_post( array( \'ID\' => $attachment_id, \'post_title\' => $title, \'post_excerpt\' => $title ) );

        // to update other metadata
        update_post_meta( $attachment_id, \'_wp_attachment_image_alt\', $title );

        // delete the transient for this upload
        delete_transient( \'_set_attachment_title\' );
    }
}

相关推荐

媒体未显示在WordPress库中,但在Uploads文件夹中可用

我正在尝试将我的网站从共享主机迁移到数字海洋。我上传了wp的内容,我的网站已经有3年多的历史了。现在,当我在仪表板上查看媒体时。文件未显示。理想情况下,所有月份都应该可见,但正如您在图像中所看到的,只显示选定的月份数。如何让Wordpress显示所有月份和图像?