Bagaimana cara memeriksa keunikan awalan plugin?

11

Untuk menghindari tabrakan dengan plugin lain, seseorang harus mengawali semua fungsi global, tindakan, dan plugin dengan awalan unik, misalnya:

function xyz_function_name() { ... }

Pertanyaannya adalah, bagaimana cara saya memverifikasi yang xyzmemang unik? Sebagai contoh, Yoast SEO menggunakan wpseo_yang dapat saya bayangkan plugin SEO lainnya dapat dengan mudah digunakan juga. Apa cara terbaik untuk mencari plugin WordPress yang tersedia untuk kemungkinan tabrakan? Atau disana?

Borek Bernard
sumber
4
Awalan adalah sesuatu dari masa lalu. Saat ini kami menggunakan ruang nama, dan Anda dapat membuat sarang sedalam yang Anda butuhkan.
fuxia
Saya akan memperbarui pertanyaan untuk menyertakan tindakan dan filter yang bersifat global dan tidak dapat diawali dengan menggunakan kelas.
Borek Bernard
dengan pembaruan itu, ini adalah pertanyaan yang sangat bagus
prosti
1
Saya memilih ini karena saya pikir jawabannya akan sulit. Tapi saya benar-benar tidak berpikir bahwa ini perlu karena ada potensi kombinasi jumlah awalan dan nama fungsi yang tak terbatas. Saya pikir solusi sebenarnya adalah untuk lebih detail dalam nama fungsi. Juga, dan mungkin berlebihan, tetapi postfix bisa ditambahkan.
stims

Jawaban:

5

Anda dapat menggunakan skrip shell Direktori Plugin WordPres oleh Mark Jaquith untuk mengunduh versi terbaru dari semua plugin dari repo WordPress.org. Setelah plugin diunduh, Anda dapat melihat awalan plugin / hook yang ingin Anda periksa, misalnya:

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

Unzip paket WordPres Plugin Directory Slurper ke ke root dokumen Anda. Nama direktori default adalah WordPress-Plugin-Directory-Slurperdan mengandung:

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

Jalankan skrip bash dengan mengeksekusi php updatedari dalam WordPress-Plugin-Directory-Slurperdirektori. Plugin zip akan diunduh /zipsdan diekstraksi ke /plugins. Seluruh repo berada di suatu tempat sekitar 15GB dan akan memakan waktu beberapa jam untuk mengunduh pertama kali.

Isi updateskrip:

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

Jika Anda ingin mengunduh semua tema terbaru yang disetujui, ada skrip untuk itu juga: WordPress Theme Directory Slurper oleh Aaron Jorbin.

Script shell ini dirancang untuk sistem Unix. Jika Anda menggunakan Windows, Anda dapat menjalankan skrip Plugin / Theme Directory Slurper menggunakan cygwin.

Dave Romsey
sumber
0
  1. jangan generik, gunakan beberapa variasi nama Anda.
  2. Tidak seorang pun yang memasang plugin baru menggunakan PHP 5.2 lagi (Oktober 2016), cukup gunakan namespace PHP, dan buatlah sesuatu yang panjang tapi relevan seperti nama plugin.
Mark Kaplun
sumber