勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

WordPressのMedia Library Organizerでダイアログ初回表示時のカテゴリを指定する方法

  WordPress CMS

Media Library Organizerを使用中のWPサイトで画像をカテゴリ分けしているが、画像選択のダイアログ初回表示時にカテゴリは「All Media Categories」が選択されている筈。これを指定したカテゴリの画像を表示するように変更したい。以下に対応方法をメモ。

 

対応方法

カテゴリ用ID

ダッシュボードの「メディア->Media Categories」に進むと作成済みのカテゴリが一覧表示されている筈なので、指定するためのカテゴリのリンクから「tag_ID=xxx」のパラメータをメモっておく。この「xxx」がカテゴリ用IDになる。

functions.php

functions.phpに以下を追記する。

// 投稿編集画面のメディアライブラリ用モーダルが表示される際に指定したカテゴリを表示
function mlo_default_select_media_category( $query ){

    // カテゴリID(適宜変更)
    $media_category_id = xxx;

    // 管理画面内かつAjax通信を使う場合のみ以外は終了
    if( !is_admin() || !defined('DOING_AJAX') || !DOING_AJAX ){
        return $query;
    }

    // メディアデータ取得の場合
    if( isset( $_POST['action'] ) && $_POST['action'] === 'query-attachments' ){

        // ユーザーがカテゴリを変更した際のフラグ
        $change_flg = false;

        // メディアの検索用配列がある場合
        if( isset($_POST['query']) && is_array($_POST['query']) ){

            // mlo経由の場合(カテゴリを選択しなおした場合)はフラグを書き換え
            if( array_key_exists('mlo-category', $_POST['query']) || array_key_exists('media_folder', $_POST['query']) ){
                $change_flg = true;
            }
        }

        // フラグが書き換わっていない(初回表示時)の場合
        if( !$change_flg ){

            // メディアの検索用配列を新規作成
            if ( empty( $query['tax_query'] ) ) {
                $query['tax_query'] = array();
            }

            // 検索用配列でカテゴリIDを指定
            $query['tax_query'][] = array(
                'taxonomy' => 'mlo-category',
                'field'    => 'term_id',
                'terms'    => $media_category_id,
                'operator' => 'IN',
            );
        }
    }

    // 検索条件を返す
    return $query;
}

// 投稿編集画面のメディアライブラリ用モーダルが表示される際にイベントを設定
add_filter('ajax_query_attachments_args', 'mlo_default_select_media_category');

 

Media Library Organizer

https://ja.wordpress.org/plugins/media-library-organizer/

 

リファレンス

ajax_query_attachments_args

https://developer.wordpress.org/reference/hooks/ajax_query_attachments_args/

 - WordPress CMS

  関連記事

PHPでjpg / png画像をWebP画像に変換し保存する方法
PHPでjpg / png画像をWebP画像に変換し保存する方法

PHPでjpg / png画像を圧縮したかった。ただjpg / pngのままだと ...

バニラJS対応(jQuery非依存)の画像遅延読み込みライブラリ「lazysizes」の利用方法
バニラJS対応(jQuery非依存)の画像遅延読み込みライブラリ「lazysizes」の利用方法

あるサイトのコーディングデータを貰った際に「lazysizes」というJavaS ...

lazyload.js等のライブラリを使わずHTMLのみで画像の遅延読み込みを行う方法
lazyload.js等のライブラリを使わずHTMLのみで画像の遅延読み込みを行う方法

画像を遅延読み込みさせるとなるとだいぶ前に書いたlazyload.jsを用いる方 ...

ajaxを使わずに非同期っぽくsubmitする
ajaxを使わずに非同期っぽくsubmitする

ajaxを使わずに見た目はページ遷移せず、 画像を含めたformをsubmitし ...

「slick」でブラウザ幅がPCの場合はスライダーを表示し、スマホ幅の場合はスライダー無しにする方法
「slick」でブラウザ幅がPCの場合はスライダーを表示し、スマホ幅の場合はスライダー無しにする方法

slickプラグインで画像スライダーを設置しているページがあり、PCのブラウザ幅 ...