web-dev-qa-db-ja.com

最小値を含める方法があります WP 現在のユーザー、その役割(caps?)だけを確認してから解放/解放しますか?

特定のサブディレクトリのファイルが何回ダウンロードされたかを数え、誰がそれをダウンロードしたのかを追跡する必要があります。

これを行うにはPhpファイルを使用しています。WPファイルではありませんが、現在のユーザー(認証されている場合)とその役割(および場合によっては上限)を取得するにはWPを含める必要があります。

見て あなたのウェブサイトとWordPressの統合 私は最初に使いました:

define('WP_USE_THEMES', false);
require('../wp-blog-header.php');

しかし、それから私はダウンロードに問題があり、エラー404 (file not found)を返しました。

同じコーデックスの記事の下の方に幸いなことに、この提案があります。 wp-blog-header.phpを含む外部ページの誤った404ヘッダを修正する

提案に従って、私はinitを使いました。

require_once("../wp-config.php");
$wp->init();

それでも、$GLOBALSを検討することで、必要以上に多くのことが行われ、残っていると思います。

私はダウンロードにreadfileを使用しています、ファイルサイズはおそらくhugeです、ユーザーチェックは以前に行われています、最小のWPをできるだけ早く含めてリリースするのが理想的です。ユーザーチェックの直後、readfileの前のWPリソース。

それで、現在のユーザ、その役割(caps?)だけをチェックするための最小限のWPを含めて、それを解放/解放する方法があります。

私はまたwp-load.phpが使われているのを見て周りを探し回っていますno noこれらのすべてのwp-*を直接含んでいるが、を含むについて私の場合ではなく、プラグインで、直接インクルードすることについてまだ心配する必要がありますか?

2
Alex

Wp- *ファイルを直接ロードすることについてのno noは、WordPressのプラグインやテーマを開発している場合には妥当ですが、必要な外部コードを開発している場合WP(そしてそれはあなたのケースのようです)あなたよりもそのファイルを要求しなければなりません、選択肢はありません。

WordPressのURLまたは完全なWordPressフロントエンドを処理する必要がある場合はwp-blog-header.phpを含める必要がありますが、wp-load.phpを含むWordPress機能が必要である場合は$wp->init();を使用する必要はありません。

また、SHORTINIT定数をtrueに設定するとロードが速くなりますが、そうすることでWordPressのいくつかの機能が利用できなくなり、ユーザーチェックもその1つになります。

ただし、必要なファイルが少なく、いくつかの関数を呼び出すと、ユーザー機能を確認できます。

<?php
define( 'SHORTINIT', 1 );
require '../wp-load.php'; // adjust according to your paths
require ABSPATH . WPINC . '/formatting.php';
require ABSPATH . WPINC . '/capabilities.php';
require ABSPATH . WPINC . '/user.php';
require ABSPATH . WPINC . '/meta.php';
require ABSPATH . WPINC . '/post.php';
require ABSPATH . WPINC . '/pluggable.php';
wp_plugin_directory_constants();
wp_cookie_constants();

if( current_user_can( 'manage_options' ) ) { // check capability
  $GLOBALS = array(); // free some memory

  // require your file here

} else {
  header("HTTP/1.1 401 Unauthorized");
  exit;
}
2
gmazzap