我理解你的问题,我也在想同样的事情。
这不是一个真正的问题,这更多的是一个良好的编程设计问题,前端和后端有一个良好的分离。
现在,我解决这个问题的方法是:
我希望您将您的AJAX操作称为wp_localize_script
. 我们将通过以下方式对其进行扩展:
wp_localize_script(
\'my-site-script\',
\'my_ajax_object\',
array(
\'my_ajax_url\' => admin_url( \'admin-ajax.php\' ),
\'my_frontend_call\' => \'something-here\',
\'my_nonce\' => wp_create_nonce( \'my_nonce\' )
);
这只是在frontpage中添加的,我相信您知道这是如何工作的。正如您所知,这将添加一小段javascript。请注意此处的变量
my_frontend_call
, 这是我们将要使用的重要一个。
有关如何设置良好的ajax调用的更多说明,请参见:link
现在我们已经全部设置好了,现在我们可以轻松地在后端实现如下逻辑:
<?php
// Here we check that we are facing the backend.
// This will also be true if we are facing the
// frontend but making an AJAX call.
// As you say bad, also IMO
if( is_admin() )
{
//Now here we are going to put the magic
if(isset($_POST[\'my_frontend_call\'])){
// Now these actions are loaded only when `my_frontend_call` is set
// You can add everything here that only get\'s loaded on a call where
// `my_frontend_call` is set
add_action(\'wp_ajax_handle_frontend_ajax\', \'handle_frontend_ajax_callback\');
add_action(\'wp_ajax_admin_only_ajax\', \'admin_only_ajax_callback\');
}
}
现在,您可以将这与来自不同位置的不同变量稍微混合。
我不知道为什么这不是一个已知的建议。在我看来,在根本不需要的时候加载东西是很难看的。
NOTE 我对WordPress还是新手,所以也许这不是一个好方法,我希望这里的一些专业人士能对此发表评论。