php - $wpdb 在 WordPress 插件文件中不起作用

标签 php wordpress

我正在使用 WordPress 插件。我创建了一个自定义表单,用户可以在其中添加值,然后单击提交按钮。当用户单击提交按钮时,它会重定向到自定义流程文件,我在其中编写用于插入和更新数据的查询。

我我的 process.php 文件,首先我打电话 全局 $wpdb ,但我的插入和更新查询不起作用,所以我从网上找到了一个解决方案来要求 config.php 文件在我的进程文件中。

require_once( str_replace('//', '/', dirname(__FILE__) . '/') . '../../../wp-config.php');

然后全局 $wpdb 完美地工作。但是 wordpress 存储库说这是非法的。我已经在插件主文件中包含了我的 form.php 文件 index.php ,所以我还包括 process.php 并评论 require_once 代码,但它不起作用。我不知道如何解决这个问题。

这是我的 form.php 代码:
<form method="post" action="<?php echo plugin_dir_url(__FILE__); ?>settings_process.php">

<input type="text" name="post_name_slug" id="post_name_slug" value="<?php echo POST_NAME_SLUG ?>" />

<input type="submit" name="save_settings" value="<?php _e("Save Changes","abc") ?>" />

这是我的 process.php 代码:
require_once( str_replace('//', '/', dirname(__FILE__) . '/') . '../../../wp-config.php');
    global $wpdb;

My insert and update queries

那么有没有其他解决方案,请帮助我。

多谢

最佳答案

使用 WP 操作可以解决您的问题。你的问题是你没有给 WP 机会来经历它的生命周期并加载所有必要的源。通过包含配置文件来调整它不是一个好方法。您可以在插件加载期间注册一个操作或 __construct()如果插件封装在一个类中。
您可以为此目的使用多种操作,我主要使用这些操作:

  • wp_ajax_{action_name} - 如果使用 AJAX
  • admin_post_{action_name} - 如果请求来自 wp-admin
  • 中的登录用户
  • admin_post_nopriv_{action_name} - 如果有人可以执行此请求

  • 然后代码很简单:
    add_action('wp_ajax_mysettingsprocess', 'mySettingsProcess');
    //If plugin "is object"
    add_action('wp_ajax_mysettingsprocess', array($this, 'mySettingsProcess');
    

    如果这行代码存在于您的插件源中,它将尝试调用 function mySettingsProcess() { ... }功能。在这个函数中,使用 $wpdb 没有问题。全局变量您还必须为请求提供适当的响应,WP 不会为您执行此操作。

    表单操作将如下所示:
  • admin_post_admin_post_nopriv_ :http://{wp_url}/wp-admin/admin-post.php?action=mysettingsprocess
  • 如果使用 JS/JQuery 和 AJAX 添加到 data: { action: 'mysettingsprocess' },

  • 所有这些信息在 WP Codex 中有详细描述。 .通常我会使用 WP 内置功能来启动任何插件自定义代码。添加位于 WP 之外的 PHP 源不是一个好习惯。

    关于php - $wpdb 在 WordPress 插件文件中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32114812/

    相关文章:

    php - openssl_encrypt 返回 false

    php - 如何使用 php 获取 MySQL 数据库中的枚举可能值?

    php - 根据条件(desc 或 asc)在 MySQL 查询后添加逗号

    php - 为什么我的 WordPress 查询无法在非索引页上运行?

    css - 列出 CSS 在我的 Wordpress 页面上不起作用

    php - 如何在 nextGen (galleryview template) wordpress 插件中增加图像的宽度?

    php - 结合 CURL 和简单的 html dom

    php - 如何从 php ://temp wrapper 中删除文件

    php - 子目录中带有 FastCGI 和 WordPress 的 NginX - "No input file specified"

    php - 在 Woocommerce 我的帐户菜单中的注销项目上方添加自定义项目