web-dev-qa-db-ja.com

投稿の親フィールドの値を使用して画像のキャプションを自動的に追加しますか?

私は投稿にカスタムドロップダウンフィールドを持っていて、そのカスタムフィールドから値を取得して現在の投稿にアップロードされた各画像キャプションフィールドにそれを挿入したいと思います。

私はこれを実行する方法を探していて、2つの例を見つけましたが、1つの作品でさえありません。今朝私はattachment_fields_to_saveというWordpressフィルタを見つけました。コーデックスに驚いたのは、私が探していたのとほぼ同じことの例でしたが、うまくいきませんでした。

これはコードです

function insert_custom_default_caption($post, $attachment) {
if ( substr($post['post_mime_type'], 0, 5) == 'image' ) {
    if ( strlen(trim($post['post_title'])) == 0 ) {
        $post['post_title'] = preg_replace('/\.\w+$/', '', basename($post['guid']));
        $post['errors']['post_title']['errors'][] = __('Empty Title filled from filename.');
    }

    // captions are saved as the post_excerpt, so we check for it before overwriting
    // if no captions were provided by the user, we fill it with our default
    if ( strlen(trim($post['post_excerpt'])) == 0 ) {
        $post['post_excerpt'] = 'default caption';
    }
}

return $post . $attachment;
}

add_filter('attachment_fields_to_save', 'insert_custom_default_caption', 10, 2);

誰かが私がそのコードの何が悪いのかを知る手助けをすることができますか?

1
christianpv

フィルタで、$postの投稿の親を見つけ、親の投稿のカスタムフィールドの値を取得して、その値を$post['post_excerpt'](キャプションが保存されている場所)に追加する必要があります。

add_filter('attachment_fields_to_save', 'wpse_insert_custom_caption', 10, 2);
function insert_custom_default_caption($post, $attachment) {

    //Check if the $post is attached to a parent post
    if( $post->post_parent ) {
        //Custom field of the attachment's parent post
        $custom_caption = get_post_meta( $post->post_parent, 'parent_custom_field', true );

        //captions are saved as the post_excerpt
        if ( !empty $custom_caption ) ) {
            $previous_caption = $post['post_excerpt'];
            $post['post_excerpt'] = $previous_caption.$custom_caption;
        }

    }

    return $post;
}
2
cybmeta