it-swarm-vi.tech

Mục tiêu thực tiễn tốt nhất để phát triển plugin?

Bắt đầu một wiki cộng đồng để thu thập mục tiêu thực tiễn tốt nhất để phát triển plugin. Câu hỏi này được lấy cảm hứng từ @ EAMann bình luận về wp-hackers .

Ý tưởng là hợp tác về những thực tiễn tốt nhất khách quan có thể để cuối cùng chúng ta có thể sử dụng chúng trong một số quy trình đánh giá cộng tác.

CẬP NHẬT: Sau khi thấy một vài phản hồi đầu tiên, rõ ràng là chúng ta chỉ cần có một ý tưởng/đề xuất/thực hành tốt nhất cho mỗi câu trả lời và mọi người nên xem lại danh sách để đảm bảo không có trùng lặp trước khi đăng.

131
MikeSchinkel

Sử dụng hành động và bộ lọc

Nếu bạn nghĩ mọi người muốn thêm hoặc thay đổi một số dữ liệu: cung cấp áp dụng_filters () trước khi quay lại .

P.S. Một điều tôi cảm thấy hơi thất vọng và địa chỉ câu hỏi của bạn là tỷ lệ phần trăm các plugin được thiết kế chỉ dành cho người dùng cuối, tức là không có móc nối của riêng họ. Hãy tưởng tượng nếu WordPress được thiết kế giống như hầu hết các plugin? Nó sẽ không linh hoạt và là một giải pháp rất thích hợp.

Có lẽ mọi thứ sẽ khác nếu WordPress có khả năng tự động cài đặt các plugin mà các plugin khác phụ thuộc vào? Vì tôi thường phải viết rất nhiều chức năng tôi cần từ đầu vì khách hàng muốn mọi thứ theo một cách nhất định và các plugin có sẵn, trong khi 90% ở đó, không cho phép tôi linh hoạt cập nhật 10% còn lại.

Tôi thực sự mong muốn những người dẫn đầu cộng đồng WordPress sẽ xác định một cách để đảm bảo rằng các plugin được khen thưởng khi tuân theo các thực tiễn tốt nhất (như thêm móc nối cho các nhà phát triển khác) giống như các câu trả lời tốt được thưởng trên trang web StackExchange.

Hãy lấy một ví dụ từ một câu hỏi khác :

Ví dụ: Tôi muốn làm một cái gì đó trong plugin của mình khi ai đó đăng lại bài viết. Nếu có một cái móc tùy chỉnh trong bất cứ thứ gì mà plugin rạn phổ biến là tôi có thể nối vào và thoát ra, điều đó thật tuyệt. Không có, vì vậy tôi có thể sửa đổi plugin của họ để bao gồm nó, nhưng nó chỉ hoạt động cho bản sao của tôi và tôi không muốn cố gắng phân phối lại.

Liên quan

69
Arlen Beiler

Tải tập lệnh/CSS bằng wp_enqueue_scriptwp_enqueue_style

Các plugin không nên tải/cố tải các phiên bản trùng lặp của các tệp JS/CSS, đặc biệt là jQuery và các tệp JS khác có trong WP Core.

Các plugin phải luôn sử dụng wp_enqueue_scriptwp_enqueue_style khi liên kết các tệp JS và CSS và không bao giờ trực tiếp qua các thẻ <script>.

Liên quan

53
Rick Curran

Hỗ trợ I18n

Tất cả các chuỗi đầu ra phải được liên kết với một miền văn bản phù hợp để cho phép quốc tế hóa bởi các bên quan tâm, ngay cả khi nhà phát triển không quan tâm đến việc dịch trình cắm của riêng họ.

Lưu ý rằng việc tải các tệp ngôn ngữ trong hành động init là rất quan trọng để người dùng có thể nối vào hành động.

Xem Codex: I18n dành cho Nhà phát triển WordPress

Và cũng bài viết này: Đang tải WP tệp ngôn ngữ chính xác .

Kể từ WordPress 4.6+

WP 4.6 đã thay đổi thứ tự tải và các vị trí được kiểm tra, nó đã giúp các nhà phát triển và người dùng dễ dàng hơn rất nhiều.

Xem xét một plugin có tên miền văn bản 'my-plugin', WordPress giờ đây sẽ ĐẦU TIÊN tìm kiếm một tệp dịch trong:
[.__.] /wp-content/lacular/plugins/my-plugin-en_US.mo

Nếu nó không tìm thấy ở đó thì nó sẽ tìm một cái mà plugin yêu cầu nó tìm (thông thường trong thư mục 'ngôn ngữ' của pluigns nếu theo codex):
[.__.] /wp-content/plugins/my-plugin/lacular/my-plugin-en_US.mo

Cuối cùng, nếu không tìm thấy tệp ngôn ngữ, nó sẽ kiểm tra vị trí mặc định của:
[.__.] /wp-content/lacular/my-plugin-en_US.mo

Kiểm tra đầu tiên đã được thêm vào 4.6 và cung cấp cho người dùng một vị trí xác định để thêm tệp ngôn ngữ, vì trước đó họ cần biết nhà phát triển đã thêm tệp ngôn ngữ ở đâu, bây giờ người dùng chỉ cần biết miền văn bản của plugin:/wp -content/ngôn ngữ/plugin/TEXTDOMAIN-LOCAL.mo


Dưới đây là cách cũ (Không liên quan vì WP 4.6+)

[...]
[.__.] Cuối cùng, tôi muốn chỉ ra rằng điều quan trọng là tải các tệp ngôn ngữ người dùng tùy chỉnh từ WP_LANG_DIR trước khi bạn tải các tệp ngôn ngữ đi kèm với plugin . Khi nhiều tệp mo được tải cho cùng một tên miền, bản dịch tìm thấy đầu tiên sẽ được sử dụng. Bằng cách này, các tệp ngôn ngữ được cung cấp bởi plugin sẽ đóng vai trò dự phòng cho các chuỗi không được dịch bởi người dùng.

public function load_plugin_textdomain()
{
    $domain = 'my-plugin';
    // The "plugin_locale" filter is also used in load_plugin_textdomain()
    $locale = apply_filters( 'plugin_locale', get_locale(), $domain );

    load_textdomain( 
            $domain, 
            WP_LANG_DIR . '/my-plugin/' . $domain . '-' . $locale . '.mo' 
    );
    load_plugin_textdomain( 
            $domain, 
            FALSE, 
            dirname( plugin_basename(__FILE__) ) . '/languages/' 
    );
}
49
EAMann

Đảm bảo các plugin tạo không có lỗi với WP_DEBUG

Luôn kiểm tra các plugin của bạn với WP_DEBUG bật và lý tưởng là nó được bật trong suốt quá trình phát triển của bạn. Một plugin không nên ném BẤT K error lỗi nào với WP_DEBUG. Điều này bao gồm các thông báo không dùng nữa và các chỉ mục không được kiểm tra.

Để bật gỡ lỗi, hãy chỉnh sửa tệp wp-config.php của bạn để hằng số WP_DEBUG được đặt thành true. Xem Codex trên Debug để biết thêm chi tiết.

47
John P Bloch

Sử dụng chức năng hiện có đầu tiên trong WordPress Core

Nếu bạn có thể: sử dụng các chức năng hiện có trong lõi WordPress thay vì viết riêng của bạn. Chỉ phát triển các hàm PHP tùy chỉnh khi không có chức năng tồn tại trước thích hợp trong lõi WordPress.

Một lợi ích là bạn có thể sử dụng "thông báo không dùng nữa" để dễ dàng theo dõi các chức năng cần được thay thế. Một lợi ích khác là người dùng có thể xem tài liệu chức năng trong Codex và hiểu rõ hơn về plugin làm gì ngay cả khi họ không phải là nhà phát triển PHP có kinh nghiệm.

Liên quan

41
kaiser

Gỡ cài đặt sẽ xóa tất cả dữ liệu của plugin

Khi bị xóa khỏi cài đặt WordPress, plugin sẽ xóa tất cả các tệp, thư mục, mục cơ sở dữ liệu và bảng mà nó đã tạo cũng như giá trị tùy chọn nó được tạo.

Plugin có thể cung cấp tùy chọn để xuất/nhập cài đặt, để các cài đặt có thể được lưu bên ngoài WordPress trước khi xóa.

Liên quan

33
Travis Northcutt

Ngăn chặn SQL tiêm với dữ liệu đầu vào

Một plugin nên vệ sinh tất cả đầu vào của người dùng được truy xuất trực tiếp hoặc gián tiếp (ví dụ: qua $_POST hoặc $_GET) trước khi sử dụng các giá trị đầu vào để truy vấn cơ sở dữ liệu MySQL.

Xem: Định dạng các câu lệnh SQL .

33
MikeSchinkel

Sử dụng một mã PHP5 hướng đối tượng và lớp

Không có lý do gì để không viết mã PHP5 hướng đối tượng sạch. Hỗ trợ PHP4 sẽ loại bỏ sau khi phát hành tiếp theo (WP 3.1). Tất nhiên, bạn có thể tiền tố tất cả các tên hàm của bạn để kết thúc với endless_long_feft_names_with_lots_of_underscores, nhưng sẽ dễ dàng hơn nhiều khi chỉ cần viết một lớp đơn giản và gói mọi thứ trong đó. Ngoài ra, đặt lớp của bạn trong một tệp riêng biệt và đặt tên cho phù hợp để bạn có thể dễ dàng mở rộng và duy trì nó:

// in functions.php
require 'inc/class-my-cool-plugin.php';
new MyCoolPlugin();

// in inc/class-my-cool-plugin.php
class MyCoolPlugin {
    function __construct() {
        // add filter hooks, wp_enqueue_script, etc.

        // To assign a method from your class to a WP 
        // function do something like this
        add_action('admin_menu', array($this, "admin"));
    }

    public function admin() {
        // public methods, for use outside of the class
        // Note that methods used in other WP functions 
        // (such as add_action) should be public
    }

    private function somethingelse() {
        // methods you only use inside this class
    }
}
30
Husky

Tiền tố Tất cả các mục không gian tên toàn cầu

Một plugin nên có tiền tố đúng TẤT CẢ các mục không gian tên toàn cầu (hằng, hàm, lớp, biến, thậm chí những thứ như phân loại tùy chỉnh, loại bài đăng, widget, v.v.). Ví dụ: không tạo một hàm có tên init(); thay vào đó, hãy đặt tên cho nó giống như jpb_init().

Thông thường, nên sử dụng tiền tố ba hoặc bốn chữ cái trước tên hoặc để sử dụng PHP Tính năng không gian tên . So sánh: Tiền tố một chữ cái cho các hằng số lớp PHP?

Liên quan

29
John P Bloch

Việc hủy kích hoạt không được kích hoạt Mất dữ liệu

Plugin không nên xóa bất kỳ dữ liệu nào của nó khi hủy kích hoạt.

Liên quan

25
MikeSchinkel

Chỉ bao gồm các tệp mà bạn cần ...

Nếu bạn ở giao diện người dùng, đừng bao gồm mã liên quan đến khu vực quản trị.

23
Denis de Bernardy

Thông báo mất dữ liệu khi gỡ cài đặt plugin

Sau khi gỡ cài đặt một plugin nênNhắc người dùng rằng nó sẽ xóa dữ liệu đó và nhận được xác nhận rằng người dùng vẫn ổn với việc xóa dữ liệu trước khi thực hiện và một plugin nêncũng cho phép người dùng tùy chọn giữ dữ liệukhi gỡ cài đặt. (Ý tưởng này từ @EAMann.)

Liên quan

21
MikeSchinkel

Sử dụng WordPress (tích hợp) Xử lý lỗi

Đừng chỉ return; nếu một số người dùng nhập sai. Cung cấp cho họ một số thông tin về đã được thực hiện sai.

function some_example_fn( $args = array() ) 
{
    // If value was not set, build an error message
    if ( ! isset( $args['some_value'] ) )
        $error = new WP_Error( 'some_value', sprintf( __( 'You have forgotten to specify the %1$s for your function. %2$s Error triggered inside %3$s on line %4$s.', TEXTDOMAIN ), '$args[\'some_value\']', "\n", __FILE__, __LINE__ ) );

    // die & print error message & code - for admins only!
    if ( isset( $error ) && is_wp_error( $error ) && current_user_can( 'manage_options' ) ) 
        wp_die( $error->get_error_code(), 'Theme Error: Missing Argument' );

    // Elseif no error was triggered continue...
}

Một lỗi (đối tượng) cho tất cả

Bạn có thể thiết lập một đối tượng lỗi toàn cầu cho chủ đề hoặc plugin của mình trong quá trình bootstrap:

function bootstrap_the_theme()
{
    global $prefix_error, $prefix_theme_name;
    // Take the theme name as error ID:
    $theme_data = wp_get_theme();
    $prefix_theme_name = $theme_data->Name;
    $prefix_error = new WP_Error( $theme_data->Name );

    include // whatever, etc...
}
add_action( 'after_setup_theme', 'bootstrap_the_theme' );

Sau này bạn có thể thêm lỗi không giới hạn theo yêu cầu:

function some_theme_fn( $args )
{
    global $prefix_error, $prefix_theme_name;
    $theme_data = wp_get_theme();
    if ( ! $args['whatever'] && current_user_can( 'manage_options' ) ) // some required value not set
        $prefix_error->add( $prefix_theme_name, sprintf( 'The function %1$s needs the argument %2$s set.', __FUNCTION__, '$args[\'whatever\']' ) );

    // continue function...
}

Sau đó, bạn có thể lấy tất cả chúng ở cuối chủ đề của bạn. Bằng cách này, bạn không làm gián đoạn hiển thị trang và vẫn có thể xuất tất cả các lỗi để phát triển

function dump_theme_errors()
{
    global $prefix_error, $prefix_theme_name;

    // Not an admin? OR: No error(s)?
    if ( ! current_user_can( 'manage_options' ) ! is_wp_error( $prefix_error ) )
        return;

    $theme_errors = $prefix_error->get_error_messages( $prefix_theme_name );
    echo '<h3>Theme Errors</h3>';
    foreach ( $theme_errors as $error )
        echo "{$error}\n";
}
add_action( 'shutdown', 'dump_theme_errors' );

Bạn có thể tìm thêm thông tin tại Q này . Một vé liên quan để sửa lỗi "làm việc cùng nhau" của WP_Errorwp_die() được liên kết từ đó và một vé khác sẽ theo sau. Bình luận, phê bình và như vậy được đánh giá cao.

19
kaiser

Đặt tên thư mục của plugin

/ plugin/pluginname/{khác nhau}

"Pluginname" được sử dụng cho thư mục phải luôn luôn thay đổi.

Điều này thường được xử lý bằng cách xác định các hằng số và sử dụng chúng một cách nhất quán trong suốt plugin.

Không cần phải nói nhiều plugin phổ biến là tội nhân.

Liên quan:

  • plugins_url() để dễ dàng liên kết với các tài nguyên, đi kèm với plugin.
19
AndyBeard

Giảm thiểu tên được thêm vào không gian tên toàn cầu

Plugin nên giảm tác động của nó càng nhiều càng tốt bằng cách giảm thiểu số lượng tên mà nó thêm vào không gian tên toàn cầu .

Điều này có thể được thực hiện bằng cách đóng gói các chức năng của plugin vào một lớp hoặc bằng cách sử dụng tính năng PHP không gian tên . Tiền tố mọi thứ cũng có thể giúp nhưng không linh hoạt.

Bên cạnh các hàm và lớp, một plugin không nên giới thiệu các biến toàn cục. Sử dụng các lớp thường làm lỗi chúng và nó đơn giản hóa việc bảo trì plugin.

Liên quan

18
hakre

Nhận xét bằng PhpDoc

Thực hành tốt nhất là gần với phong cách PhpDoc. Nếu bạn không sử dụng IDE như "Nhật thực", bạn có thể xem tại Hướng dẫn PhpDoc .

Bạn không cần phải biết chính xác làm thế nào điều này hoạt động. Các nhà phát triển chuyên nghiệp có thể đọc mã bằng mọi cách và chỉ cần điều này như một bản tóm tắt. Các lập trình viên và người dùng sở thích có thể đánh giá cao cách bạn giải thích nó ở cùng cấp độ kiến ​​thức.

17
kaiser

Sử dụng API cài đặt trước khi add_option

Thay vì thêm tùy chọn vào DB thông qua chức năng add_option, bạn nên lưu trữ chúng dưới dạng một mảng bằng cách sử dụng API Cài đặt sẽ chăm sóc mọi thứ cho bạn.

Sử dụng API sửa đổi chủ đề trước khi add_option

API sửa đổi là một cấu trúc khá đơn giản và là cách an toàn cho phép thêm và truy xuất các tùy chọn. Mọi thứ được lưu dưới dạng giá trị nối tiếp trong cơ sở dữ liệu của bạn. Dễ dàng, an toàn & đơn giản.

17
kaiser

Bảo vệ quyền riêng tư của người dùng Plugin

(Trước đây: Truyền thông API ẩn danh)

Nếu trình cắm giao tiếp với hệ thống bên ngoài hoặc API (ví dụ: một số Dịch vụ web), thì trình cắm đó sẽ ẩn danh hoặc cung cấp cho người dùng một tùy chọn ẩn danh để đảm bảo rằng không có dữ liệu nào liên quan đến người dùng plugin bị rò rỉ cho bên thứ hai không bị kiểm soát.

16
EAMann

Cung cấp Kiểm soát truy cập bằng cách sử dụng Quyền

Trong nhiều trường hợp, người dùng có thể không muốn tất cả mọi người có quyền truy cập vào các khu vực được tạo bởi plugin của bạn, đặc biệt với các plugin thực hiện nhiều thao tác phức tạp, một kiểm tra khả năng mã hóa cứng có thể không đủ.

Ít nhất, hãy kiểm tra khả năng phù hợp cho tất cả các loại thủ tục khác nhau mà plugin của bạn có thể được sử dụng.

15
eddiemoya

Plugin lưu trữ trên WordPress.org

Sử dụng SVN repository được cung cấp trên WordPress.org để lưu trữ các plugin. Nó giúp cho trải nghiệm người dùng cập nhật dễ dàng hơn và nếu bạn chưa từng sử dụng SVN trước đây, điều đó khiến bạn thực sự hiểu bằng cách sử dụng nó trong ngữ cảnh chứng minh điều đó.

14
pixeline

Sắp xếp mã của bạn

Thật khó để đọc mã không được viết theo thứ tự nó được thực thi. Trước tiên, bao gồm/yêu cầu, xác định, wp_enqueue_style & _script, v.v.

Cố gắng tách những thứ như css và js trong các thư mục riêng của họ. Cũng cố gắng làm điều này với các chức năng chỉ là người trợ giúp, như làm phẳng mảng và tương tự. Giữ tệp "chính" sạch và dễ đọc nhất có thể là cách giúp người dùng, nhà phát triển và bạn, khi bạn cố cập nhật trong một năm và không thấy mã trong thời gian dài hơn.

Thật tốt khi có một cấu trúc bạn lặp lại thường xuyên, vì vậy bạn luôn tìm thấy con đường của mình. Phát triển theo cấu trúc đã biết trên các dự án khác nhau sẽ cho bạn thời gian để làm cho nó tốt hơn và ngay cả khi khách hàng của bạn chuyển sang nhà phát triển khác, bạn sẽ không bao giờ nghe thấy "anh ta để lại một sự hỗn loạn". Điều này xây dựng danh tiếng của bạn và nên là một mục tiêu dài hạn.

12
kaiser

Nhập/xuất cài đặt plugin

Nó không phổ biến trên các plugin, nhưng nếu plugin của bạn có (một số) cài đặt, thì nó nên cung cấp Nhập/Xuất dữ liệu như cấu hình và đầu vào của người dùng .

Nhập/Xuất cải thiện khả năng sử dụng của plugin.

Một plugin mẫu có chức năng nhập và xuất như vậy (và cũng là cơ chế hoàn tác) là Breadcrumb NavXT (Plugin Wordpress) (tiết lộ đầy đủ: một số mã nhỏ của tôi trong đó, hầu hết đã được mtekk thực hiện) .

Liên quan

12
hakre

Chết với phong cách

chết một cách tử tế Tất cả các chức năng của plugin (và thậm chí cả chủ đề) nên sử dụng wp_die() ở những nơi quan trọng để cung cấp cho người dùng một ít thông tin về những gì đã xảy ra. Lỗi php gây phiền nhiễu và wp_die có thể cung cấp cho người dùng một thông báo theo kiểu Nice về những gì plugin (hoặc họ) đã làm sai. Thêm vào đó, nếu người dùng đã gỡ lỗi, plugin sẽ bị hỏng.

Sử dụng wp_die() cũng giúp các plugin/chủ đề của bạn tương thích với kiểm tra wordpress .

11
kaiser

Cung cấp màn hình trợ giúp cho người dùng

Sẽ tốt hơn khi nói RTFM (nhấp trợ giúp) như một câu trả lời hơn là phải trả lời câu hỏi hết lần này đến lần khác.

/**
  * Add contextual help for this screen
  * 
  * @param $rtfm
  * @uses get_current_screen
  */ 
  function ContextualHelp( /*string*/ $rtfm) 
  { 
     $current_screen = get_current_screen();
     if ($current_screen->id == $this->_pageid) 
     {
        $rtfm .= '<h3>The WordPress Plugin - Screen A</h3>';
        $rtfm .= '<p>Here are some tips: donate to me ' .
     }
     return $rtfm; 
  }
add_action('contextual_help', array($this,'ContextualHelp'),1,1);

update/note: (xem bình luận từ kaiser): ví dụ trên sẽ được sử dụng trong một lớp

11
edelwater

Cung cấp các hình thức mở rộng

Khi một plugin cung cấp khả năng sở hữu dữ liệu đầu vào, nó phải luôn có một dấu móc ở cuối, ngay trước nút "gửi" và/hoặc "đặt lại", để các nhà phát triển có thể dễ dàng mở rộng biểu mẫu với không chỉ các trường, mà cả các nút.

Xem: API cài đặt

Liên quan

10
kaiser

bao gồm chức năng luôn thông qua Hook, không trực tiếp.

Thí dụ:

  • Không sử dụng để bao gồm lớp của plugin thông qua mới mà không cần hook

  • Sử dụng plugin Hookins_loaded

    // add the class to WP                                   
    function my_plugin_start() {                                                               
        new my_plugin();   
    }                                                        
    add_action( 'plugins_loaded', 'my_plugin_start' );
    

Cập nhật: một ví dụ trực tiếp nhỏ: Plugin-svn-trunk-page và một ví dụ giả

//avoid direct calls to this file where wp core files not present
if (!function_exists ('add_action')) {
        header('Status: 403 Forbidden');
        header('HTTP/1.1 403 Forbidden');
        exit();
}

if ( !class_exists( 'plugin_class' ) ) {
    class plugin_class {

        function __construct() {
        }

    } // end class

    function plugin_start() {

        new plugin_class();
    }

    add_action( 'plugins_loaded', 'plugin_start' );
} // end class_exists

Bạn cũng có thể tải qua mu_plugins_loaded trên multisite-install, xem codex để tham khảo hành động: http://codex.wordpress.org/Plugin_API/Action_Referencehttp://adambrown.info/p/wp_hooks/hook/plugins_loaded?version=2.1&file=wp-sinstall.php Tôi sử dụng nó rất thường xuyên và nó không quá khó và sớm, tốt hơn là mới lớp học();

9
bueltge

Mô tả plugin của bạn nên chi tiết chính xác các chức năng của plugin của bạn. Có 10 plugin bài đặc trưng. Tất cả đều hiển thị các bài đăng nổi bật, nhưng nhiều người có các tính năng khác nhau. Thật dễ dàng để so sánh plugin của bạn với các plugin tương tự bằng cách đọc mô tả.

Bạn nên tránh khoe khoang về cách plugin của bạn đơn giản trừ khi nó thực sự rất cơ bản. Bạn nên bao gồm các liên kết hữu ích trong mô tả như liên kết đến cài đặt.

8
Greg

Plugins giấy phép theo Giấy phép tương thích GPL

Plugin và chủ đề nên được cấp phép theo giấy phép tương thích với WordPress. Điều này cho phép chúng được phân phối lại với WordPress dưới dạng "chương trình". Giấy phép được đề xuất là GPL . Cẩn thận rằng tất cả các thư viện mã đi kèm với trình cắm đều tương thích với cùng một giấy phép.

(Điều này đã là một vấn đề và nghiêm trọng điểm tranh luận cả trong quá khứ và hiện tại .)

8
EAMann

Giảm thiểu tác dụng phụ của Nguồn dữ liệu từ xa và Dịch vụ web

Plugin nên Cache/Shield Webservice và/hoặc XMLRPC/SOAP yêu cầu thông qua lớp bộ đệm/nhà cung cấp dữ liệu nếu bạn sử dụng chúng để không thực hiện các yêu cầu trước chờ chậm) đáp ứng dịch vụ web.

Điều đó bao gồm việc tải xuống RSS feed và các trang khác. Thiết kế các plugin của bạn mà họ yêu cầu dữ liệu ở chế độ nền.

Một BƯỚC có thể là (Lấy bài đăng lên ping.fm làm ví dụ): Tạo bảng đệm, giả sử: ping_fm_buffer_post (ngày, giờ, tin nhắn, submit_time, trạng thái)

  1. Đối với mỗi lần bạn muốn gửi cập nhật cho ping.fm, hãy thêm nó vào bảng này.
  2. Bây giờ, chúng ta cần tạo một plugin để xử lý dữ liệu này. Plugin này sẽ chạy qua crontab để kiểm tra mọi bản cập nhật chưa được gửi
  3. Vì chúng tôi có bảng này, chúng tôi cũng có thể liệt kê mọi tin nhắn được gửi tới ping.fm và kiểm tra trạng thái của từng bài đăng. Chỉ trong trường hợp có vấn đề về phía ping.fm, chúng tôi có thể gửi lại.
7
hakre

Kiểm tra plugin của bạn

Chúng tôi chắc chắn nên có một số công cụ kiểm tra trên môi trường phát triển plugin của chúng tôi.

Dựa trên câu trả lời này bởi Ethan Seifert cho một câu hỏi kiểm tra, đây là những thực hành tốt để làm theo:

  • Kiểm thử đơn vị của bạn nên kiểm tra lượng hành vi nhỏ nhất mà một lớp có thể thực hiện.
  • Khi bạn đạt đến mức kiểm tra chức năng, đây là lúc bạn có thể kiểm tra mã của mình với các phụ thuộc Wordpress.
  • Tùy thuộc vào những gì plugin của bạn làm - xem xét sử dụng các thử nghiệm dựa trên Selenium để kiểm tra sự hiện diện của dữ liệu trong DOM bằng cách sử dụng ID
7
Fernando Briano

Sử dụng tên riêng

Tên móc và bộ lọc (lớp, chức năng và vars), vì vậy mọi người có thể nhận dạng chúng ngay cả trong một năm , khi họ không nhớ thêm nữa, nơi miếng bánh hoặc mã đó đến từ đâu. Sẽ không có vấn đề gì nếu tên hook/bộ lọc dài. Vd youruniquename_hook/filter_whatitdoes.

  • Nếu tệp của bạn chứa một lớp có tên "dbdbInit", thì tệp chứa lớp đó phải được đặt tên là "dbdbInit.class.php".
  • Nếu bạn có trong dbdbInit- class của bạn một hàm đăng ký ex. custom_post_types, sau đó gọi nó là register_custom_post_types().
  • Nếu bạn có một mảng chứa các tên cho custom_post_types, thì hãy gọi biến trong đó mảng được gán $custom_post_type_names.
  • Nếu bạn có một hàm xử lý một mảng, hãy viết function array_handler( $array ) { // handle the array} ..
  • Chỉ cần cố gắng đặt tên cho mọi thứ theo cách bạn biết dấu hiệu đó làm gì/nó thuộc về cái tên nào.

Một điều nữa: Nếu bạn phải gỡ lỗi nội dung sau đó, trong 99% tất cả các trường hợp, bạn nhận được tất cả các tin nhắn không chỉ cho mã của bạn, mà còn cho cả wordpress. Vì vậy, hãy thử sử dụng cùng một tiền tố ex. "dbdb" cho các lớp, hàm công khai và biến/đối tượng của bạn. Bằng cách này bạn có thể tìm thấy chúng dễ dàng giữa hàng trăm tệp. (Wordpress tải 64 tệp trước chủ đề của bạn và khoảng 1.550 chức năng, không nói về móc và bộ lọc.)

6
kaiser

Quan tâm đến các phiên bản WordPress và chủ đề trong tương lai

Lưu ý: Sau khi đọc lại lời khuyên này, bây giờ tôi rút lui khỏi thực tiễn này vì việc kiểm tra mọi chức năng để tồn tại có thể làm chậm trang web của bạn.

Kiểm tra xem các chức năng có bị phản đối không trực tiếp trong chủ đề của bạn.

Đây là một ví dụ "có thể như thế".

if ( ! function_exists( 'wp_some_fn' ) ) 
{
    $theme_data = wp_get_theme();
    $error = new WP_Error( 'wp_some_fn', sprintf( __( 'The function %1$s is deprecated. Please inform the author', TEXTDOMAIN ), "Theme: {$theme_data->Name}: Version {$theme_data->Version}" );

    // abort
    if ( is_wp_error( $error ) )
        return print $error->get_error_message();
} 
// else if no error - the function works and exists
wp_some_fn();

Để xử lý lỗi thực hành đúng/tốt nhất, hãy xem câu trả lời sau: link

Bạn có thể bỏ ngay cả nguyên nhân $ vào hàm. Điều này sẽ giúp bạn và người dùng của bạn theo dõi các chức năng hoặc các lớp trong chủ đề của bạn có thể thay đổi.

6
kaiser

Sử dụng Tiêu chuẩn mã hóa của WordPress

http://codex.wordpress.org/WordPress_Coding_St Chuẩns

Bạn có biết việc cập nhật mã mà bạn đã làm việc dễ dàng hơn so với mã mà người khác đã kết hợp dễ dàng đến mức nào không? Các tiêu chuẩn mã hóa giúp mọi nhà phát triển làm việc trong một dự án đến và xem những gì đang diễn ra dễ dàng hơn.

Chúng tôi biết plugin hoặc chủ đề của bạn là của riêng bạn và cách bạn ngắt dòng và thêm dấu ngoặc nhọn là biểu hiện của tính cá nhân của bạn. Mỗi thụt là một tuyên bố suy nghĩ cẩn thận. Nhưng với mã tùy chỉnh của bạn, bạn đang đóng góp cho WordPress, ngay cả khi mã của bạn không nằm trong ứng dụng cốt lõi. Các tiêu chuẩn mã hóa giúp các nhà phát triển nhanh chóng đạt được tốc độ với mã của bạn.

6
gabrielk

Tách từ mã lõi WordPress

Plugin nên giảm tác động của API WordPress xuống mức tối thiểu cần thiết so để tách mã plugin khỏi mã WordPress. Điều này làm giảm tác động của những thay đổi trong cơ sở mã WordPress trên plugin. Ngoài ra, điều này cải thiện khả năng tương thích phiên bản chéo của mã plugin của bạn.

Điều này không có nghĩa là không sử dụng các chức năng của WordPress (sử dụng chúng, như Sử dụng lại các chức năng hiện có gợi ý), nhưng không kết nối mã của bạn với các chức năng WordPress quá nhiều mà để tách biệt logic kinh doanh của plugin từ chức năng WordPress.

6
hakre

Sử dụng tùy chọn wp cho chuỗi đầu ra plugin

Để làm cho plugin dễ dàng sử dụng và tùy chỉnh, tất cả các chuỗi đầu ra phải có thể sửa đổi. Cách tốt nhất để làm điều đó là sử dụng các tùy chọn wp để lưu trữ các chuỗi đầu ra và cung cấp phụ trợ để thay đổi các giá trị mặc định. Plugin không nên sử dụng các chuỗi hiển thị không thể thay đổi dễ dàng bằng cách sử dụng phụ trợ plugin.

Ví dụ: Socible - cung cấp cho bạn khả năng thay đổi câu xuất hiện trước phần biểu tượng "chia sẻ và thưởng thức:"

5
hannit cohen

Sử dụng gỡ cài đặt, kích hoạt và hủy kích hoạt móc

Có ba móc khác nhau cho việc này:

  • Gỡ cài đặt register_uninstall_hook();
  • Vô hiệu hóa register_deactivation_hook();
  • Kích hoạt register_activation_hook();

Một hướng dẫn chi tiết với một ví dụ làm việc có thể được tìm thấy ở đây. .

3
kaiser