Làm thế nào để kiểm tra tính duy nhất của tiền tố plugin?


11

Để tránh xung đột với các plugin khác, người ta nên thêm tiền tố vào tất cả các chức năng, hành động và plugin toàn cầu với một tiền tố duy nhất, ví dụ:

function xyz_function_name() { ... }

Câu hỏi là, làm thế nào để tôi xác minh đó xyzlà thực sự độc đáo? Chẳng hạn, Yoast SEO sử dụng wpseo_mà tôi có thể tưởng tượng các plugin SEO khác cũng có thể dễ dàng sử dụng. Cách tốt nhất để tìm kiếm các plugin WordPress có sẵn cho các va chạm tiềm năng là gì? Hay là có?


4
Tiền tố là một điều của quá khứ. Ngày nay chúng ta sử dụng các không gian tên và bạn có thể lồng những cái đó sâu như bạn cần.
fuxia

Tôi sẽ cập nhật câu hỏi để bao gồm các hành động và bộ lọc mang tính toàn cầu và không thể được thêm tiền tố vào các lớp.
Borek Bernard

với bản cập nhật đó, đây là một câu hỏi rất tốt
prosti

1
Tôi đã bỏ phiếu này vì tôi nghĩ rằng câu trả lời sẽ khó. Nhưng tôi thực sự không nghĩ rằng điều này là cần thiết vì có khả năng có vô số kết hợp tiền tố và tên hàm. Tôi nghĩ rằng giải pháp thực sự là chi tiết hơn trong tên hàm. Ngoài ra, và có thể quá mức cần thiết, nhưng một hậu tố có thể được thêm vào.
stims

Câu trả lời:


5

Bạn có thể sử dụng tập lệnh shell Slurper Directory Directory Plugin của Mark Jaquith để tải xuống phiên bản mới nhất của tất cả các plugin từ repo WordPress.org. Khi các plugin đã được tải xuống, bạn có thể grep cho tiền tố plugin / hook mà bạn muốn kiểm tra, ví dụ:

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

Giải nén gói Slurper thư mục Pluginresres vào thư mục gốc của bạn. Tên thư mục mặc định là WordPress-Plugin-Directory-Slurpervà nó chứa:

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

Chạy tập lệnh bash bằng cách thực thi php updatetừ trong WordPress-Plugin-Directory-Slurperthư mục. Các plugin được nén sẽ được tải xuống /zipsvà giải nén /plugins. Toàn bộ repo là khoảng 15 GB và sẽ mất vài giờ để tải xuống lần đầu tiên.

Nội dung của updatekịch bả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";

Nếu bạn muốn tải xuống tất cả các chủ đề được phê duyệt gần đây nhất, cũng có một kịch bản cho điều đó: Thư mục chủ đề WordPress Slurper của Aaron Jorbin.

Các kịch bản shell này được thiết kế cho một hệ thống Unix. Nếu bạn đang sử dụng Windows, bạn có thể chạy các tập lệnh Slurper của Plugin / Theme Directory bằng cygwin.


0
  1. đừng chung chung, hãy sử dụng một số biến thể của tên bạn.
  2. Không ai cài đặt các plugin mới sử dụng PHP 5.2 nữa (oct 2016), chỉ cần sử dụng không gian tên PHP và làm cho nó một cái gì đó dài nhưng có liên quan như tên plugin.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.