Verwenden Sie die Plugin-function außerhalb der WordPress-Datei

Ich versuche, eine Plugin-function in einer benutzerdefinierten PHP-Datei zu verwenden. Wenn ich diesen Code am Anfang meiner Datei anlege, kann ich alle WordPress-functionen verwenden:

<?php $file = dirname(__FILE__); $file = substr($file, 0, stripos($file, "wp-content") ); require( $file .'/wp-blog-header.php'); 

Aber ich bekomme diesen Fehler, wenn ich die Plugin-function aufrufen:

 Fatal error: Call to undefined function wp_bannerize() in mysite/my-file.php 

Wie bekomme ich wp_bannerize () in meine-Datei.php?

AKTUALISIEREN:

Wenn ich my-file.php in meinem Browser so aufrufe:

 http://localhost/~sdibenedetto/d-art/htdocs/wp-content/themes/d-art/infinite-posts.php?offset=3 

Ich habe keine Fehler und wp_bannerize() funktioniert korrekt

Beim AJAX-Aufruf habe ich den Fehler bekommen … hängt davon ab, dass das infinite-scroll-jquery-Plugin load() anstelle von $.ajax() ?

Solutions Collecting From Web of "Verwenden Sie die Plugin-function außerhalb der WordPress-Datei"

Wenn Sie WordPress-functionen außerhalb des normalen WP-Workflows aufrufen möchten, können Sie die folgenden zwei Zeilen in Ihren Code einfügen:

 define("WP_USE_THEMES", false); require_once("../../../wp-blog-header.php"); 

Natürlich geht das obige davon aus, dass ich dies von einem Root-Thema oder einem Plugin-Ordner aus ../ (das ../ zeigt einen umgekehrten Ordnerdurchlauf an). Es sieht so aus, als hätten Sie wp-blog-header.php bereits eingeschlossen, und die Definition ist ein Hinweis darauf, dass WordPress bestimmte functionen im Zusammenhang mit normalen Seiten- / Post-Abfragen nicht aufruft. Für ein Beispiel, wie WordPress-functionalität in einer disparaten PHP-Codebasis implementiert werden kann, würde ich vorschlagen, dass Sie sich diesen Laravel + WordPress- Post oder ähnliche Versuche ansehen, WordPress-functionalität von außerhalb von WordPress selbst zu verwenden. Wenn Sie die functionalität benötigen, die WordPress bietet (einschließlich der aktivierten Plugins), könnte dies die beste Lösung sein.

Andernfalls kann je nach Szenario der Aufruf von WordPress-Code als Ajax, wie von anderen Benutzern vorgeschlagen, der richtige Weg sein. Insbesondere wenn Sie eine einfache CRUD-API implementieren möchten, z. B. eine REST-konforme Operation, wäre dies die vorgeschlagene Route. Dies ist die Route, die ich persönlich empfehlen würde, wenn Sie nur Daten aus den Punkten A und B verschieben möchten.

Ihr Code ist möglicherweise fehlgeschlagen, weil Sie das WP_USE_THEMES Flag nicht ordnungsgemäß definiert haben. Unter normalen Umständen ist die von Plugins angebotene functionalität erst nach einem bestimmten Punkt verfügbar (wahrscheinlich die Aktion init , basierend auf http://codex.wordpress.org/Plugin_API/Action_Reference ) und versucht, die Plugin-functionalität aufzurufen, bevor diese Aktion ausgeführt wurde aufgetreten kann dazu führen, was Sie beschreiben.

Sie sollten Ajax-Anfragen über admin-ajax.php machen.

http://wp.smashingmagazine.com/2011/10/18/how-to-use-ajax-in-wordpress/

Auf diese Weise haben Sie Zugriff auf alle WordPress-functionen.

Salvatore! Sie können wp_bannerize manuell bearbeiten (siehe Datei plugins / wp-bannerize / main.php), um folgendermaßen aussehen zu können:

 require_once( trailingslashit( dirname( __FILE__ ) ) . 'main.h.php' ); require_once( trailingslashit( dirname( __FILE__ ) ).'Classes/wpBannerizeClass.php' ); if ( @isset( $_SERVER['HTTP_X_REQUESTED_WITH'] ) ) { if ( is_admin() ) { require_once( trailingslashit( dirname( __FILE__) ) . 'Classes/wpBannerizeAdmin.php' ); $wpBannerizeAdmin = new WPBannerizeAdmin( __FILE__ ); require_once( trailingslashit( dirname( __FILE__) ) . 'Classes/wpBannerizeAjax.php' ); }else{ require_once( trailingslashit( dirname( __FILE__ ) ) . 'Classes/wpBannerizeFrontend.php' ); $wpBannerizeFrontend = new WPBannerizeFrontend( __FILE__ ); require_once( trailingslashit( dirname( __FILE__ ) ) . 'Classes/wpBannerizeFunctions.php' ); } } else { if ( is_admin() ) { require_once( trailingslashit( dirname( __FILE__ ) ) . 'Classes/wpBannerizeAdmin.php' ); // $wpBannerizeAdmin = new WPBannerizeAdmin( __FILE__ ); $wpBannerizeAdmin->register_plugin_settings( __FILE__ ); register_activation_hook( __FILE__, array( &$wpBannerizeAdmin, 'pluginDidActive' ) ); register_activation_hook( __FILE__, array( &$wpBannerizeAdmin, 'pluginDidDeactive' ) ); } else { require_once( trailingslashit( dirname( __FILE__ ) ) . 'Classes/wpBannerizeFrontend.php' ); $wpBannerizeFrontend = new WPBannerizeFrontend( __FILE__ ); require_once( trailingslashit( dirname( __FILE__ ) ) . 'Classes/wpBannerizeFunctions.php' ); } } 

Dies wird definitiv helfen. Der Hauptgrund, warum es nicht richtig funktioniert, ist die Bedingung in der 4. Zeile (auf Ajax-Anfrage prüfen).