在WordPress中的何处包含php文件以及如何在以后引用它们

时间:2019-04-03 作者:ahmed

我目前正在创建一个自定义网页,我愿意在ajax命令中引用一个php文件open(GET,"url php",true) 所以我的问题是把我的php文件放在哪里,这样它就可以被这个代码段看到,以及如何调用它。

谢谢

3 个回复
SO网友:Tom J Nowell

您可以将代码放入插件中,然后创建REST API端点。

例如,让我们创建一个插件,只需放置一个PHP文件wp-content/plugins/ahmedsplugin.phpwp-content/plugins/ahmedsplugin/plugin.php 顶部有这样一条评论:

<?php
/**
 * Plugin Name: Ahmeds Plugin
 **/

... your code goes here ...
现在您将在plugins文件夹中看到“Ahmeds Plugin”。插件只是plugins文件夹中的一个PHP文件,或者plugins文件夹的一个子文件夹,上面有注释。

你可以把WP代码放在这里运行,比如过滤器、动作、类等等。有些人把这些东西放在他们的主题中functions.php, 但主题是用于视觉/演示的,当你切换主题时,你会失去所有。

注意:此代码将在加载主题模板之前以及init 钩您应该尝试将所有代码放在挂钩中,以便更好地控制代码的运行时间。

现在让我们创建一个端点,javascript可以向其发出请求。首先告诉WP您要创建端点:

add_action( \'rest_api_init\', function () { // when WP sets up the REST API
        register_rest_route( // tell it we want an endpoint
                \'ahmed/v1\', \'/test/\', // at example.com/wp-json/ahmed/v1/test
                [ 
                        \'methods\' => \'GET\', // that it handles GET requests
                        \'callback\' => \'ahmed_test_endpoint\' // and calls this function when hit
                ]
        );
} );
当您访问时/wp-json/ahmed/v1/test 它将运行函数ahmed_test_endpoint, 因此,让我们创建该函数:

function ahmed_test_endpoint( $request ) {
    return \'Hello World\';
}
REST API将接受您返回的任何内容,对其进行JSON编码并发送出去。

您可以返回WP_Error 对象,它将更改HTTP代码等并输出消息。如果需要任何参数,请使用$request 对象,例如,如果您添加?bananas=yummy 到URL,然后$request[\'bananas\'] 将包含"yummy", 就像$_GET.

添加新端点时,请记住刷新/重新保存永久链接!

现在当我们去yoursite.com/wp-json/ahmed/v1/test 你会看到的"Hello World"

如果您愿意,您可以扩展register_rest_route 添加更多信息,例如代码需要哪些参数、如何验证这些参数、检查用户是否已登录以及是否有权限执行他们想要执行的操作等。

如果您这样做,REST API甚至会帮助您,因此如果您告诉它将有一个ID参数,但没有给出,它会告诉您缺少ID参数。管理AJAX或独立PHP文件无法做到这一点,这使得调试非常困难。它还大大提高了安全性

为什么不是一个独立的PHP文件

  1. WP API将不可用,因此您需要手动引导WP,这很痛苦
  2. 即使您的插件/主题被停用,端点也可用,这可能会造成安全问题
  3. 其他插件无法连接到它,因此缓存或优化插件没有任何好处,因此,可能存在性能损失,您需要自己展开所有安全检查,手动构建它们,这并不容易。如果您以前使用REST API,WP会帮您完成这些任务,解决方案是使用Admin AJAX API,但它对您没有多大帮助。而且,这是非常不可原谅的,如果您没有正确匹配AJAX操作,您会得到一个神秘的响应。除了登录/注销之外,它还不进行任何检查,不进行验证或清理,也不进行发现机制

SO网友:Krzysiek Dróżdż

如果您想在主题中使用AJAX,并且您想知道将处理此类请求的PHP文件放在哪里,那么。。。没有什么是真正的答案。。。

在WordPress中,处理AJAX应该与处理普通PHP应用程序略有不同。已经有了一种处理此类请求的机制。

因此,首先,您应该本地化JS脚本:

wp_localize_script( \'ajax-script\', \'ajax_object\', array( \'ajax_url\' => admin_url( \'admin-ajax.php\' ) );
然后,您应该使用该变量作为请求地址:

// it\'s important to send "action" in that request - this way WP will know which action should be processing this request
jQuery.get(ajax_object.ajax_url, {\'action\': \'my_action\', ...}, ... );
然后,您应该注册将处理请求的回调:

add_action( \'wp_ajax_my_action\', \'my_action\' );  // for logged in users
add_action( \'wp_ajax_nopriv_my_action\', \'my_action\' );  // for anonymous users
function my_action() {
    ...
}
您可以在此处阅读有关该主题的更多信息:

SO网友:Hito

通过将PHP文件中定义的函数包含到functions.php 文件如果不了解自己的结构,就很难给你更好的建议。但是functions.php 似乎是一个很好的位置,需要您的文件IMHO。