Wie überprüfe ich die Eindeutigkeit des Plugin-Präfixes?


11

Um Kollisionen mit anderen Plugins zu vermeiden, sollte allen globalen Funktionen, Aktionen und Plugins ein eindeutiges Präfix vorangestellt werden, z.

function xyz_function_name() { ... }

Die Frage ist, wie kann ich überprüfen, ob dies xyztatsächlich einzigartig ist? Zum Beispiel verwendet Yoast SEO, von wpseo_dem ich mir vorstellen kann, dass es auch andere SEO-Plugins verwenden könnten. Was ist der beste Weg, um die verfügbaren WordPress-Plugins nach möglichen Kollisionen zu durchsuchen? Oder gibt es?


4
Präfixe gehören der Vergangenheit an. Heutzutage verwenden wir Namespaces, und Sie können diese so tief verschachteln, wie Sie möchten.
Fuxia

Ich werde die Frage so aktualisieren, dass sie Aktionen und Filter enthält, die global sind und denen keine Klassen vorangestellt werden können.
Borek Bernard

Mit diesem Update ist dies eine sehr gute Frage
Prosti

1
Ich habe dafür gestimmt, weil ich denke, dass die Antwort schwierig sein wird. Aber ich denke wirklich nicht, dass dies notwendig ist, da es möglicherweise unendlich viele Kombinationen von Präfixen und Funktionsnamen gibt. Ich denke, die wirkliche Lösung besteht darin, im Funktionsnamen detaillierter zu sein. Auch und vielleicht übertrieben, aber ein Postfix könnte hinzugefügt werden.
Stims

Antworten:


5

Sie können das WordPres Plugin Directory Slurper- Shell-Skript von Mark Jaquith verwenden, um die neueste Version aller Plugins aus dem WordPress.org-Repo herunterzuladen. Sobald die Plugins heruntergeladen wurden, können Sie nach dem Plugin / Hook-Präfix suchen, das Sie überprüfen möchten, z.

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

Entpacken Sie das WordPres Plugin Directory Slurper-Paket in Ihr Dokumentstammverzeichnis. Der Standardverzeichnisname lautet WordPress-Plugin-Directory-Slurperund enthält:

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

Führen Sie das Bash-Skript aus, indem Sie es php updateaus dem WordPress-Plugin-Directory-SlurperVerzeichnis ausführen . Gezippte Plugins werden heruntergeladen /zipsund extrahiert /plugins. Das gesamte Repo hat ungefähr 15 GB und das erstmalige Herunterladen dauert mehrere Stunden.

Der Inhalt des updateSkripts:

#!/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";

Wenn Sie alle zuletzt genehmigten Themen herunterladen möchten , gibt es auch dafür ein Skript: WordPress Theme Directory Slurper von Aaron Jorbin.

Diese Shell-Skripte sind für ein Unix-System konzipiert. Wenn Sie Windows verwenden, können Sie die Plugin / Theme Directory Slurper-Skripte mit cygwin ausführen.


0
  1. Sei nicht generisch, benutze eine Variation deines Namens.
  2. Niemand, der neue Plugins installiert, verwendet PHP 5.2 mehr (Oktober 2016). Verwenden Sie einfach den PHP-Namespace und machen Sie ihn zu etwas Langem, aber Relevantem wie dem Namen des Plugins.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.