我一直在构建一个wordpress插件,用于显示网站上的信息。此数据已通过cURL发布到我的插件/ [plugin_name] / inc /目录(update.php)中的页面,并运行更新数据库所需的相关功能。
插头工作正常,但当我提交审查时,我还有两个问题似乎无法解决:
1。允许直接文件访问插件文件
...通过将此代码放在所有php文件的顶部来避免这种情况:
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
当然我需要直接访问此文件才能将POST数据发送给?或者我还有另一种方法吗?
2。直接调用核心加载文件
包括wp-config.php,wp-blog-header.php,wp-load.php,或几乎任何其他WordPress核心文件,你必须通过包直接调用不是一个好主意,我们不能批准一个插件,除非有充分的理由加载文件,否则这样做。它很容易失败,因为并非所有的WordPress安装都具有完全相同的文件结构
通常插件将包括wp-config.php或wp-load.php以获得对核心WordPress功能的访问,但有更好的方法来执行此操作。如果您将处理功能(需要但无法访问核心功能的功能)绑定到动作挂钩中,例如" init"或" admin_init"。 在同一个文件(update.php)的顶部,我已经包含了这样的内容:
require( dirname(dirname(dirname(dirname(dirname(__FILE__))))) . '\wp-load.php' );
因为我需要访问核心wp函数和类,例如
$wpdb->prepare
而且我不确定我怎么能这样做。我很感激这些问题的任何帮助!
答案 0 :(得分:2)
至于1.您应该在插件中创建一个处理post数据并运行CURL请求的方法。
至于2.我认为你可以逃脱 A a= this.aService.getAById(AID);
b.setA(a);
a.getBSet().add(b);
this.aService.saveA(a);
https://codex.wordpress.org/Class_Reference/wpdb
答案 1 :(得分:0)
如果其他人有这个问题,这就是我所做的:
1。我添加了此功能并挂钩到我的插件文件:
//GET POST DATA IF APPLICABLE
function wp_getpostdata() {
if ( isset( $_POST['user'] ) && isset( $_POST['pass'] ) && isset( $_POST['op'] )) {
require 'inc/update.php';
exit;
} // end if
} // end wp_getpostdata
add_action( 'init', 'wp_getpostdata' );`
2. 删除了wp-load include并添加了
global $wpdb;
到我的update.php文件,正如Kyra建议的那样。最后......
3. 将POST目标更改为我的网站地址
像魅力一样 - 希望别人觉得它很有用!