社員投稿サイトにおける画像投稿数制限のWordPressカスタマイズ方法
公開: 2025年2月23日
社員が自由に投稿できる社内サイトは、情報共有や社内コミュニケーションの活性化に役立ちます。しかし、画像の無制限投稿を許可すると、サーバー容量を圧迫したり、管理が煩雑になったりする可能性があります。そこで、本記事ではWordPressをカスタマイズして、投稿ごとの画像アップロード数を制限する方法を紹介します。
画像投稿数を制限するメリット
サーバー負荷の軽減:無制限に画像をアップロードできると、サーバーのストレージ容量が急速に消費されます。投稿ごとに画像の数を制限することで、サーバーの負荷を抑えることができます。
投稿の質の向上:画像が多すぎると、読者が情報を整理しにくくなることがあります。適度な画像制限を設けることで、必要な画像のみを選択するようになり、コンテンツの質の向上につながります。
画像管理の簡素化:大量の画像がアップロードされると、管理者が不適切な画像をチェックする作業が増えます。制限を設けることで、管理負担を軽減できます。
WordPressで画像投稿数を制限する方法
方法1:WordPressのテーマファイル内のfunctions.php
にカスタムコードを追加することで、投稿ごとの画像アップロード数を制限できます。
以下のコードをfunctions.php
に追加すると、1つの投稿にアップロードできる画像の数を5枚までに制限できます。
function limit_image_uploads($file) {
if (strpos($_SERVER['REQUEST_URI'], 'post-new.php') !== false || strpos($_SERVER['REQUEST_URI'], 'post.php') !== false) {
$post_id = isset($_REQUEST['post_id']) ? $_REQUEST['post_id'] : 0;
$attachments = get_attached_media('image', $post_id);
if (count($attachments) >= 5) {
$file['error'] = '画像は最大5枚までアップロード可能です。';
}
}
return $file;
}
add_filter('wp_handle_upload_prefilter', 'limit_image_uploads');
方法2:クラシックエディタのメディア追加ボタンを消すことで画像入力フィールドからの画像投稿に限定することができます。
//クラシックエディタの「メディアに追加ボタン」非表示
function hide_media_buttons() {
$posttype = get_post_type();
if ( $posttype == 'post') {
$hide_css = '
<style type="text/css">
#wp-content-media-buttons {
display: none;
}
</style>
';
}
echo $hide_css;
}
add_action( 'admin_head', 'hide_media_buttons' );
ただ、この方法だと、リッチエディタ上でドラッグ&ドロップで画像が追加できてしまうので、文中に画像がドラッグ&ドロップで追加できる機能を廃止する必要があります。
ドラッグ&ドロップ機能は、wp-includes > js > media-views.min.js で動いていました。
そのためその機能を停止させるために、以下のように.uploader-editorを認識させないようにするカスタマイズを行いました。(名前をかえただけ)
{tagName:"div",className:"uploader-editor",template:wp.template("uploader-editor"),
localDrag:!1,overContainer:!1,overDropzone:!1,draggingFile:null,initialize:function(){
return this.initialized=!1,window.tinyMCEPreInit&&window.tinyMCEPreInit.dragDropUpload&&this.browserSupport()&&(this.$document=s(document),
this.dropzones=[],this.files=[],this.$document.on("drop",".uploader-editor2",_.bind(this.drop,this))
,this.$document.on("dragover",".uploader-editor2",_.bind(this.dropzoneDragover,this)),
this.$document.on("dragleave",".uploader-editor2",_.bind(this.dropzoneDragleave,this)),
this.$document.on("click",".uploader-editor",_.bind(this.click,this)),
this.$document.on("dragover",_.bind(this.containerDragover,this)),
this.$document.on("dragleave",_.bind(this.containerDragleave,this)),
方法3:カスタマイズに抵抗がある場合は、プラグインを活用する方法がよいでしょう。
プラグインを利用すると、コード編集なしで簡単に画像投稿数の制限が可能です。
おすすめのプラグイン
Media Library Assistant:メディアライブラリの管理機能を強化し、投稿ごとの画像制限も可能。
WP Upload Restriction:ユーザーごとや投稿ごとにアップロード制限を設定できる。
その他のおすすめカスタマイズ
投稿タイプごとに異なる制限を設定
function custom_image_limit_uploads($file) {
global $post;
if ($post && $post->post_type === 'custom_post_type') { // 'custom_post_type'を対象の投稿タイプに変更
$attachments = get_attached_media('image', $post->ID);
if (count($attachments) >= 3) { // 3枚までに制限
$file['error'] = 'この投稿では3枚までの画像しかアップロードできません。';
}
}
return $file;
}
add_filter('wp_handle_upload_prefilter', 'custom_image_limit_uploads');
役職ごとに異なる制限を設定
function role_based_image_limit($file) {
if (current_user_can('editor')) {
$max_images = 10;
} else {
$max_images = 5;
}
$post_id = isset($_REQUEST['post_id']) ? $_REQUEST['post_id'] : 0;
$attachments = get_attached_media('image', $post_id);
if (count($attachments) >= $max_images) {
$file['error'] = '画像は最大' . $max_images . '枚までアップロード可能です。';
}
return $file;
}
add_filter('wp_handle_upload_prefilter', 'role_based_image_limit');
まとめ
社員投稿サイトにおいて、画像のアップロード数を制限することで、サーバー負荷の軽減、コンテンツの質向上、管理の簡素化が期待できます。WordPressでは、functions.php
を編集する方法やプラグインを活用する方法で実装できます。サイトの運用方針に合わせた適切な制限を設定し、快適な投稿環境を維持しましょう。
カスタマイズのご相談は以下より承っておりますので、お気軽にご相談ください。