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


Accessing $wpdb in new Wordpress PHP file, "require wp-load.php" NOT working

好吧,我一直很沮丧,在一个新的PHP文件在WordPress中访问$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 
    } 
    ?>

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

<?php
require_once( 'path/to/wp-load.php' );
if(isset($_POST["name"]) && isset($_POST["value"])){
  global $wpdb;
  $varCheckCon = $wpdb->check_connection();
  echo json_encode($varCheckCon);
}
?>

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

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

谢谢你的帮助!

如果你想在Wordpress中添加自己的自定义功能,无论是前端还是后端,都可以考虑创建自己的自定义插件。

无论多么简单的插件(如Hello Dolly),它是最好的方式,因为它保持了东西的可移植性,并使您能够以标准化的方式访问$wpdb等。

从我的理解,你正在寻找添加一个表单到Wordpress管理。您可以使用add_menu_page()

创建自己的管理页面

首先,您应该确保在wp-config.php

中正确调试了所有内容。
define('WP_DEBUG', true);
define( 'WP_DEBUG_DISPLAY', true );
define('WP_DEBUG_LOG', true);

调试信息结束在wp-content/debug.log

如果你是直接ajax调用php,你应该确保目录是正确的,也防止访问非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

对不起,回答了!使用wp-load.php include路由时必须非常小心。我犯了一个错误,因此它找不到它:)我很愚蠢,就像我想的那样!