如何检查用户是否正在上传/设置图片为特色图片?

时间:2016-10-14 作者:deathlock

我正在限制基于@brasofilo的图像上传excellent snippet. 简而言之,它限制用户只上传最小尺寸的图像。

然而,我只想在用户上传特色图片时应用此选项。我试过使用$pagenow 作为条件,

global $pagenow;
if ($pagenow == \'media-upload.php\')
    add_filter( \'wp_handle_upload_prefilter\', \'wpse_28359_block_small_images_upload\' ); 
但它不起作用。有什么想法吗?

2 个回复
SO网友:kaiser

确定附件是否真的是特色图像很容易:

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 … );

SO网友:AddWeb Solution Pvt Ltd

将以下代码添加到当前主题的函数中。php文件,它将限制最小图像尺寸:

add_filter(\'wp_handle_upload_prefilter\',\'tc_handle_upload_prefilter\');
function tc_handle_upload_prefilter($file)
{

    $img=getimagesize($file[\'tmp_name\']);
    $minimum = array(\'width\' => \'250\', \'height\' => \'200\');
    $width= $img[0];
    $height =$img[1];

    if ($width < $minimum[\'width\'] )
        return array("error"=>"Image dimensions are too small. Minimum width is {$minimum[\'width\']}px. Uploaded image width is $width px");

    elseif ($height <  $minimum[\'height\'])
        return array("error"=>"Image dimensions are too small. Minimum height is {$minimum[\'height\']}px. Uploaded image height is $height px");
    else
        return $file; 
}
然后只需更改所需最小尺寸的数字(在我的示例中为250和200)

相关推荐

Images with overlay

我有一些图片在一个容器中,我想添加一个覆盖和图标。这不是现成的,但我找到了一些有用的代码:HTML:<div class=\"main\"> <span class=\"featured\"><img src=\"http://joshrodg.com/IMG_001-258x258.jpg\" title=\"\" alt=\"\"></span> </div> CSS:.featured {