J'ai un plugin qui crée un panneau sur la page suivante:
mysite.com/wp-content/plugins/myplugin/includes/mypanel.php
Je veux utiliser ce panneau à la page suivante
mysite.com/mypanel
La solution que j'ai essayée était d'utiliser mypanel.php
comme modèle de page comme ci-dessous:
add_filter( 'page_template', 'wpa3396_page_template' );
function wpa3396_page_template( $page_template )
{
if ( is_page( 'mypanel' ) ) {
$page_template = dirname( __FILE__ ) . '/includes/mypanel.php';
}
return $page_template;
}
De cette façon, la page s'affiche mais aucun des scripts javascript ne fonctionne. J'ai donc essayé d'importer le javascript du plugin dans les fonctions php.
add_action('wp_enqueue_scripts','Load_Template_Scripts_wpa83855');
function Load_Template_Scripts_wpa83855(){
if ( strpos(get_page_template(), 'mypanel.php') !== false ) {
wp_enqueue_script('wtd', $_SERVER['DOCUMENT_ROOT'].'/wp-content/plugins/myplugin/js/wtd.js');
}
}
Ce qui a entraîné 403 erreur interdite. J'ai ajouté essayé d'ajouter un dossier .htaccess dans la page du plugin mais cela continuait à donner une erreur.
S'il vous plaît dites-moi quelle est la bonne façon de résoudre ce problème.
EDIT: Après quelques réponses ci-dessous (merci à tous). J'ai déplacé mes codes sur la page de mon plugin, et plus d'erreur 403 interdite. Mais mes boutons ne fonctionnent pas et j’ai l’impression que mon fichier js ne fonctionne pas sur la page.
Mon fichier js commence par: jQuery(document).ready(function()
Voici le code final sur la page du plugin:
/* Make tisort-tasarla page as template */
add_filter( 'page_template', 'wpa3396_page_template' );
function wpa3396_page_template( $page_template )
{
if ( is_page( 'tisort-tasarla' ) ) {
$page_template = dirname( __FILE__ ) . '/includes/tshirt-designer-design-template.php';
}
return $page_template;
}
/* Add Javascript to T-Shirt Design Page */
add_action('wp_enqueue_scripts','Load_Template_Scripts_wpa83855');
function Load_Template_Scripts_wpa83855(){
if ( is_page( 'tisort-tasarla' ) ) {
wp_enqueue_script( 'wtd', plugins_url( '/js/wtd.js' , __FILE__ ), array( 'jquery' ));
}
}
Votre code est correct, la raison pour laquelle vous obtenez une erreur 403 est que $_SERVER['DOCUMENT_ROOT']
renvoie le chemin absolu PATH à votre racine Web, et non pas une URL.
JavaScript doit être ajouté en tant qu'URL. Donc, vous pouvez utiliser la fonction Load_Template_Scripts_wpa83855
dans votre plugin puis utiliser:
wp_enqueue_script( 'wtd', plugins_url( '/js/wtd.js' , __FILE__ ) );
CODE pour ajouter du JavaScript.
Note:vous pouvez évidemment améliorer le code en utilisant une logique semblable à celle utilisée par @nathan dans sa réponse , c’est-à-dire en ajoutant:
add_action('wp_enqueue_scripts','Load_Template_Scripts_wpa83855');
dans la fonction
wpa3396_page_template()
dans le bloc de conditionsif ( is_page( 'mypanel' ) ) {}
; mais ce n'est pas la raison de l'erreur. Le navigateur ne permet pas d'accéder au serveur PATH, c'est pourquoi le serveur renvoie l'erreurAccess Forbidden
.
Voici le code complet à votre convenance (ajoutez-le dans votre fichier de plugin principal):
add_filter( 'page_template', 'wpse_262042_page_template' );
function wpse_262042_page_template( $page_template ) {
if( is_page( 'mypanel' ) ) {
add_action( 'wp_enqueue_scripts', 'wpse_262042_enqueue_scripts' );
$page_template = plugin_dir_path( __FILE__ ) . 'includes/mypanel.php';
}
return $page_template;
}
function wpse_262042_enqueue_scripts() {
wp_enqueue_script( 'wtd', plugins_url( 'js/wtd.js' , __FILE__ ), array( 'jquery' ) );
}
Si vous avez déjà, ou prévoyez, une page appelée "mypanel", vous pouvez utiliser le filtre page_template
pour filtrer le modèle utilisé sur cette page. Je suppose que c'est ce que vous faites.
Nous pouvons utiliser le filtre page_template
pour utiliser un modèle personnalisé pour cette page. Lors de l'utilisation de ce filtre, nous pouvons ajouter une action pour mettre en file d'attente les scripts spécifiques à cette page.
add_filter( 'page_template', 'wpse_262042_page_template', 10, 1 );
function wpse_262042_page_template( $page_template ) {
if( is_page( 'mypanel' ) ) {
add_action( 'wp_enqueue_scripts', 'wpse_262042_enqueue_scripts' );
$page_template = plugin_dir_path( __FILE__ ) . 'includes/mypanel.php';
}
return $page_template;
}
function wpse_262042_enqueue_scripts() {
wp_enqueue_script( 'wpse-262042', plugins_url( '/js/wpse-262042.js', __FILE__ ) );
}
Dans le fichier modèle /includes/mypanel.php
, veillez à appeler wp_head()
et wp_footer()
, sinon les scripts mis en file d'attente ne seront pas imprimés.