프로그래밍 방식으로 워드 프레스 블로그에서 활성 플러그인 목록을 얻는 방법은 무엇입니까?


13

나는 2 개의 블로그를 가지고 있는데, 하나는 다중 사이트이고 다른 하나는 그렇지 않습니다. 두 블로그에서 활성화 된 플러그인 목록을 가져 와서 비교할 수 있습니다. 멀티 사이트 블로그에서 네트워크 전체와 사이트 전체에서 활성화 된 플러그인을 나열하고 싶습니다.

답변:


20

활성화 된 플러그인은 키 아래 WordPress 블로그의 옵션 테이블에 저장됩니다. active_plugins

당신이 사용할 수 있도록 get_option('active_plugins'); 각각의 블로그와 배열을 비교합니다.


2
get_plugins ()를 추가하면 비활성 플러그인을 포함한 모든 플러그인이 제공됩니다.
Charles Jaimet

13

단일 사이트 및 네트워크 사이트 대시 보드 용, 다중 사이트 네트워크 대시 보드 용 대시 보드 위젯 형태.

/*
 * Single Site Dashboard Widget
 */
add_action('wp_dashboard_setup', 'wpse_54742_wp_dashboard_setup');

function wpse_54742_wp_dashboard_setup() {
    wp_add_dashboard_widget( 'wpse_54742_active_site_plugins', __( 'Active Plugins' ), 'wpse_54742_active_site_plugins' );
}

function wpse_54742_active_site_plugins() {
    $the_plugs = get_option('active_plugins'); 
    echo '<ul>';
    foreach($the_plugs as $key => $value) {
        $string = explode('/',$value); // Folder name will be displayed
        echo '<li>'.$string[0] .'</li>';
    }
    echo '</ul>';
}


/*
 * Multisite Dashboard Widget
 */
add_action('wp_network_dashboard_setup', 'wpse_54742_network_dashboard_setup');

function wpse_54742_network_dashboard_setup() {
    wp_add_dashboard_widget( 'wpse_54742_active_network_plugins', __( 'Network Active Plugins' ), 'wpse_54742_active_network_plugins' );
}

function wpse_54742_active_network_plugins() {
    /*
     * Network Activated Plugins
     */
    $the_plugs = get_site_option('active_sitewide_plugins'); 
    echo '<h3>NETWORK ACTIVATED</h3><ul>';
    foreach($the_plugs as $key => $value) {
        $string = explode('/',$key); // Folder name will be displayed
        echo '<li>'.$string[0] .'</li>';
    }
    echo '</ul>';


    /*
     * Iterate Through All Sites
     */
    global $wpdb;
    $blogs = $wpdb->get_results($wpdb->prepare("
        SELECT blog_id
        FROM {$wpdb->blogs}
        WHERE site_id = '{$wpdb->siteid}'
        AND spam = '0'
        AND deleted = '0'
        AND archived = '0'
    "));

    echo '<h3>ALL SITES</h3>';

    foreach ($blogs as $blog) {
        $the_plugs = get_blog_option($blog->blog_id, 'active_plugins'); 
        echo '<hr /><h4><strong>SITE</strong>: '. get_blog_option($blog->blog_id, 'blogname') .'</h4>';
        echo '<ul>';
        foreach($the_plugs as $key => $value) {
            $string = explode('/',$value); // Folder name will be displayed
            echo '<li>'.$string[0] .'</li>';
        }
        echo '</ul>';
    }
}

1
이것은 내가 필요한 것보다 훨씬 많았지 만 시간을내어 자세한 답변을 해주셔서 감사합니다. 바라건대, 그것은 다른 누군가를 도울 것입니다. 감사합니다.
mehulved

4

사용되는 사이트가있는 플러그인 목록 (멀티 사이트 만 해당)

현재 어떤 플러그인이 활성화되어 있고 어떤 사이트에 있는지 알고 싶다면 다음과 같은 기능을 사용할 수 있습니다.

function wpstars_list_active_plugins() {

  if ( function_exists( 'get_sites' ) && class_exists( 'WP_Site_Query' ) ) {

    echo "<table class='active-plugins'>";
    echo "<tr><th>Plugin name</th><th>Sites</th></tr>";

    $plugins = get_plugins();

    // Network activated
    $active_plugins = get_site_option('active_sitewide_plugins');
    foreach($active_plugins as $active_path => $active_plugin) {

      $plugins[$active_path]['Sites'] = "A,";
    }

    // Per site activated
    $sites = get_sites();
    foreach ( $sites as $site ) {

      $active_plugins = get_blog_option($site->blog_id, 'active_plugins');
      foreach($active_plugins as $active_plugin) {

        $plugins[$active_plugin]['Sites'] .= $site->blog_id . ",";
      }
    }

    foreach($plugins as $plugin) {

      echo "<tr><td>{$plugin['Name']}</td><td>{$plugin['Sites']}</td></tr>";
    }

    echo "</table>";
  }
}

1

WP-CLI는 티켓입니다. 나는 너무 많은 것들을 사용한다면, 나는 카운트를 잃어 버렸습니다!

wp plugin list --status=active

원하는 경우 별칭 을 사용하여 로컬 컴퓨터에서 이러한 명령을 실행할 수 있습니다 ...

그런 다음 @site 함수를 사용합니다.

wp @all plugin list --status=active

또는

wp @multisite list --status=active
wp @blog list --status=active
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.