我有一个插件,可以在下面的页面上创建一个面板:
mysite.com/wp-content/plugins/myplugin/includes/mypanel.php
我想在下一页使用此面板
mysite.com/mypanel
我尝试的解决方案是
mypanel.php
作为页面模板,如下所示:
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;
}
这样页面就会显示出来,但javascript都不起作用。所以我尝试在php函数中导入插件的javascript。
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\');
}
}
导致403个禁止错误。我尝试添加一个。htaccess文件夹进入插件的页面,但它继续给出错误。
请告诉我解决这个问题的正确方法是什么。
EDIT: 以下是一些答案(谢谢大家)。我将代码移动到插件页面,不再出现403禁止的错误。但是我的按钮不起作用,我觉得我的js文件没有在页面上运行。
我的js文件以以下开头:jQuery(document).ready(function()
这里是插件页面上的最终代码:
/* 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\' ));
}
}
最合适的回答,由SO网友:Fayaz 整理而成
您的代码很好,出现403错误的原因是$_SERVER[\'DOCUMENT_ROOT\']
返回web根目录的绝对路径,而不是URL。
JavaScript需要添加为URL。因此,您可以使用Load_Template_Scripts_wpa83855
函数,然后使用:
wp_enqueue_script( \'wtd\', plugins_url( \'/js/wtd.js\' , __FILE__ ) );
添加JavaScript的代码。
Note:显然,您可以使用以下逻辑更好地编写代码@nathan used in his answer, i、 e.添加:
add_action(\'wp_enqueue_scripts\',\'Load_Template_Scripts_wpa83855\');
在
wpa3396_page_template()
中的函数
if ( is_page( \'mypanel\' ) ) {}
条件块;但这不是错误的原因。浏览器无法访问服务器路径,这就是服务器返回的原因
Access Forbidden
错误
完整代码(更新):
为方便起见,这里是完整代码(将其添加到主插件文件中):
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\' ) );
}
SO网友:Nathan Johnson
如果您已经有或计划有一个名为“mypanel”的页面,那么您可以使用page_template
filter可筛选该页面上使用的模板。我想你就是这么做的。
我们可以使用page_template
筛选以对此页面使用自定义模板。在使用此过滤器时,我们可以将一个操作添加到该页面特定的排队脚本中。
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__ ) );
}
在
/includes/mypanel.php
模板文件,请确保调用
wp_head()
和
wp_footer()
否则,将不会打印排队的脚本。