在WordPress文件之外使用插件功能

时间:2013-10-16 作者:Salvatore Dibenedetto

我正在尝试在自定义php文件中使用插件函数。将此代码粘贴到文件顶部,我可以使用wordpress的所有功能:

<?php 
$file = dirname(__FILE__);
$file = substr($file, 0, stripos($file, "wp-content") );
require( $file .\'/wp-blog-header.php\');
但我在调用插件函数时遇到了这个错误:

Fatal error: Call to undefined function wp_bannerize() in mysite/my-file.php
如何在我的文件中获取wp\\u bannize()。php?

更新时间:

如果我调用我的文件。我的浏览器中的php如下:

http://localhost/~sdibenedetto/d-art/htdocs/wp-content/themes/d-art/infinite-posts.php?offset=3
我没有错误wp_bannerize() 工作正常

在AJAX调用中,我发现了错误。。。可能取决于无限滚动jquery插件使用的load() 相反$.ajax()?

3 个回复
SO网友:Justin Bell

如果您打算从常规WP工作流之外调用Wordpress功能,可以在代码中插入以下两行:

define("WP_USE_THEMES", false);
require_once("../../../wp-blog-header.php");
当然,以上假设我是从根主题或插件文件夹(../ 表示反向文件夹遍历)。看起来你已经包括了wp-blog-header.php, 定义是指Wordpress不要调用与正常页面/帖子查询相关的某些功能。关于如何在完全不同的PHP代码库中实现Wordpress功能的示例,我建议您看看Laravel+Wordpress 从Wordpress自身外部发布或类似尝试利用Wordpress功能。如果您需要Wordpress提供的功能(包括其激活的插件),这可能是最好的解决方案。

否则,根据您的场景,按照其他用户的建议,将Wordpress代码作为Ajax调用可能是合适的选择。特别是,如果您想要实现一个简单的CRUD API,比如RESTful操作,那么这就是建议的路线。如果您感兴趣的只是从A点和B点移动数据,那么我个人会推荐这条路线。

您的代码可能已失败,因为您没有定义WP_USE_THEMES 正确标记;在正常情况下,插件提供的功能在某一点之后才可用(可能是init 行动,基于http://codex.wordpress.org/Plugin_API/Action_Reference), 而在该操作发生之前尝试调用插件功能可能会导致您所描述的结果。

SO网友:George Jipa

您应该通过管理ajax发出ajax请求。php。

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

这样,您就可以访问所有wordpress功能。

SO网友:Sergey Beresnev

萨尔瓦多!您可以手动编辑wp\\u bannize(请参阅文件plugins/wp bannize/main.php),如下所示:

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\' );
    }
}
这肯定会有帮助。它不能正常工作的主要原因是第4行的情况(检查ajax请求)。

结束