在新的Wordpress PHP文件中访问$ wpdb,"需要wp-load.php"不工作

时间:2015-09-28 16:19:07

标签: javascript php jquery wordpress wpdb

好吧,我对在WordPress的新PHP文件中访问$ wpdb感到非常沮丧。现在,我已经阅读了所有可以找到的关于这种情况的答案,而且他们说我需要做的就是在我的php顶部添加wp-load.php。使用$ wpdb的文件,它应该工作。我已经做到了......但是,它仍然无法正常工作。为了确保我没有做任何愚蠢的事,我已经将这两个文件全部包含在内。这是我的代码:

主admin.php的:

UI

submit.php(在同一个文件夹中):

<?php    
function my_plugin_menu(){
            add_menu_page('my System', 'my System','administrator', 'my-plugin.php', 'my_plugin_action', plugins_url('my.png', __FILE__));
       }

    function my_plugin_action(){
      ?>
    <form id="createItemForm" method="post">
      <br/><br/>Create New Item
    <table><tr>
    <td>Enter Item Name:</td><td><input type="text" name="itemName" id="itemName"></td></tr><br><tr>
    <td>Enter Item Value: </td><td><input type="text" name="itemValue" id="itemValue"></td></tr><br><tr>
     <td><input type="submit" class="button button-primary" id="specialSubmit2" value="Create Item"></td></tr></table>
    </form>
    <script>
    jQuery(function() {
        jQuery('#createItemForm').submit(function(e){
            e.preventDefault();
            var itemName = jQuery( "input[id='itemName']" ).val();
            var itemValue = jQuery("input[id='itemValue']").val();
            alert(itemName + " " + itemValue);//Test that it works, it does
            jQuery.ajax({
                type: "POST",
                url: "../path/to/submit.php",
                data:{ name: itemName, value: itemValue }, 
                success: function(data){
                    alert(data);
                },
                error: function (req, textStatus, thrownError) {
                        console.log(req.responseText);
                    }
                    });
                });
            });
        </script>
        <?php 
    } 
    ?>

然而,它所做的只是给我一个500错误,甚至不是&#34; false&#34;没有连接。应该注意的是,main-admin.php文件本身并不是核心的WordPress插件PHP文件(该主文件可以毫无问题地访问$ wpdb)。相反,main-admin.php和submit.php都是我在WordPress插件中的/ admin子文件夹中创建的新PHP文件。 main-admin.php表单显示为Wordpress中仪表板菜单的一部分;它是从主文件中调用的。

我仍然是一个Wordpress初学者,所以也许它是一个非常愚蠢的东西,我失踪了?

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

如果您想将自己的自定义功能添加到Wordpress(前端或后端),请查看创建自己的自定义插件。

无论插件多么简单(参见Hello Dolly),它都是最好的方式,因为它可以保持便携性并使您能够以标准化的方式访问$ wpdb等。

根据我的理解,您希望向Wordpress管理员添加表单。您可以使用add_menu_page()

创建自己的管理页面来完成此操作

答案 1 :(得分:1)

首先,您应确保在wp-config.php中正确调试所有内容

define('WP_DEBUG', true);
define( 'WP_DEBUG_DISPLAY', true );
define('WP_DEBUG_LOG', true);

调试信息最终以wp-content / debug.log

结束

如果您正在对php执行直接的ajax调用,则应确保该目录正确并且还阻止访问非ajax调用。

require_once("../../../wp-load.php");

/* AJAX check  */
if(empty($_SERVER['HTTP_X_REQUESTED_WITH']) || strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {
    die("Invalid request - please press your back key");
}

如果你在此之后无法弄清楚出了什么问题,请从调试日志中发布错误,如果失败,请检查你的php error.logs

答案 2 :(得分:0)

抱歉,回答了!你必须非常小心wp-load.php包含路由。我犯了一个错误,因此找不到它:)我的愚蠢,就像我想的那样!