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

11

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

function xyz_function_name() { ... }

La question est, comment puis-je vérifier que xyzc'est bien unique? Par exemple, Yoast SEO utilise wpseo_ce que j'imagine que d'autres plugins SEO pourraient facilement utiliser également. Quelle est la meilleure façon de rechercher les plugins WordPress disponibles pour les collisions potentielles? Ou y en a-t-il?

Borek Bernard
la source
4
Les préfixes appartiennent au passé. De nos jours, nous utilisons des espaces de noms, et vous pouvez les imbriquer aussi profondément que vous le souhaitez.
fuxia
Je mettrai à jour la question pour inclure des actions et des filtres qui sont globaux et ne peuvent pas être préfixés à l'aide de classes.
Borek Bernard
avec cette mise à jour, c'est une très bonne question
prosti
1
J'ai voté contre parce que je pense que la réponse va être difficile. Mais je ne pense vraiment pas que cela soit nécessaire car il existe potentiellement un nombre infini de combinaisons de préfixes et de noms de fonctions. Je pense que la vraie solution est d'être plus détaillé dans le nom de la fonction. Aussi, et peut-être exagéré, mais un suffixe pourrait être ajouté.
stim

Réponses:

5

Vous pouvez utiliser le script shell WordPres Plugin Directory Slurper de Mark Jaquith pour télécharger la version la plus récente de tous les plugins à partir 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 dans la racine de votre document. Le nom du répertoire par défaut est WordPress-Plugin-Directory-Slurperet il contient:

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

Exécutez le script bash en exécutant à php updatepartir du WordPress-Plugin-Directory-Slurperrépertoire. Les plugins zippés seront téléchargés /zipset extraits vers /plugins. Le repo entier se situe autour de 15 Go et prendra plusieurs heures pour être téléchargé la première fois.

Le contenu du updatescript:

#!/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, il existe également un script pour cela: WordPress Theme Directory Slurper par Aaron Jorbin.

Ces scripts shell sont conçus pour un système Unix. Si vous utilisez Windows, vous pouvez exécuter les scripts Plugin / Theme Directory Slurper à l'aide de cygwin.

Dave Romsey
la source
0
  1. ne soyez pas générique, utilisez une variante de votre nom.
  2. Personne qui installe de nouveaux plugins n'utilise plus PHP 5.2 (oct 2016), il suffit d'utiliser l'espace de noms PHP et d'en faire quelque chose de long mais pertinent comme le nom du plugin.
Mark Kaplun
la source