我对Wordpress/PHP世界很陌生。我希望我的页面能够与我自己构建的API进行通信。为此,我在Wordpress页面上使用HTML代码小部件创建了一个表单,如下所示:
我将这段代码添加到当前主题的functions.php中:
function get_shortcode($sc) {
$response = wp_remote_get('http://localhost:9000/shortcode/'.$sc);
if (is_array($response)) {
$body = $response['body'];
$data = json_decode($body);
echo $data;
if (! is_wp_error($data)) {
echo "error";
}
}
return;
}
add_action('submit_shortcode', 'get_shortcode');但我看不出如何将函数与表单集成。当我提交我的表单时,它会将我发送到mypage/ submit _shortcode。如何在提交表单时触发函数get_shortcode?
PS:这个“短代码”与Elementor的短代码小部件无关
发布于 2021-10-15 22:45:22
听起来好像您想要某种AJAX请求。
在functions.php文件中,加入一些JavaScript以处理表单。
wp_register_script( 'my-scripts', get_stylesheet_directory_uri() . '/[path to your scripts]/myscripts.js', array( 'jquery' ), '1.0', true );参考见此链接。
在此下面,为AJAX添加一个JavaScript变量。
wp_localize_script( 'my-scripts', 'data', array( 'ajax_url' => admin_url( 'admin-ajax.php' );注册脚本后,将其添加到队列中,以便可以加载它。
wp_enqueue_script( 'my-scripts' );在此基础上,添加从API获取响应的代码。
// your function, set up for AJAX
function get_api_response() {
$response = wp_remote_get('http://localhost:9000/shortcode/'.$sc);
if (is_array($response)) {
$body = $response['body'];
$data = json_decode($body);
echo $data;
if (! is_wp_error($data)) {
echo "error";
}
}
wp_die(); // make sure you do this
}
add_action( 'wp_ajax_get_api_response', 'get_api_response' );
add_action( 'wp_ajax_nopriv_get_api_response', 'get_api_response' );参考这里。
最后,在JavaScript文件(本例中的myscripts.js)中,处理表单提交。
jQuery(document).ready(function($) {
$('#myform').on('submit', function(e) {
e.preventDefault(); // stop the form from submitting
$.post(
data['ajax_url'], // passed in from wp_localize_script
{
'input' : $('#input').val()
},
function( response ) {
// do what you want to do here
// the response will be what's echoed by the
// get_api_response function
}
);
});
});如果您不想使用AJAX,则需要将所使用的“短代码”变成真正的短代码,并在您要将表单发布到的页面上使用。关于那个这里的信息。
然后,您的短代码将需要从表单中获取$_POST值,并对它们执行一些操作。无论是哪种情况,都要确保净化来自外部世界的所有价值观。
希望这能有所帮助。
干杯!
发布于 2021-10-16 16:31:23
如果您对JavaScript很满意,那么我认为您在这里尝试的一种方法就是将您的函数的JavaScript版本排队,然后从表单中调用它作为onSubmit属性。因此,按照以下方针:
Enter name: 您已经在myFunction或插件中加入了function.php:
function load_my_script() {
wp_enqueue_script( 'myFunction', get_template_directory_uri() . '/js/myFunction.js');
}
add_action( 'wp_enqueue_scripts', 'load_my_script' );https://wordpress.stackexchange.com/questions/396962
复制相似问题