这里的根本问题是,永远不要从浏览器直接请求主题或插件中的PHP文件。这是一种极端恶劣的做法,非常脆弱,并且容易出现许多安全问题。
要使其正常工作,您需要在PHP文件的顶部放置类似的内容来引导WordPress:
// the line below is a bad idea, I apologise to those reading this
require_once(\'wp-blog-header.php\');
您可能还想通过定义
SHORT_INIT
, 尽管这取决于您使用的函数(以及定义时是否加载这些函数)。
But 这是完全错误的做法。因为其:
更多的努力是浪费,更慢,更不安全,可能会导致更高的维护和支持成本,根据您的评论,我建议您改用REST API。使用这些API将节省您的时间和精力,从长远来看,它将使事情变得更简单/更容易(而且更安全)
e、 g。
add_action( \'rest_api_init\', function () {
register_rest_route( \'porton/v1\', \'/sendemail\', array(
\'methods\' => \'GET\',
\'permission_callback\' => \'__return_true\',
\'callback\' => \'portons_email_function\',
) );
} );
function portons_email_function( $request ) {
// you get the parameters sent from $request:
$to = $request[\'to\'];
$subject = $request[\'subject\'];
... etc ...
// then send your emails
// and return the result
return \'Email is sent successfully.\';
}
和
jQuery.ajax({
url: <?php echo wp_json_encode( esc_url_raw( rest_url( \'porton/v1/sendemail\' ) ) ); ?>,
data: {
\'to\': \'[email protected]\',
\'subject\': \'the subject\',
...etc...
}
}).done(function( data ) {
console.log( data ); // should print email sent successfully int he browser console
});
请注意
\'permission_callback\' => \'__return_true\',
意味着每个人都可以使用这个端点,swap
__return_true
返回的函数的名称
true
如果用户可以这样做,或者
false
如果用户无法避免任何人能够发送电子邮件。