2011-03-26 139 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作爲第二個參數來獲取正確的文件夾名稱。

希望這有助於!

相關問題