次のページにパネルを作成するプラグインがあります。
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は機能しません。だから私はプラグインのJavaScriptを関数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');
}
}
これは403禁止エラーをもたらしました。プラグインのページに.htaccessフォルダを追加しようとしましたが、エラーが発生し続けました。
この問題を解決するための正しい方法は何ですか。
編集: 以下のいくつかの答えの後に(みんなに感謝します)。私は自分のコードを自分のプラグインのページに移動しましたが、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' ));
}
}
あなたのCODEは問題ありません、あなたが403エラーを得ている理由は$_SERVER['DOCUMENT_ROOT']
がURLではなくあなたのWebルートへの絶対パスを返すからです。
JavaScriptをURLとして追加する必要があります。それで、あなたはあなたのプラグインの中でLoad_Template_Scripts_wpa83855
関数を使って、そして次に使うことができます:
wp_enqueue_script( 'wtd', plugins_url( '/js/wtd.js' , __FILE__ ) );
JavaScriptを追加するためのコード。
注:明らかに、 @nathanが彼の答えで使用したもの のようなロジックを使用してCODEをさらに良くすることができます。
add_action('wp_enqueue_scripts','Load_Template_Scripts_wpa83855');
wpa3396_page_template()
条件ブロック内のif ( is_page( 'mypanel' ) ) {}
関数内。しかし、それがエラーの原因ではありません。サーバーのPATHにブラウザからアクセスできない、サーバーがAccess Forbidden
エラーを返すのはそのためです。
これはあなたの便宜のための完全なCODEです(あなたのメインプラグインファイルにそれを追加してください):
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' ) );
}
'mypanel'というページをすでに持っているか、またはこれから作成しようとしている場合は、page_template
フィルタを使用してそのページで使用されているテンプレートをフィルタ処理できます。私はそれがあなたがしていることだと思います。
このページにカスタムテンプレートを使用するために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()
を呼び出してください。そうしないと、キューに登録されたスクリプトが印刷されません。