Jedable插件按其应有的方式工作--范围问题?

时间:2012-01-21 作者:Sven

我正在使用Jeditable插件在管理区域内的一个表上启用内联编辑,该表是由我编写的一个小插件生成的。(http://www.appelsiini.net/projects/jeditable)。基本上一切都正常,但前提是更新数据库字段的代码在插件的代码中。当我将代码复制到另一个文件并尝试编辑某些内容时,我会出现以下错误:

致命错误:对XX行XXX中的非对象调用成员函数update()

我只是部分理解为什么我会犯这样的错误。是因为未初始化$wpdb吗?我尝试了global$wpdb,但运气不好。这就是为什么我认为我遗漏了一些东西,代码中的某个地方$wpdb不知何故“丢失”,所以找不到更新方法。这确实令人沮丧,因为代码正在工作,但只要我在单独的文件中使用它,它就不工作了。如果需要,我可以发布代码,但我希望这只是一个标准问题。

编辑:好的,下面是我的代码:

这是正在运行的Jeditable插件,就在表之后(假设它在index.php中):

<script>
    jQuery(document).ready(function() {
        jQuery(\'.edit\').editable(\'../wp-content/plugins/myplugin/save.php\', {
            indicator   :   \'Saving...\',
            tooltip     :   \'Please click to edit!\',
            id          :   \'my_id\',
            name        :   \'my_value\',
            width       :   \'none\',
            cssclass    :   \'editable-input\'
        });
    });
</script>
正如你所看到的,我正在调用save。php,如下所示:

if(isset($_POST[\'my_id\']))
{
    error_reporting (E_ALL);

    $explode    =   explode(\'-\', $_POST[\'my_id\']);
    $my_row =   $explode[0];
    $my_id      =   $explode[1];
    $my_value   =   $_POST[\'ck_value\'];

    if($my_row == \'date\') {

        $exp = explode(\' \', $my_value);

        switch($exp[1]) {
            case \'Jan\': case \'jan\': case \'Januar\': case \'januar\': case \'01\': case \'1\':
                $month = \'01\';
                $montha = \'Jan\';
                break;
            case \'Feb\': case \'feb\': case \'Februar\': case \'februar\': case \'02\': case \'2\':
                $month = \'02\';
                $montha = \'Feb\';
                break;
        }


        $day = substr($exp[0], 0, 2);
        $wpdb->update($table_name, array(\'ck_date\' => $exp[2].\'-\'.$month.\'-\'.$day, \'ck_monthabbr\' => $montha) , array(\'ck_id\' => $my_id));
        echo $exp[2].\'-\'.$month.\'-\'.$day.\'<br />\';
    }

    if($my_row == \'ogo\') {
        $wpdb->update($table_name, array(\'ck_geo\' => $my_value) , array(\'ck_id\' => $my_id));
    }

    if($my_row == \'vue\') {
        $wpdb->update($table_name, array(\'ck_venue\' => $my_value) , array(\'ck_id\' => $my_id));
    }
}
索引内部。php,我定义了全局$wpdb和$table\\u名称,但保存了。php无法识别这些变量。

1 个回复
最合适的回答,由SO网友:Jared 整理而成

我认为您需要在save.php 文件(我可能错了)。由于您的插件(或WP)没有专门调用此文件,因此它不会包含WP必须提供的所有变量。

尝试将此添加到save.php 文件:

require_once \'../../../../wp-load.php\';
可能有更好的方法获取URL,甚至可能有比wp-load.php, 但至少要验证它的工作原理,这样可能会减轻一些压力。

您可能还想使用global $wpdb; 在里面save.php 之后wp-load.php 包括在内。

结束

相关推荐

如何将META_QUERY更改为SQL wpdb Query?

我想提取与3个元数据字段(bed\\u value、bath\\u value、rob\\u value)相关的帖子。变量数据为$beddrooms、$bathroms,&;rob,我对join和like结构有些困惑。未工作元查询如下$args = array( \'meta_query\' => array( \'relation\' => \'OR\', array(