Je souhaite faire un petit jeu pour les utilisateurs de mon site WP. Le jeu lui-même uniquement utilisera le système d'authentification de WP, mais toute sa logique est entièrement externe.
À l'heure actuelle, si j'utilise une page WordPress standard avec un modèle personnalisé (incorporant le script PHP de mon jeu), il se charge, mais semble se charger trop lentement pour mes utilisateurs. Mon script de jeu utilise la même base de données que WP et il est rapide. Pour les tests, je l'ai désactivé (il ne reste que la sortie de test), mais même cette page "vide" dans WP est trop lente.
Est-il possible de contourner entièrement WordPress (c'est-à-dire renoncer au système de gabarit et à tout à l'exception de pour les flux d'authentification) et de charger mon jeu directement? Ma première hypothèse serait d’héberger un script distinct à la racine de l’installation de mon site, mais je ne peux pas comprendre comment utiliser seulement les composants d’authentification. de WordPress - est-il possible d'utiliser un seul composant du moteur WordPress de cette manière?
Peut-être existe-t-il un moyen alternatif d'accélérer la page hébergeant le script de mon jeu ...
Pas sûr, mais je pense actuellement à la première solution. Avez-vous besoin des données de WordPress pour l’authentification? Si vous incluez le wp-load.php
, vous avez accès à WordPress et à ses fonctions, peut-être à l'identifiant. Mais le fichier à inclure en tant que chemin statique n'est pas vraiment génial et solide.
define( 'WP_USE_THEMES', FALSE );
require( $_SERVER['DOCUMENT_ROOT'] . '/wp-load.php' );
Vous pouvez modifier la requête avec une valeur personnalisée et si cette valeur est existante, vous pouvez rediriger via un lien vers votre jeu. Après cette redirection, vous accédez à toutes les fonctions de wp, également pour vérifier les utilisateurs. Cette idée ne fonctionne que dans le front-end, pas de solution pour changer les pages dans le back-end, seulement comme indice.
La source suivante n'est qu'un exemple pour améliorer la requête avec une chaîne personnalisée d'identification et de redirection vers votre code personnalisé.
add_filter( 'query_vars', 'fb_plugin_add_trigger', 10, 1 );
function fb_plugin_add_trigger( $vars ) {
$vars[] = 'fb_plugin_trigger';
return $vars;
}
add_action('template_redirect', 'fb_plugin_trigger_check');
function fb_plugin_trigger_check() {
if ( (int) get_query_var('fb_plugin_trigger') === 1 ) {
// Here is your custom code.
exit();
}
}
L'URL de ce déclencheur est sous la forme de l'exemple example.com/?fb_plugin_trigger=1
.
Aussi une option là-bas, vous devriez essayer. Ajoutez un point de terminaison personnalisé .
add_action( 'init', 'fb_my_endpoint' );
function fb_my_endpoint() {
add_rewrite_endpoint( 'fb_plugin_trigger', EP_ROOT );
}
Après cela, vous trouverez la valeur dans l'URL, telle que example.com/fb_plugin_trigger/
.
Petit indice, effacez les règles de réécriture après l'ajout du noeud final. Autre astuce, si vous n'utilisez pas les permaliens, utilisez la fonction add_query_arg()
pour ajouter des paramètres dans l'URL de l'identifiant.
Vous pouvez maintenant analyser cette valeur dans la requête et inclure votre source de jeu.
add_action( 'parse_query', 'fb_parse_query' );
function fb_parse_query( $query ) {
if ( isset( $query->query_vars['my_api'] ) ) {
include( plugin_dir_path( __FILE__ ) . 'game/index.php');
exit;
}
}
Voici les étapes à suivre pour utiliser WP uniquement pour l'authentification.
require_once ABSPATH . 'wp-settings.php';
Codez une fonction d'assistance pour appeler WP:
function i_need_wp() {
global $table_prefix;
require_once ABSPATH . 'wp-settings.php';
}
Appelez i_need_wp()
avant d'utiliser WP authentification.
Je pense que la cause du ralentissement serait liée à tous les scripts que WordPress est en train de charger dans wp_head (). Si vous exécutez un nombre quelconque de plug-ins, ou un bloc de rendu rendu par js/css, vous constaterez un gros impact sur les performances.
Essayez de charger un fichier d’en-tête personnalisé comme header-mygame.php et remplacez get_header()
dans votre fichier de modèle par get_header('mygame')
.
Dans header-mygame.php, supprimez wp_head () et tout ce qui n’est pas nécessaire pour exécuter votre jeu. Ajoutez uniquement les dépendances dont vous avez besoin manuellement avec les balises <script>
et <link>
.
Vous pouvez faire la même chose avec get_footer()
, car WordPress peut également y mettre des scripts en file d'attente.
De toute évidence, il ne s’agit pas de mettre en file d'attente des actifs dans le "mode WordPress", mais il semble que le mode WordPress soit déjà contourné, alors ...