¿Cómo verificar la singularidad del prefijo del complemento?

12

Para evitar colisiones con otros complementos, uno debe prefijar todas las funciones, acciones y complementos globales con un prefijo único, por ejemplo:

function xyz_function_name() { ... }

La pregunta es, ¿cómo verifico que xyz es realmente único? Por ejemplo, Yoast SEO usa wpseo_ , lo cual me imagino que otro complemento SEO también podría usar fácilmente. ¿Cuál es la mejor manera de buscar los posibles complementos de WordPress para posibles colisiones? ¿O hay?

    
pregunta Borek Bernard 14.10.2016 - 21:20

2 respuestas

5

Puede usar el script de shell WordPres Plugin Directory Slurper de Mark Jaquith para descargar el más reciente Versión de todos los complementos del repositorio de WordPress.org. Una vez que se hayan descargado los complementos, puede grep para el prefijo de complemento / enganche que desea verificar, por ejemplo:

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

Descomprima el paquete de WordPres Plugin Directory Slurper a su raíz de documentos. El nombre de directorio predeterminado es WordPress-Plugin-Directory-Slurper y contiene:

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

Ejecute el script bash ejecutando php update desde dentro del directorio WordPress-Plugin-Directory-Slurper . Los complementos comprimidos se descargarán a /zips y se extraerán a /plugins . El repositorio completo está en algún lugar alrededor de 15 GB y tardará varias horas en descargarse por primera vez.

El contenido del 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 desea descargar todos los temas aprobados más recientes, también hay un script para eso: WordPress Theme Directory Slurper por Aaron Jorbin.

Estos scripts de shell están diseñados para un sistema Unix. Si está utilizando Windows, puede ejecutar los scripts Slurper de Plugin / Tema usando cygwin.

    
respondido por el Dave Romsey 18.10.2016 - 04:19
0
  1. no seas genérico, usa alguna variación de tu nombre.
  2. Nadie que instale nuevos complementos ya usa PHP 5.2 (octubre de 2016), solo usa el espacio de nombres de PHP y hace que sea algo largo pero relevante como el nombre del complemento.
respondido por el Mark Kaplun 18.10.2016 - 04:48

Lea otras preguntas en las etiquetas