有很多方法可以满足你的要求。
如果您的php函数只是吐出一个选项数组,您可以考虑使用wp_localize_script()
然后通过引用脚本中的js对象获取数据。E、 g。
// theme functions.php or a plugin file
function dropdown_options() {
// modify to match your setup
wp_enqueue_script( \'my-scripts\', JS_DIR_URI . \'my-scripts.js\', array(\'jquery\'), null, true ); // main scripts file
wp_localize_script( \'my-scripts\', \'dropdownOptions\', $array_of_dropdown_options );
}
add_action( \'wp_enqueue_scripts\', \'dropdown_options\' );
// in your js file, access dropdown options
dropdownOptions.someOption;
另一种选择是使用WP-admin-ajax在下拉选择更改时获取下拉选项。E、 g。
// theme functions.php or a plugin file
function data_from_admin_ajax() {
wp_enqueue_script( \'frontend-ajax\', JS_DIR_URI . \'frontend-ajax.js\', array(\'jquery\'), null, true );
wp_localize_script( \'frontend-ajax\', \'frontend_ajax_object\',
array(
\'ajaxurl\' => admin_url( \'admin-ajax.php\' ),
)
);
}
add_action( \'wp_enqueue_scripts\', \'data_from_admin_ajax\' );
add_action( \'wp_ajax_dropdown_options\', \'my_awesome_dropdown_options_function\' ); // logged in users
add_action( \'wp_ajax_nopriv_dropdown_options\', \'my_awesome_dropdown_options_function\' ); // logged out users
function my_awesome_dropdown_options_function() {
// nonce check, if needed
// capabilities check, if needed
// check for required parameter, if needed
// do stuff and push data to $response
// return ajax response with wp_send_json( $response ) or wp_send_json_success( $response ) or wp_send_json_error( $response )
}
// frontend-ajax.js
jQuery(document).ready(function($) {
$(\'.some-dropdown\').on(\'change\',function(){
var data = {
\'action\': \'dropdown_options\',
\'dropdownValue\': $(this).val()
};
$.post(frontend_ajax_object.ajaxurl, data, function(response) {
console.log(response);
});
});
});
或者,如果需要,可以使用WP-restapi而不是admin-ajax。在这种情况下,您可能需要添加一个自定义端点,
https://developer.wordpress.org/rest-api/extending-the-rest-api/adding-custom-endpoints/