web-dev-qa-db-fra.com

il y a un moyen d'inclure un minimum WP pour vérifier uniquement l'utilisateur actuel, ses rôles (majuscules?), puis le relâcher/le libérer?

Je dois compter le nombre de fois où un fichier d'un sous-répertoire est téléchargé et savoir qui l'a téléchargé.

J'utilise un fichier Php pour le faire, ce n'est pas un fichier WP mais je dois inclure WP pour obtenir l'utilisateur actuel (s'il est authentifié) et ses rôles (et peut-être des casquettes).

En regardant Intégrer WordPress avec votre site Web j'ai utilisé pour la première fois:

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

Mais ensuite, j'ai eu un problème avec les téléchargements, renvoyant une erreur 404 (file not found).

Lucky me sur le pied de page du même article du Codex contient la suggestion suivante: Correction de faux en-têtes 404 sur des pages externes, y compris wp-blog-header.php

En suivant la suggestion, je viens d’utiliser init qui me semble assez:

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

Néanmoins, en regardant dans $GLOBALS, je pense qu’il ya beaucoup plus à faire et à gauche qu'il ne le faut.

J'utilise readfile pour le téléchargement, la taille du fichier est peut-être énorme , la vérification de l'utilisateur est effectuée avant, l'idéal serait d'inclure un WP minimal en tant que le plus rapidement possible et relâchez les ressources WP juste après la vérification de l'utilisateur, avant la readfile.

Il existe donc un moyen d'inclure un WP minimal pour vérifier uniquement l'utilisateur actuel, ses rôles (en majuscules?), Puis le relâcher/le libérer?

J'ai aussi vu que wp-load.php est utilisé et en regardant/en cherchant, j'ai trouvé beaucoup de non non pour inclure tous ces wp-* directement, mais tous les résultats étaient environ , y compris depuis un plugin, pas mon cas, est-ce que je dois encore m'inquiéter d'inclure directement?

2
Alex

Les non non concernant le chargement direct de fichiers wp- * sont raisonnables lorsque vous développez un plugin ou un thème WordPress, mais si vous développez un code externe nécessitant WP (et cela semble votre cas) que vous devez exiger que les fichiers, il n'y a pas d'alternative.

Notez que l'inclusion de wp-blog-header.php est nécessaire lorsque vous devez gérer des URL WordPress ou une interface complète WordPress, mais lorsque vous avez besoin de fonctionnalités WordPress, y compris wp-load.php, c'est mieux et plus rapide, et vous n'avez pas besoin de $wp->init();.

De plus, définir SHORTINIT constant sur true accélère le chargement, mais certaines fonctionnalités de WordPress ne sont pas disponibles et la vérification par l'utilisateur en fait partie.

Cependant, nécessitant peu de fichiers et appelant quelques fonctions, vous pourrez vérifier les capacités de l'utilisateur:

<?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