私は投稿にカスタムドロップダウンフィールドを持っていて、そのカスタムフィールドから値を取得して現在の投稿にアップロードされた各画像キャプションフィールドにそれを挿入したいと思います。
私はこれを実行する方法を探していて、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);
誰かが私がそのコードの何が悪いのかを知る手助けをすることができますか?
フィルタで、$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;
}