正在解析包含的插件文件中的POST->ID

时间:2012-04-12 作者:Zach

遇到了令我完全困惑的事情。

我有一个插件,其主文件如下所示:

// Global Variables
$mouldings_prefix = \'mouldings_\';
$mouldings_name = \'Mouldings\';

if(!defined(\'MOULDINGS_BASE_DIR\')) {
    define(\'MOULDINGS_BASE_DIR\', dirname(__FILE__));
}
if(!defined(\'MOULDINGS_BASE_URL\')) {
    define(\'MOULDINGS_BASE_URL\', plugin_dir_url(__FILE__));
}

// Includes
include(\'includes/scripts.php\'); // Conrols JS/CSS
include(\'includes/admin-post-types.php\'); // Sets up post types/taxonomies
include(\'includes/helper-functions.php\'); // Functions that extend functionality of Mouldings
include(\'includes/admin-metaboxes.php\'); // Metaboxes that appear in the admin (non-ACF)
所以没什么特别的,只需设置一些变量并包含一些帮助文件。

我有一个设置为显示(从admin-metaboxes.php) 它会在post类型上生成一个框,称为moulding_profiles

add_action(\'admin_init\',\'roots_mouldings_meta_init\');

function roots_mouldings_meta_init()
{
    // http://codex.wordpress.org/Function_Reference/add_meta_box
    // add a meta box for each of the wordpress page types: posts and pages
    foreach (array(\'moulding_profiles\') as $type)
    {
        add_meta_box(\'roots_mouldings_profile_tools\', \'Profile Tools\', \'roots_mouldings_meta_setup\', $type, \'side\', \'high\');
    }
}

function roots_mouldings_meta_setup()
{
    global $post;

    // using an underscore, prevents the meta variable
    // from showing up in the custom fields section
    $meta = get_post_meta($post->ID,\'_roots_mouldings\',TRUE);

    ?>

    <a class="button-primary" id="deleteCad" style="display:inline-block;margin:10px auto 0 auto;">Regenerate CAD File</a>
    <p style="color: #999999;font-size: 11px;padding: 0;">Clicking the button above will delete the current CAD zip file created for the profile which will be regenerated upon pageload. This is useful if any of the CAD files originally listed have been modified.</p>
    <?php
}
metabox本身不保存任何信息,或多或少只有一个可单击的按钮和一些描述文本。按钮本身与scripts.php 添加到admin.js 文件并本地化脚本,并获取PHP文件的路径(单击时调用),该文件名为admin-delete-cad.php

// Script conrol
function mouldings_load_scripts() {
    wp_enqueue_script(\'mouldings-isotope\', MOULDINGS_BASE_URL . \'js/jquery.isotope.min.js\',array(\'jquery\'),\'1.5.17\',true);
    wp_enqueue_script(\'mouldings-isotope-script\', MOULDINGS_BASE_URL . \'js/script.js\',array(\'jquery\'),\'\',true);
}
add_action(\'wp_enqueue_scripts\',\'mouldings_load_scripts\');

function admin_mouldings_load_scripts() {
    wp_enqueue_script(\'mouldings-admin\', MOULDINGS_BASE_URL . \'js/admin.js\',array(\'jquery\'),\'\',true);

    $mouldings_admin = array(
        \'deletecadfile\' => MOULDINGS_BASE_URL . \'/includes/admin-delete-cad.php\'
        );
    wp_localize_script( \'mouldings-admin\', \'mouldingsadmin\', $mouldings_admin);
}
add_action(\'admin_enqueue_scripts\', \'admin_mouldings_load_scripts\' );
实际数据正在正确解析到管理员,显示:

/* <![CDATA[ */
var mouldingsadmin = {"deletecadfile":"http:\\/\\/yhmags.com\\/wordpress\\/wp-content\\/plugins\\/mouldings\\/\\/includes\\/admin-delete-cad.php"};
/* ]]> */
并且正确地通过以下JS调用onclick(在admin.js)

jQuery(document).ready( function($) {
    $(\'#deleteCad\').click(function() {
        $.get(mouldingsadmin.deletecadfile, function(data) {
            $(\'#deleteCad\').html(data);
        });
        return false;
    });
});
但当我尝试访问admin-delete-cad.php, 我没有机会。。。我想要的任何默认WP信息(如$post->ID):

define(\'WP_BASE_DIR\', realpath(dirname(__FILE__).\'/../../../../\'));
global $post;
$id = $_GET[\'post\'];
echo $id; echo $post->ID;
echo WP_BASE_DIR . \'/cad-\'.$id.\'.zip\';
文件本身加载很好(如果我只是输入一个纯文本字符串),但正如您在上面看到的,我正在尝试获取任何帖子信息来工作。。。但什么都没有出现。我已经在这里呆了一段时间了,非常感谢您的帮助。谢谢

1 个回复
SO网友:Milo

第一个问题-您无法访问任何数据,因为您的AJAX请求与加载请求的页面完全不同。这不是WordPress独有的。您必须将要操作的数据与AJAX请求一起传递。

第二个问题-直接调用插件文件不是处理AJAX请求的正确方法。除非手动引导WordPress,否则您将无法以这种方式访问WordPress功能。阅读AJAX in plugins 了解如何在插件中正确处理AJAX请求。

结束

相关推荐

使用phpMyAdmin移动数据库

我有一个wordpress网站的远程(网站)版本,它比我的本地(计算机)版本获得了更多的最新信息。我想使用phpMyAdmin将数据移动到本地,最好的方法是什么?我应该只导出整个数据库,导入它并将我的wordpress站点重新链接到配置文件中的“新”(更新)数据库吗?