Wordpress - Как включить () файл, который находится в другом каталоге - PullRequest
0 голосов
/ 27 марта 2011

Я пишу плагин, который будет использовать преимущества других плагинов (подумайте о плагине для плагина).

Мой файл находится в /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);
    */
    }
?>

спасибо за любые идеи!

Ответы [ 2 ]

0 голосов
/ 08 сентября 2011

Вы смотрели на функцию plugins_url? У меня не было подробного чтения вашего кода, но это может помочь.

Тег шаблона plugins_url извлекает URL-адрес каталога плагинов или определенного файла в этом каталоге. Вы можете жестко закодировать слаг плагина в $ path или передать FILE в качестве второго аргумента, чтобы получить правильное имя папки.

Надеюсь, это поможет!

0 голосов
/ 27 марта 2011

проверьте старые файлы плагинов и посмотрите, есть ли в них do_actions или apply_filters. Если есть, то вы можете подключиться к старому сценарию плагина с помощью нового плагина, используя add_action и apply_filters, и выполнить другие действия, которые вы хотите сделать.

см. http://codex.wordpress.org/Function_Reference/do_action и http://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');</p> <p>function my_function( $variable ) {</p> <p>//act on the variable from the filter.</p> <p>return $variable;</p> <p>}

...