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


11

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

function xyz_function_name() { ... }

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


4
Префиксы остались в прошлом. В настоящее время мы используем пространства имен, и вы можете вкладывать их так глубоко, как вам нужно.
fuxia

Я обновлю вопрос, включив в него действия и фильтры, которые являются глобальными и не могут иметь префикса с помощью классов.
Борек Бернард

с этим обновлением это очень хороший вопрос
prosti

1
Я проголосовал за это, потому что я думаю, что ответ будет трудным. Но я действительно не думаю, что это необходимо, так как потенциально существует бесконечное количество комбинаций префиксов и имен функций. Я думаю, что реальное решение состоит в том, чтобы быть более подробным в названии функции. Кроме того, возможно, излишне, но можно добавить постфикс.
Стимс

Ответы:


5

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

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

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

  /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" . '*\* ([^/A-Z ]+)[ /].* \((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.


0
  1. не будьте родовыми, используйте какое-то изменение своего имени.
  2. Никто из тех, кто устанавливает новые плагины, больше не использует PHP 5.2 (октябрь 2016), просто использует пространство имен PHP и делает его чем-то длинным, но актуальным, например, именем плагина.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.