如何检查插件前缀的唯一性?

时间:2016-10-14 作者:Borek Bernard

为了避免与其他插件发生冲突,应在所有全局函数、操作和插件前面加上唯一的前缀,例如:

function xyz_function_name() { ... }
问题是,我如何验证xyz 确实是独一无二的吗?例如,Yoast SEO使用wpseo_ 我可以想象其他SEO插件也可以轻松使用。搜索可用WordPress插件以查找潜在冲突的最佳方法是什么?还是有?

2 个回复
最合适的回答,由SO网友:Dave Romsey 整理而成

您可以使用WordPres Plugin Directory Slurper Mark Jaquith编写的shell脚本,用于从WordPress下载所有插件的最新版本。组织回购。下载插件后,您可以搜索要检查的插件/挂钩前缀,例如:

grep -r --include=*.php \'wpseo_\' ./
将WordPres插件目录Slurper包解压缩到您的文档根目录。默认目录名为WordPress-Plugin-Directory-Slurper 它包括:

  /plugins/
  /readmes/
  /zips/
  LICENSE
  README.markdown
  update
通过执行php update 从内部WordPress-Plugin-Directory-Slurper 目录压缩插件将下载到/zips 并提取到/plugins. 整个回购协议大约15GB,第一次下载需要几个小时。

的内容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";
如果您想下载所有最新批准的主题,这里也有一个脚本:WordPress Theme Directory Slurper 作者:亚伦·乔宾。

这些shell脚本是为Unix系统设计的。如果您使用的是Windows,那么可以使用cygwin运行插件/主题目录Slurper脚本。

SO网友:Mark Kaplun

不要泛泛而谈,使用你名字的一些变体

相关推荐