web-dev-qa-db-ja.com

私のプラグインがWordPress.orgリポジトリから拒否されたのはなぜですか?

私はWordPressのプラグインを作りました、そしてそれは動きます。しかし、WordPress.orgプラグインチームに送ったところ、彼らはこう答えました。

Wp-load.phpを直接呼び出す

Wp-config.php、wp-blog-header.php、wp-load.php、またはインクルードを介して直接呼び出さなければならない他のほとんどのWordPressコアファイルをインクルードすることはお勧めできません。ファイルをロードする非常に良い理由がない限り、そうします。すべてのWordPressインストールがまったく同じファイル構造を持っているわけではないので、失敗する傾向があります。通常のプラグインには、WordPressのコア機能にアクセスするためのwp-config.phpまたはwp-load.phpが含まれていますが、これを行うにはもっと良い方法があります。あなたが処理している関数(コア関数を必要としているがそれにアクセスできないもの)を "init"や "admin_init"のようなアクションフックに結び付けるのが最善です。

詳細については、Plugins APIリファレンスを参照してください。 http://codex.wordpress.org/Plugin_API AJAXを使用しようとしている場合は、こちらをご覧ください。これ: http://codex.wordpress.org/AJAX_in_Plugins

どうすればいいのかわかりません:(

これは私のプラグインです http://szymoon.nazwa.pl/plugins/Printer-Friendly-WP.Zip

正しいプラグインを作成する良い例はどこにありますか?あるいはWordPress.orgチームによって承認されたもの。

1
user33913

これは、プラグインフォルダ内からPHPファイルを直接呼び出すためです。これは2つの理由でまずいことです。1つは、wp-contentフォルダー内のPHPファイルへの直接アクセスをブロックしている人がいます。 2つ目は、WordPress APIにアクセスするためにwp-load.phpを含める必要があります。

にリンクする代わりに…

site_url().""."/wp-content/plugins/Printer-Friendly-WP/print.php?id=page_id="."".  get_the_ID()`

…これは直接リンクであり、壊れやすいです。現在の投稿のパーマリンクにquery argを追加するだけです…

add_query_arg( 'print-page', true, get_permalink() )

…そして、テンプレートがロードされる前に、URLにprint-pageクエリ引数が含まれているかどうかを確認します。

function load_printed_page() {
    if ( ! get_query_arg( 'print-page' ) || ! $postid = get_the_ID() )
        return;

        query_posts('p='.$postid)

        if (have_posts()) :
             while (have_posts()) : the_post(); ?>

            ...

        endwhile; endif;
}
add_action( 'template_redirect', 'load_printed_page' );

また、WP_Queryの代わりにquery_postsまたはget_posts()を使用する必要があります。

5
shea