Javascript 在新的Wordpress PHP文件中访问$wpdb;需要wp load.php“;不起作用

Javascript 在新的Wordpress PHP文件中访问$wpdb;需要wp load.php“;不起作用,javascript,php,jquery,wordpress,Javascript,Php,Jquery,Wordpress,好吧,我对在WordPress的新PHP文件中访问$wpdb感到非常失望。现在,我已经通读了所有我能找到的关于这个情况的答案,他们都说我需要做的就是在我的php文件顶部添加wp-load.php,它使用$wpdb,应该可以工作。我已经做到了。。。然而,它仍然不起作用。为了确保我没有做任何愚蠢的事情,我将这两个文件全部包括在内。这是我的密码: main-admin.php: <?php function my_plugin_menu(){ add_menu_p

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

main-admin.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 
    } 
    ?>



创建新项目 输入项目名称:
输入项目值:
jQuery(函数(){ jQuery('#createItemForm').submit(函数(e){ e、 预防默认值(); var itemName=jQuery(“输入[id='itemName']”).val(); var itemValue=jQuery(“输入[id='itemValue']”).val(); 警报(itemName+“”+itemValue);//测试它是否有效 jQuery.ajax({ 类型:“POST”, url:“../path/to/submit.php”, 数据:{name:itemName,value:itemValue}, 成功:功能(数据){ 警报(数据); }, 错误:函数(req、textStatus、thrownError){ 控制台日志(请求响应文本); } }); }); });
submit.php(在同一文件夹中):


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

我还是一个Wordpress的初学者,所以也许我错过了一些非常愚蠢的东西


谢谢你的帮助

如果你想在Wordpress的前端或后端添加你自己的自定义功能,可以考虑创建你自己的自定义插件

无论插件有多简单(cf Hello Dolly),它都是最好的方法,因为它保持了东西的便携性,并使您能够以标准化的方式访问$wpdb等


据我所知,您希望向Wordpress管理员添加一个表单。您可以通过使用添加菜单页面()创建自己的管理页面来实现这一点。

抱歉,回答了!您必须非常小心使用wp-load.php include路由。我犯了一个错误,所以它找不到:)我认为我是愚蠢的

首先,您应该确保在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错误。日志

如果不打开调试并定期检查日志,您会发现这种情况经常发生:)如果您可以获得像phpstorm这样的全服务IDE,您会发现它会告诉您在您尝试运行代码之前无法加载文件。
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");
}