2011-03-26 86 views
0

我正在写一个插件,将利用其他插件的功能(考虑插件插件)。WordPress的 - 如何包括()一个文件,在另一个目录

我的文件位于/plugins/new-plugin/new-plugin.php

,我需要做一个 include(/plugins/OLD_plugin/old-plugin.php) ,所以我可以用一对夫妇的功能,从旧plugin.php文件。

这样做的正确方法是什么?我可以使全局可用的old-plugin.php中的函数可用,但我不想更改old-plugin.php文件。

我已经尝试了几种方法来做到这一点,但都没有奏效。新插件只会显示选项页面中的一些信息,不可供普通公众查看,也不会与我的网站中的任何公共页面或帖子进行交互。

我已经尝试过$ _SERVER,WP_PLUGIN_DIR,WP_CONTENT_DIR,绝对服务器路径,相对路径,甚至有些黑魔法,但似乎没有什么效果。

有了这些解决方案,插件的选项页面显示效果很好,但博客的页面不显示。与其他解决方案相反,并与其他一些解决方案甚至没有呈现,无论是管理页面或博客的网页,所有与错误有关的文件未找到。

的新plugin.php很简单,只要

<?php 
/* 
WP Common Headers 
*/ 

global $wpdb; 
if (! defined('WP_CONTENT_DIR')) 
     define('WP_CONTENT_DIR', ABSPATH . 'wp-content'); 
if (! defined('WP_PLUGIN_DIR')) 
     define('WP_PLUGIN_DIR', WP_CONTENT_DIR . '/plugins'); 

include '/server-absolute-path/public_html/gameblogs/wp-content/plugins/old-plugin/old-plugin.php'; 

add_action('admin_menu', 'new_plugin_menu'); 

function new_plugin_menu() { 
$page_title = 'New Plugin'; 
$menu_title = 'New Plugin'; 
$function = 'new_plugin_admin_page'; 
$menu_slug = 'new_plugin'; 

add_menu_page($page_title, $menu_title, 0, __FILE__, $function); 
} 

function new_plugin_admin_page() { 

    $result = old_plugin_link_data(" WHERE link_destination NOT LIKE '/%' AND link_destination NOT LIKE '%gameblogs%'"); 

    $total = count($result); 
    old_plugin_list_links($result, $total, FALSE, FALSE); 
    */ 
    } 
?> 

感谢任何想法!

回答

0

检查旧的插件文件,看看里面是否有do_actionsapply_filters。如果有的话,你可以使用你的新插件使用add_actionapply_filters钩入旧的插件脚本,并执行你想要做的其他事情。

看到http://codex.wordpress.org/Function_Reference/do_actionhttp://codex.wordpress.org/Function_Reference/apply_filters

例如(非常基本的例子):

如果在旧插件,你找到一个:
do_action('some_type_of_reference);`

在新的插件,你可以挂钩通过这样做:
`add_action('some_type_of_reference','name_of_my_function');

功能name_of_my_function(){// 执行代码在这里 }`

如果在旧插件,你找到一个:
apply_filters('some_type_of_reference', $variable);

然后在新的插件,你可以通过做勾入过滤器:
apply_filter('some_type_of_reference', 'my_function');

function my_function($variable) {

//act on the variable from the filter.

return $variable;

}

+0

感谢您的回答,但不是,旧插件中没有apply_filter或do_action。有一些'add_filter',但我认为它们不是一回事,对吗?任何其他想法? – Daniel 2011-03-29 02:45:34

0

你看过plugins_url函数吗?我没有深入地阅读你的代码,但它可能有帮助。

plugins_url模板标签检索到插件目录或该目录中特定文件的url。您可以将插件slug硬编码到$ path中,或通过FILE作为第二个参数来获取正确的文件夹名称。

希望这有助于!

相关问题