web-dev-qa-db-ja.com

IPTCキーワードをブログ投稿タグに変換

私はWPやコーディング、あるいはそのようなことに関して全く初心者ですが、私は少し読むことで物事を成し遂げることができます。そのメディアファイルに添付されているIPTC抽出キーワードをブログ投稿タグに変換する方法が必要です。

これが私のワークフローです - 私は画像をアップロードします、画像は特集画像として投稿に添付されます、それは透かし入れされます、それは元のサイズへのリンクを持っています。画像自体にはキーワード、名前、説明などがあります。

すべて自動化されています。メディアアップローダを使ってアップロードしてください。メディアファイルのキーワードをメディアページからそのブログ投稿タグにコピーする必要があることを除いて、上記のすべてが自動操縦で行われます。

ブログ投稿タグに自分自身を自動的に追加するために、投稿に添付された画像からキーワードを割り当てることができる方法はありますか?

3

WordPresは画像からIPTC情報を抽出する機能を持っています、その機能はwp_read_image_metadataです。その機能は管理者側でのみ利用可能で、 コーデックス に従って、IPTCキーワードを抽出しません。しかし、あなたは自分でIPTCキーワードを抽出してそれらをpostタグとして設定するためにPHPから iptcparse を使うことができます。

あなたの質問では、投稿のおすすめ画像として画像を添付するようにプロセスが既に自動化されているので、そのプロセス中に画像IDと投稿IDを簡単に取得できます。画像を投稿に添付したら、投稿IDを$post_IDに、画像IDを$image_IDに保存します。そうすれば、次のようになります。

$image = getimagesize( get_attached_file( $image_ID ), $info );

if( isset( $info['APP13'] ) ) {

   $iptc = iptcparse( $info['APP13'] );

   // 2#025 is the key in the iptc array for keywords
   if( isset( $iptc['2#025'] ) && is_array( $iptc['2#025'] ) ) {

        // Last param is true to append these tags to existing tags,
        // set it to false to replace existing tags
        // See https://codex.wordpress.org/Function_Reference/wp_set_post_tags
        wp_set_post_tags( $post_ID, $iptc['2#025'], true );

   }

}

set_post_thumbnail関数を使用して注目画像を設定した場合(投稿画像編集画面を使用してその機能も使用する場合)、上記のコードをupdated_post_metaアクションにフックできます(set_post_thumbnailは注目画像を設定するためにメタデータを使用します)

add_action( 'updated_post_meta', function( $meta_id, $object_id, $meta_key, $_meta_value ) {

    // Check that meta 
    if( $meta_key == '_thumbnail_id' ) {

        $image = getimagesize( get_attached_file( $_meta_value ), $info );

        if( isset( $info['APP13'] ) ) {

            $iptc = iptcparse( $info['APP13'] );

            if( isset( $iptc['2#025'] ) && is_array( $iptc['2#025'] ) ) {

                wp_set_post_tags( $object_id, $iptc['2#025'], true );

            }

        }


    }

}, 10, 4 );

:コードはテストされていません。ここに書いただけです。注目の画像が削除または変更されたときにも処理する必要があります。

注2:私はあなたの質問をもう一度読み、あなたが(あなたを引用している) "wpやコーディング、あるいはそのようなものに関して初心者"であることに気づきます。あなたが上記のコードを理解するかどうかわからないし、私はコードの2番目のブロックがあなたにとって最初のものよりも役に立つことがあると思います。

3
cybmeta