모든 플러그인 목록 가져오기
모든 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
'programing' 카테고리의 다른 글
ngIf 내의 바인딩된 요소는 바인딩을 업데이트하지 않습니다. (0) | 2023.03.08 |
---|---|
노드 또는 Express를 사용하여 JSON을 반환하는 올바른 방법 (0) | 2023.02.15 |
onload가 XMLHttpRequest의 readyState==4와 같습니까? (0) | 2023.02.15 |
Angular에서 $timeout을 사용하면 어떤 이점이 있습니까?window.setTimeout이 아닌 JS? (0) | 2023.02.15 |
파이어베이스 호스팅에 워드프레스를 설치하려면 어떻게 해야 하나요? (0) | 2023.02.15 |