it-swarm.com.de

Das Laden der externen Seitenvorlage und des Enqueue-Skripts vom Plug-In führt zu einem 403 verbotenen Fehler

Ich habe ein Plugin, das ein Panel auf folgender Seite erstellt:

mysite.com/wp-content/plugins/myplugin/includes/mypanel.php

Ich möchte dieses Panel auf der folgenden Seite verwenden

mysite.com/mypanel

Als Lösung habe ich versucht, mypanel.php als Seitenvorlage wie folgt zu verwenden:

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;
}

Auf diese Weise wird die Seite angezeigt, aber kein Javascript funktioniert. Also habe ich versucht, das Javascript des Plugins in die Funktionen von PHP zu importieren.

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');
    }

}

Was zu 403 verbotenen Fehlern führte. Ich habe versucht, einen .htaccess-Ordner in die Seite des Plugins einzufügen, aber es gab weiterhin Fehler.

Bitte sagen Sie mir, wie Sie dieses Problem richtig lösen können.

EDIT: Nach einigen Antworten unten (danke an alle). Ich habe meine Codes auf die Seite meines Plugins verschoben und keinen verbotenen Fehler mehr. Aber meine Buttons funktionieren nicht und ich habe das Gefühl, dass meine js-Datei nicht über die Seite läuft.

Meine js-Datei beginnt mit: jQuery(document).ready(function()

Hier der endgültige Code auf der Seite des Plugins:

/* 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' ));        
    }    
}
7
HOY

Ihr CODE ist in Ordnung, der Grund, warum Sie den Fehler 403 erhalten, ist, dass $_SERVER['DOCUMENT_ROOT'] den absoluten PATH an Ihr Web-Root zurückgibt, nicht an die URL.

JavaScript muss als URL hinzugefügt werden. Sie können also die Funktion Load_Template_Scripts_wpa83855 in Ihrem Plugin verwenden und dann Folgendes verwenden:

wp_enqueue_script( 'wtd', plugins_url( '/js/wtd.js' , __FILE__ ) );

CODE zum Hinzufügen von JavaScript.

Anmerkung:Sie können den CODE natürlich noch besser machen, indem Sie eine Logik verwenden, wie sie @nathan in seiner Antwort verwendet hat , d. H.

add_action('wp_enqueue_scripts','Load_Template_Scripts_wpa83855');

innerhalb der Funktion wpa3396_page_template() im Bedingungsblock if ( is_page( 'mypanel' ) ) {}; aber das ist nicht der grund des fehlers. Auf den Server PATH kann vom Browser nicht zugegriffen werden. Aus diesem Grund gibt der Server den Fehler Access Forbidden zurück.

Vollständiger CODE (aktualisiert):

Hier ist der vollständige CODE für Ihre Bequemlichkeit (fügen Sie ihn in Ihre Haupt-Plugin-Datei ein):

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' ) );
}
5
Fayaz

Wenn Sie bereits eine Seite mit dem Namen 'mypanel' haben oder haben möchten, können Sie den page_template-Filter verwenden, um die auf dieser Seite verwendete Vorlage zu filtern. Ich gehe davon aus, dass Sie das tun.

Wir können den page_template-Filter verwenden, um eine benutzerdefinierte Vorlage für diese Seite zu verwenden. Wenn Sie diesen Filter verwenden, können Sie eine Aktion hinzufügen, um Skripts für diese Seite in die Warteschlange zu stellen.

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__ ) );
}

Stellen Sie in der Vorlagendatei /includes/mypanel.php sicher, dass Sie wp_head() und wp_footer() aufrufen, da sonst die in die Warteschlange gestellten Skripts nicht gedruckt werden.

1
Nathan Johnson