Comment vérifier l'unicité du préfixe du plugin?

12

Pour éviter les collisions avec d'autres plugins, il est préférable de préfixer toutes les fonctions, actions et plugins globaux avec un préfixe unique, par exemple:

.
function xyz_function_name() { ... }

La question est de savoir comment puis-je vérifier que xyz est vraiment unique? Par exemple, Yoast SEO utilise wpseo_ , ce que d’autres plug-ins SEO pourraient facilement utiliser. Quel est le meilleur moyen de rechercher dans les plugins WordPress disponibles des collisions potentielles? Ou y a-t-il?

    
posée Borek Bernard 14.10.2016 - 21:20

2 réponses

5

Vous pouvez utiliser le script shell de Slurper du plugin WordPres de Mark Jaquith pour télécharger le dernier version de tous les plugins du dépôt WordPress.org. Une fois les plugins téléchargés, vous pouvez rechercher le préfixe plugin / hook que vous souhaitez vérifier, par exemple:

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

Décompressez le package WordPres Plugin Directory Slurper à la racine de votre document. Le nom de répertoire par défaut est WordPress-Plugin-Directory-Slurper et il contient:

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

Exécutez le script bash en exécutant php update à partir du répertoire WordPress-Plugin-Directory-Slurper . Les plugins compressés seront téléchargés sur /zips et extraits sur /plugins . La totalité du repo est d’environ 15 Go et le téléchargement s’effectuera au bout de plusieurs heures.

Le contenu du script 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";

Si vous souhaitez télécharger tous les thèmes approuvés les plus récents, un script est également prévu à cet effet: WordPress Répertoire thématique Slurper d'Aaron Jorbin.

Ces scripts shell sont conçus pour un système Unix. Si vous utilisez Windows, vous pouvez exécuter les scripts Plug-in / Répertoire de thèmes à l'aide de cygwin.

    
réponse donnée Dave Romsey 18.10.2016 - 04:19
0
  1. ne soyez pas générique, utilisez une variante de votre nom.
  2. Ceux qui installent de nouveaux plugins n'utilisent plus PHP 5.2 (octobre 2016), utilisent simplement un espace de noms PHP et faites-en quelque chose de long mais pertinent comme le nom du plugin.
réponse donnée Mark Kaplun 18.10.2016 - 04:48

Lire d'autres questions sur les étiquettes