0

我正在编写一个插件,它将利用其他插件的功能(考虑一个插件的插件)。

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

我需要做一个 include(/plugins/OLD_plugin/old-plugin.php) ,所以我可以使用 old-plugin.php 文件中的几个函数。

这样做的正确方法是什么?我也许可以让 old-plugin.php 中的函数在全球范围内可用,但我不想更改 old-plugin.php 文件。

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

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

使用其中一些解决方案,插件的选项页面显示良好,但博客页面不呈现。对于其他解决方案,相反的情况会发生,而对于其他一些解决方案,无论是管理页面还是博客页面,都不会出现任何关于找不到文件的错误。

new-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);
    */
    }
?>

感谢您的任何想法!

4

2 回答 2

0

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

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

希望这可以帮助!

于 2011-09-08T02:09:36.633 回答
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');

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;

}

于 2011-03-26T23:01:30.040 回答