将插件构建为主题

时间:2014-09-13 作者:andy

首先,我知道这是“不好”的做法,有几个不同的原因,但我不想浪费你的时间,这是我需要做的事情。

使用一个相当简单的插件,我尝试将其复制到函数中。php和更新文件路径和依赖项,但我遇到了一些问题。

插件文件如下所示:-

$plugin_headers = get_file_data( __FILE__, array( \'Version\' => \'Version\', \'Name\' => \'Plugin Name\' ) );


/**
 * We store our plugin data in the following global array.
 * $my_unique_name with your unique name
 */
global $my_unique_name;
$my_unique_name = array();
$my_unique_name[\'version_key\'] = strtolower( str_replace( \' \', \'_\', $plugin_headers[\'Name\'] ) ) . \'_version\';
$my_unique_name[\'version_value\'] = $plugin_headers[\'Version\'];


/**
 * When the user activates the plugin we add the version number to the
 * options table as "my_plugin_name_version" only if this is a newer version.
 */
function inline_comments_acitvation(){

    global $my_unique_name;

    if ( get_option( $my_unique_name[\'version_key\'] ) && get_option( $my_unique_name[\'version_key\'] ) > $my_unique_name[\'version_value\'] )
        return;

    update_option( $my_unique_name[\'version_key\'], $my_unique_name[\'version_value\'] );

}
register_activation_hook( __FILE__, \'inline_comments_acitvation\' );


/**
 * Delete our version number from the database when the plugin is activated.
 */
function inline_comments_deactivate(){
    global $my_unique_name;
    delete_option( $my_unique_name[\'version_key\'] );
}
register_deactivation_hook( __FILE__, \'inline_comments_deactivate\' );


if ( is_admin() )
    require_once plugin_dir_path( __FILE__ ) . \'admin/admin-tags.php\';

/**
 * Theme only functions
 */
require_once plugin_dir_path( __FILE__ ) . \'inc/template-tags.php\';


function inline_comments_enqueue_scripts(){

    $plugin_headers = get_file_data( __FILE__, array( \'Version\' => \'Version\', \'Name\' => \'Original Plugin Name\' ) );
    $clean_name = strtolower( str_replace( \' \', \'-\', $plugin_headers[\'Name\'] ) );

    wp_register_style( $clean_name . \'-style\', plugin_dir_url( __FILE__ ) . \'inc/css/style.css\' );
    wp_register_script( \'textarea_auto_expand-script\', plugin_dir_url( __FILE__ ) . \'vendor/textarea-auto-expand/jquery.textarea_auto_expand.js\' );
    wp_register_script( $clean_name . \'-script\', plugin_dir_url( __FILE__ ) . \'inc/js/script.js\', array(\'jquery\', \'textarea_auto_expand-script\') );
}

add_action(\'wp_enqueue_scripts\', \'inline_comments_enqueue_scripts\', 2);
将插件移动到主题文件夹后,我做了以下工作:删除了无意义的部分和函数。php我正在加载主脚本。js(它加载)和css,就像这样。

function inline_comments_enqueue_scripts(){
if ( is_singular() || is_page() ) {

    wp_enqueue_style( \'inline-style\', get_template_directory_uri() . \'/css/inline-style.css\', \'10000\', \'all\' );

    wp_enqueue_script( \'inline-script\', get_template_directory_uri() . \'/js/inline-script.js\', array( \'jquery\' ), MEDIUM_VERSION);
}   

}

add_action(\'wp_enqueue_scripts\', \'inline_comments_enqueue_scripts\', 2);
好的,我们的脚本加载了css。

问题是插件的主要部分,它包含我无法加载的模板、函数和ajax调用。

本部分:-require_once plugin_dir_path( __FILE__ ) . \'inc/template-tags.php\';

我已尝试将此文件粘贴到函数中。php,什么都没发生,就是不起作用。

可能在某个地方犯了一个非常愚蠢的错误(除了在主题中构建插件之外,呵呵)。

2 个回复
SO网友:Mark Kaplun

仅仅因为你认为你必须这样做并不能消除这样一个事实,即这样做是非常不明智的。插件代码是作为插件而不是主题构建的,虽然您可以复制部分代码并在主题中使用它们,但无法通过任何简单的方法确保代码中没有任何依赖项。

做这类事情最简单的方法是检查插件是否处于活动状态,如果插件未处于活动状态,则强制激活它(而且你不能相信你的客户端不会停用它)。

SO网友:Cayce K

根据你键入问题的方式,我做了一些简短的假设。。

"After moving the plugin to the theme folder"

这意味着您已将插件从插件目录带到wp-content/themes/THEME_FOLDER. 如果是这种情况,请致电plugin_dir_path( __FILE__ ) 将无法找到您的文件。

您需要使用get_template_directory_uri() 或者别的什么。

请审阅the Codex 更好地理解功能。

如果我的假设不正确,请告诉我,因为我可以用更多信息正确地解决这个问题。

结束