programing

모든 플러그인 목록 가져오기

nicescript 2023. 2. 15. 23:09
반응형

모든 플러그인 목록 가져오기

모든 Wordpress 플러그인 목록을 받고 싶습니다.

라고 하는 기능이 있습니다.get_plugins()설치한 플러그인이 모두 반환됩니다.이전에 설치했는지 여부에 관계없이 필요한 것은 모든 플러그인의 목록입니다.

제가 사용할 수 있는 기능이 있나요?만약 없다면, JSON, 데이터베이스, API 등 사용할 수 있는 것이 있습니까?

편집:

var_dump(plugins_api('query_plugins', array(
    'per_page' => 100,
    'tag' => 'contact form 7',
    'number' => 5,
    'page' => 1,
    'fields' =>
        array(
            'short_description' => false,
            'description' => false,
            'sections' => false,
            'tested' => false,
            'requires' => false,
            'rating' => false,
            'ratings' => false,
            'downloaded' => false,
            'downloadlink' => false,
            'last_updated' => false,
            'added' => false,
            'tags' => false,
            'compatibility' => false,
            'homepage' => false,
            'versions' => false,
            'donate_link' => false,
            'reviews' => false,
            'banners' => false,
            'icons' => false,
            'active_installs' => false,
            'group' => false,
            'contributors' => false
        ))));

이렇게 하면 불필요한 데이터가 모두 반환됩니다.

아래 노란색으로 표시된 키만 있으면 됩니다.name그리고.slug

여기에 이미지 설명 입력

어레이에서 삭제할 수 있다는 것은 알고 있습니다만, 퍼포먼스에는 매우 나쁠 것입니다.

루프를 사용하여 시도해도 45개의 플러그인이 있지만 그 이상은 아닙니다.나머지는 어디 있지?

foreach ($plugins as $plugin) { // $plugins is the variable of my code above but without 'tag' => 'contact form 7',
    foreach ($plugin as $p) {
        if ($p != null) {
            echo $p->name . "<br>";
        }
    }
}

최선의 답은 아니지만 나는 내 문제를 최대한 해결하려고 노력했다.

플러그인 목록 가져오기

모든 플러그인이 반환되는 은 아니지만 상위 정격 플러그인이 반환됩니다.

$plugins = plugins_api('query_plugins', array(
    'per_page' => 100,
    'browse' => 'top-rated',
    'fields' =>
        array(
            'short_description' => false,
            'description' => false,
            'sections' => false,
            'tested' => false,
            'requires' => false,
            'rating' => false,
            'ratings' => false,
            'downloaded' => false,
            'downloadlink' => false,
            'last_updated' => false,
            'added' => false,
            'tags' => false,
            'compatibility' => false,
            'homepage' => false,
            'versions' => false,
            'donate_link' => false,
            'reviews' => false,
            'banners' => false,
            'icons' => false,
            'active_installs' => false,
            'group' => false,
            'contributors' => false
        )));

데이터를 JSON으로 저장

취득하는 데이터가 크고 퍼포먼스에 악영향을 미치기 때문에 취득하려고 합니다.name및 그slug배열에서 제외된 후 JSON 파일에 씁니다.

$plugins_json = '{' . PHP_EOL;
// Get only the name and the slug
foreach ($plugins as $plugin) {
    foreach ($plugin as $key => $p) {
        if ($p->name != null) {
            // Let's beautify the JSON
            $plugins_json .= '  "'. $p->name . '": {' . PHP_EOL;
            $plugins_json .= '      "slug": "' . $p->slug . '"' . PHP_EOL;
            end($plugin);
            $plugins_json .= ($key !== key($plugin)) ? '    },' . PHP_EOL : '   }' . PHP_EOL;
        }
    }
}
$plugins_json .= '}';
file_put_contents('plugins.json', $plugins_json);

이제 필요한 데이터만 포함된 슬림한 JSON 파일을 사용할 수 있게 되었습니다.

JSON 파일을 계속 업데이트하기 위해 Cron Job을 설정하여 24시간마다 이 스크립트를 실행하여 JSON 파일을 만듭니다.

모든 플러그인을 한꺼번에 취득하는 것은 서버에 부담이 되므로 단계적으로 취득하는 것이 좋습니다.

서버가 처리할 수 있는 만큼의 플러그인을 동시에 실행할 수 있습니다.예를 들어, 안전한 플러그 인을 한 번에 100개씩 사용합니다.

스크립트가 실행될 때마다 "페이지" 숫자가 1씩 증가합니다.따라서 스크립트가 다음 번에 실행될 때 다음 100개의 플러그인이 검색됩니다.기존 내용plugins.json해석됩니다.새 플러그인은 인코딩 후 다시 저장하기 전에 기존 데이터에 추가(또는 플러그인이 이미 있는 경우 덮어쓰기)됩니다.

페이지 번호가 마지막을 넘으면 결과는 반환되지 않습니다.이렇게 하면 스크립트는 다음 플러그인이 더 이상 없음을 인식합니다.그런 다음 페이지를 1로 리셋하여 다시 시작합니다.

사용하다wp_options가장 빠른 방법이기 때문에 페이지를 추적할 수 있습니다.파일 시스템 캐시를 사용하는 것이 좋습니다.필요한 경우 수동으로 재설정하는 것이 더 쉽습니다.

x분마다 스크립트를 실행하도록 cronjob을 설정할 수 있습니다.자, 이제.plugins.json파일은 실행될 때마다 단계적으로 축적되고 커집니다.

// get the current "page", or if the option not exists, set page to 1.
$page = get_option( 'plugins_page' ) ? (int)get_option( 'plugins_page' ) : 1;

// get the plugin objects
$plugins = plugins_api( 'query_plugins', [
    'per_page' => 100,
    'page'     => $page,
    'fields'   => [
       //.........
    ]
] );

// increment the page, or when no results, reset to 1.
update_option( 'plugins_page', count( $plugins ) > 0 ? ++ $page : 1 );

// build up the data array
$newData = [];
foreach ( $plugins as $plugin ) {
    foreach ( $plugin as $key => $p ) {
        if ( $p->name != null ) {
            $newData[ $p->name ] = [ 'slug' => $p->slug ];
        }
    }
}

// get plugin data already in file.
// The last argument (true) is important. It makes json objects into
// associative arrays so they can be merged with array_merge.
$existingData = json_decode( file_get_contents( 'plugins.json' ), true );

// merge existing data with new data
$pluginData = array_merge( $existingData, $newData );

file_put_contents( 'plugins.json', json_encode( $pluginData ) );

언급URL : https://stackoverflow.com/questions/51990613/getting-a-list-of-all-plugins

반응형