确定附件是否真的是特色图像很容易:
get_post_thumbnail_id( get_post() );
这是一个方便的功能
get_post_meta( get_post()->ID, \'_thumbnail_id\', true );
如果你只知道文件名或Url,那就有点复杂了。
add_filter( \'wp_handle_upload_prefilter\', function( $file ) {
$url = wp_get_attachment_image_src(
get_post_thumbnail_id( get_post() ),
\'post-thumbnail\'
);
// Output possible errors
if ( false !== strpos( $url, $file ) ) {
$file[\'error\'] = \'Sorry, but we only allow featured images\';
}
return $file;
} );
如您所见,我只将当前文件字符串与帖子特色图片URl进行比较。请注意,我不知道这是否可行,它未经测试
wp_handle_upload_prefilter
可能太早了。
另一种选择可能是使用内部的最后一个过滤器_wp_handle_upload()
:
apply_filters( \'wp_handle_upload\', array(
\'file\' => $new_file,
\'url\' => $url,
\'type\' => $type
), \'wp_handle_sideload\' === $action ? \'sideload\' : \'upload\' );
也可以处理侧载。
理论上,我认为在设置之前检查特征图像是否是特征图像还为时过早。您可能能够在上传完成后恢复上传(删除文件、重置post元数据),但这远远不够优雅。
元框本身已注册到add_meta_box()
框回调是post_thumbnail_meta_box
, 哪个呼叫_wp_post_thumbnail_html()
渲染内容。当你往里看时,你会发现实际上有一个隐藏的字段:
$content .= \'<input type="hidden" id="_thumbnail_id" name="_thumbnail_id" value="\' . esc_attr( $thumbnail_id ? $thumbnail_id : \'-1\' ) . \'" />\';
现在
name
是
_thumbnail_id
, 你应该可以用它来取
filter_input()
(良好)或具有
$_POST[\'_thumbnail_id\']
(坏)在回调中,如
wp_handle_upload_prefilter
要确定它是否真的是一幅特色图片,请执行以下操作:
$featID = filter_input( INPUT_POST, \'_thumbnail_id\', … filters … );