我正在使用WordPress插件。我创建一个自定义表单,用户添加值,然后单击提交按钮。当用户点击提交按钮时,它会重定向到自定义流程文件,在那里我编写用于插入和更新数据的查询。
我的 process.php 文件,首先我调用 global $ wpdb ,但我的插入和更新查询无效,所以我发现net的解决方案需要 config.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") ?>" />
然后全局$ wpdb 完美运行。但wordpress存储库说它是非法的。我已经在插件主文件 index.php 中包含了我的form.php文件,所以我还包括 process.php 并注释require_once代码,但它不起作用。我不知道如何解决这个问题。
这是我的form.php代码:
require_once( str_replace('//', '/', dirname(__FILE__) . '/') . '../../../wp-config.php');
global $wpdb;
My insert and update queries
这是我的process.php代码:
int temp[6];
对此还有其他解决方案,请帮助我。
非常感谢
答案 0 :(得分:3)
使用WP操作可以解决您的问题。你的问题是你没有让WP机会完成它的生命周期并加载所有必要的资源。通过包含配置文件来调整它不是一个好方法。如果插件封装在类中,您可以在插件加载或__construct()
函数期间注册操作。
您可以使用多种操作来实现此目的,我主要使用这些:
代码很简单:
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 data: { action: 'mysettingsprocess' },
所有这些信息都在WP Codex中详细介绍。通常我会使用WP内置功能来启动任何插件自定义代码。添加生活在WP之外的PHP源代码不是一个好习惯。