web-dev-qa-db-ja.com

コアファイルを編集せずにwp-adminのテーマのリストでテーマを隠す

私は200以上のテーマをインストールしてアクティブにしたマルチサイトネットワークを運営しています。 wp-adminで利用可能なテーマのリストを操作して特定のテーマがリストに表示されないようにする方法はありますか。コアファイルを編集せずにやりたいのですが。

私はWordPressがget_themes()関数から利用可能なテーマのリストを取得することを知っています。そしてget_allowed_themes()という名前の関数があり、それが解決策になるかもしれません。しかし、それを使用する方法についてはわかりません。

3
grosshat

次のフィルタは、次の画面のマルチサイトで機能します。

  • /wp-admin/network/themes.php
  • /wp-admin/network/site-themes.php?id=1(個々のサイトでテーマが許可されています)
add_filter( 'all_themes', 'wpse_55081_remove_themes_ms' );
function wpse_55081_remove_themes_ms($themes)
{
    unset($themes['Twenty Ten'], $themes['Twenty Eleven']);
    return $themes;
}

ネットワークの単一サイトまたはサブサイト/wp-admin/themes.php(Appearance - > Themes)の通常のテーマセレクタの場合は、次のようになります。フックはありません...

$wp_themesグローバル変数はすべてのテーマを含む配列を保持していますが、その中の項目の設定を解除できませんでした。

古いjQueryトリックが仕事をしますが、ページネーションはおかしくなるかもしれません...

add_action( 'admin_head-themes.php', 'wpse_55081_remove_themes' );

function wpse_55081_remove_themes()
{
    ?>
    <script type="text/javascript">
    jQuery(document).ready( function($) {
        $('div.available-theme:contains("comicpress")').remove();
        $('div.available-theme:contains("twentyten")').remove();
        $('div.available-theme:contains("starkers")').remove();
    });     
    </script>
    <?php
}

更新

ブロックに新しいフックがあるようです:extra_theme_headers
しかし、変なことがあります。

  • WP 3.4の新しいフィルタとして 文書化されています
  • しかし、それはwp-includes/deprecated.phpに現れます(?!)
/*
 * The returning $arr is always empty, but we are able to unset items in the global $wp_themes
 * Works in all theme screens, Multisite or Single Site (and doesn't bugs pagination)
 * 
 * It is defined this way: apply_filters( 'extra_theme_headers', array() )
 * The array value is always empty but, if we return it, the filter doesn't works..
 *
 */
add_filter( 'extra_theme_headers', 'wpse_55081_remove_themes_everywhere', 10, 1 );

function wpse_55081_remove_themes_everywhere($arr)
{
    global $wp_themes;
    unset($wp_themes['Convertible/Convertible'], $wp_themes['grido-child'], $wp_themes['ilost'], $wp_themes['parallels'], $wp_themes['twentyeleven']);
    // return $arr;
}
4
brasofilo
add_filter( 'wp_prepare_themes_for_js', 'hideThemes');
function hideThemes($arr){
    foreach($arr as $key => &$value){
        //unset what you want
    }
    return $arr;
}`

あるいは、

add_filter( 'wp_prepare_themes_for_js', 'hideThemes');
function hideThemes($arr){

    unset($arr["twentyfourteen"]);
    unset($arr["twentythirteen"]);
    unset($arr["twentytwelve"]);

    return $arr;
}`
4
Ruben