实际上,对于这种类型的帖子attachment
, 您应该使用edit_attachment
(动作)挂钩和非挂钩save_post_attachment
:
add_action( \'edit_attachment\', \'save_image_link\' ); // use edit_attachment
//add_action( \'save_post_attachment\', \'save_image_link\' ); // not save_post_attachment
其次,您的元框当前没有显示元值,因此您应该在输入字段中显示值,您可以使用
get_post_meta()
要检索元值,请执行以下操作:
<input type="text" name="image_link" id="image-link" class="postbox" value="<?php // wrapped
echo esc_attr( get_post_meta( $post->ID, \'image_link_url\', true ) ); ?>">
PS:您应该始终清理/转义用户提供的和不受信任的数据;e、 g.以上我使用
esc_attr()
要转义该值,可以使用
sanitize_text_field()
要清理提交的值,请执行以下操作:
sanitize_text_field( $_POST[\'image_link\'] )
.
示例实现使用get_post_gallery()
(对于[gallery]
shortcode)
这是基于
example here. 正如我之前提到的,您可以使用
get_post_meta()
检索自定义字段的值(在您的情况下是URL地址)。
// Get the gallery data (attachment IDs and URLs).
$gallery = get_post_gallery( get_the_ID(), false );
if ( $gallery ) {
foreach ( wp_parse_id_list( $gallery[\'ids\'] ) as $i => $att_id ) {
// Get the custom link URL.
$url = get_post_meta( $att_id, \'image_link_url\', true );
// Display the image. You can add other attributes later..
echo \'<a href="\' . esc_url( $url ) . \'"><img src="\' . // wrapped
esc_url( $gallery[\'src\'][ $i ] ). \'" alt=""></a> \';
}
}
<如果您希望能够通过
Attachment Details dialog, 然后,您应该忘记使用元框,而是尝试以下操作:
此部分将自定义字段添加到对话框中:
add_filter( \'attachment_fields_to_edit\', function ( $form_fields, $post ) {
$form_fields[\'image_link\'] = array(
\'label\' => \'Link to image URL\',
\'value\' => get_post_meta( $post->ID, \'image_link_url\', true ),
);
return $form_fields;
}, 10, 2 );
此部分将字段另存为元数据:
add_filter( \'attachment_fields_to_save\', function ( $post, $attachment ) {
if ( isset( $attachment[\'image_link\'] ) ) {
$meta_input = isset( $post[\'meta_input\'] ) ?
(array) $post[\'meta_input\'] : [];
$meta_input[\'image_link_url\'] = $attachment[\'image_link\'];
$post[\'meta_input\'] = $meta_input;
}
return $post;
}, 10, 2 );
请注意
image_link
是表单字段(
input
) 姓名,鉴于
image_link_url
是元键。
此解决方案还可以与标准的“编辑媒体”页面配合使用;在“附件详细信息”对话框中,您可以通过单击“编辑更多详细信息”链接访问该页面。
我用于测试的完整代码here.