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

11

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 xyzsea ​​realmente único? Por ejemplo, Yoast SEO utiliza lo wpseo_que me imagino que otro plugin de SEO también podría usar fácilmente. ¿Cuál es la mejor manera de buscar posibles complementos en los complementos de WordPress disponibles? O hay

Borek Bernard
fuente
44
Los prefijos son cosa del pasado. Hoy en día usamos espacios de nombres, y puede anidarlos tan profundamente como lo necesite.
fuxia
Actualizaré la pregunta para incluir acciones y filtros que sean globales y no se puedan prefijar usando clases.
Borek Bernard
con esa actualización, esta es una muy buena pregunta
prosti
1
He votado esto porque creo que la respuesta va a ser difícil. Pero realmente no creo que esto sea necesario, ya que potencialmente hay un número infinito de combinaciones de prefijos y nombres de funciones. Creo que la solución real es ser más detallado en el nombre de la función. Además, y tal vez exagerado, pero se podría agregar un postfix.
stims

Respuestas:

5

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

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

Descomprima el paquete Slurper de directorio de plugins de WordPres en la raíz de su documento. El nombre del directorio predeterminado es WordPress-Plugin-Directory-Slurpery contiene:

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

Ejecute el script bash ejecutándolo php updatedesde dentro del WordPress-Plugin-Directory-Slurperdirectorio. Los complementos comprimidos se descargarán /zipsy extraerán en /plugins. El repositorio completo es de alrededor de 15 GB y la descarga tardará varias horas en descargarse por primera vez.

El contenido del updateguión:

#!/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 de Aaron Jorbin.

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

Dave Romsey
fuente
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 use el espacio de nombres PHP y haga que sea algo largo pero relevante como el nombre del complemento.
Mark Kaplun
fuente