Eu tenho um plugin, que cria um painel na seguinte página:
mysite.com/wp-content/plugins/myplugin/includes/mypanel.php
Eu quero usar este painel na próxima página
mysite.com/mypanel
A solução que tentei foi usar mypanel.php
como modelo de página, conforme abaixo:
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;
}
Desta forma, a página é exibida, mas nenhum dos javascript funciona. Então eu tentei importar o plugin javascript em funções 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');
}
}
Que resultou 403 erro proibido. Eu adicionei tentei adicionar uma pasta .htaccess na página do plugin, mas continuou a dar erro.
Por favor, diga-me qual é a maneira correta de resolver este problema.
EDIT: Depois de algumas respostas abaixo (obrigado a todos). Mudei meus códigos para a página do meu plugin, e não mais erro 403 proibido. Mas meus botões não estão funcionando, e sinto que meu arquivo js não passa pela página.
Meu arquivo js começa com: jQuery(document).ready(function()
Aqui o código final na página do 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' ));
}
}
Seu CÓDIGO é bom, a razão pela qual você está recebendo erro 403 é porque $_SERVER['DOCUMENT_ROOT']
retorna PATH absoluto para sua raiz da web, não URL.
JavaScript precisa ser adicionado como URL. Então, você pode usar a função Load_Template_Scripts_wpa83855
no seu plugin e então usar:
wp_enqueue_script( 'wtd', plugins_url( '/js/wtd.js' , __FILE__ ) );
CÓDIGO para adicionar JavaScript.
Note:obviamente você pode tornar o CODE ainda melhor usando lógica como @nathan usado em sua resposta , ou seja, adicionando:
add_action('wp_enqueue_scripts','Load_Template_Scripts_wpa83855');
dentro da função
wpa3396_page_template()
no bloco de condiçãoif ( is_page( 'mypanel' ) ) {}
; mas essa não é a razão do erro. O PATH do servidor não pode ser acessado pelo navegador, é por isso que o servidor retorna o erroAccess Forbidden
.
Aqui está o CÓDIGO completo para sua conveniência (adicione-o no seu arquivo principal do plugin):
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' ) );
}
Se você já tem, ou planeja ter, uma página chamada 'mypanel', você pode usar o filtro page_template
para filtrar o modelo usado nessa página. Estou assumindo que é isso que você está fazendo.
Podemos usar o filtro page_template
para usar um modelo personalizado para esta página. Ao usar esse filtro, podemos adicionar uma ação para enfileirar scripts específicos para esta página.
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__ ) );
}
No arquivo de modelo /includes/mypanel.php
, certifique-se de chamar wp_head()
e wp_footer()
, caso contrário os scripts enfileirados não serão impressos.