Как проверить уникальность префикса плагина?

Чтобы избежать коллизий с другими плагинами, нужно префикс всех глобальных функций, действий и плагинов с уникальным префиксом, например:

function xyz_function_name() { ... } 

Вопрос в том, как проверить, действительно ли xyz уникален? Например, Yoast SEO использует wpseo_ который я могу себе представить, что другой плагин SEO также может легко использовать. Каков наилучший способ поиска доступных плагинов WordPress для потенциальных столкновений? Или есть?

Solutions Collecting From Web of "Как проверить уникальность префикса плагина?"

Вы можете использовать сценарий оболочки WordPres Plugin Directory Slurper от Mark Jaquith, чтобы загрузить самую последнюю версию всех плагинов из репо WordPress.org. После загрузки плагинов вы можете использовать grep для префикса плагина / крюка, который вы хотите проверить, например:

 grep -r --include=*.php 'wpseo_' ./ 

Разархивируйте пакет Slurper для плагинов WordPres для вашего корня документа. Имя каталога по умолчанию – WordPress-Plugin-Directory-Slurper и содержит:

  /plugins/ /readmes/ /zips/ LICENSE README.markdown update -  /plugins/ /readmes/ /zips/ LICENSE README.markdown update 

Запустите скрипт bash, выполнив php update из WordPress-Plugin-Directory-Slurper . Зарезервированные плагины будут загружены в /zips и извлечены в /plugins . Весь репо находится где-то около 15 ГБ и потребуется несколько часов для загрузки в первый раз.

Содержимое скрипта update :

 #!/usr/bin/php <?php $args = $argv; $cmd = array_shift( $args ); $type = 'all'; if ( !empty( $args[0] ) ) { $type = $args[0]; } switch ( $type ) { case 'readme': $directory = 'readmes'; $download = 'readmes/%s.readme'; $url = 'http://plugins.svn.wordpress.org/%s/trunk/readme.txt'; break; case 'all': $directory = 'plugins'; $download = 'zips/%s.zip'; $url = 'http://downloads.wordpress.org/plugin/%s.latest-stable.zip?nostats=1'; break; default: echo $cmd . ": invalid command\r\n"; echo 'Usage: php ' . $cmd . " [command]\r\n\r\n"; echo "Available commands:\r\n"; echo " all - Downloads full plugin zips\r\n"; echo " readme - Downloads plugin readmes only\r\n"; die(); } echo "Determining most recent SVN revision...\r\n"; try { $changelog = @file_get_contents( 'http://plugins.trac.wordpress.org/log/?format=changelog&stop_rev=HEAD' ); if ( !$changelog ) throw new Exception( 'Could not fetch the SVN changelog' ); preg_match( '#\[([0-9]+)\]#', $changelog, $matches ); if ( !$matches[1] ) throw new Exception( 'Could not determine most recent revision.' ); } catch ( Exception $e ) { die( $e->getMessage() . "\r\n" ); } $svn_last_revision = (int) $matches[1]; echo "Most recent SVN revision: " . $svn_last_revision . "\r\n"; if ( file_exists( $directory . '/.last-revision' ) ) { $last_revision = (int) file_get_contents( $directory . '/.last-revision' ); echo "Last synced revision: " . $last_revision . "\r\n"; } else { $last_revision = false; echo "You have not yet performed a successful sync. Settle in. This will take a while.\r\n"; } $start_time = time(); if ( $last_revision != $svn_last_revision ) { if ( $last_revision ) { $changelog_url = sprintf( 'http://plugins.trac.wordpress.org/log/?verbose=on&mode=follow_copy&format=changelog&rev=%d&limit=%d', $svn_last_revision, $svn_last_revision - $last_revision ); $changes = file_get_contents( $changelog_url ); preg_match_all( '#^' . "\t" . '*\* ([^/AZ ]+)[ /].* \((added|modified|deleted|moved|copied)\)' . "\n" . '#m', $changes, $matches ); $plugins = array_unique( $matches[1] ); } else { $plugins = file_get_contents( 'http://svn.wp-plugins.org/' ); preg_match_all( '#<li><a href="([^/]+)/">([^/]+)/</a></li>#', $plugins, $matches ); $plugins = $matches[1]; } foreach ( $plugins as $plugin ) { $plugin = urldecode( $plugin ); echo "Updating " . $plugin; $output = null; $return = null; exec( 'wget -q -np -O ' . escapeshellarg( sprintf($download, $plugin) ) . ' ' . escapeshellarg( sprintf($url, $plugin) ) . ' > /dev/null', $output, $return ); if ( $return === 0 && file_exists( sprintf($download, $plugin) ) ) { if ($type === 'all') { if ( file_exists( 'plugins/' . $plugin ) ) exec( 'rm -rf ' . escapeshellarg( 'plugins/' . $plugin ) ); exec( 'unzip -o -d plugins ' . escapeshellarg( 'zips/' . $plugin . '.zip' ) ); exec( 'rm -rf ' . escapeshellarg( 'zips/' . $plugin . '.zip' ) ); } } else { echo '... download failed.'; } echo "\r\n"; } if ( file_put_contents( $directory . '/.last-revision', $svn_last_revision ) ) echo "[CLEANUP] Updated $directory/.last-revision to " . $svn_last_revision . "\r\n"; else echo "[ERROR] Could not update $directory/.last-revision to " . $svn_last_revision . "\r\n"; } $end_time = time(); $minutes = ( $end_time - $start_time ) / 60; $seconds = ( $end_time - $start_time ) % 60; echo "[SUCCESS] Done updating plugins!\r\n"; echo "It took " . number_format($minutes) . " minute" . ( $minutes == 1 ? '' : 's' ) . " and " . $seconds . " second" . ( $seconds == 1 ? '' : 's' ) . " to update ". count($plugins) ." plugin" . ( count($plugins) == 1 ? '' : 's') . "\r\n"; echo "[DONE]\r\n"; 

Если вы хотите загрузить все последние одобренные темы, для этого также есть сценарий: WordPress Theme Directory Slurper от Aaron Jorbin.

Эти сценарии оболочки предназначены для системы Unix. Если вы используете Windows, вы можете запускать скрипты Plugin / Theme Directory Slurper с помощью cygwin.

  1. не являетесь общими, используйте некоторые варианты вашего имени.
  2. Никто, который устанавливает новые плагины, больше не использует PHP 5.2 (октябрь 2016), просто использует пространство имен PHP и делает его чем-то длинным, но релевантным, как имя плагина.