相当于公共页面的admin.php

时间:2014-05-13 作者:Digzol

我对Wordpress API很陌生,似乎找不到我需要的东西。

我一直在寻找一种创建公共页面的方法(用户无需管理员许可即可访问),类似于在管理员上创建页面时使用的方法。php。

基本上,我有一个在仪表板中创建调查的应用程序,但现在我想向用户显示实际情况。

我计划使用shortcode, 这将打开一个窗口,其中包含使用javascript的window.open(). 但是,如果调用插件目录中的空页面,我将无法再连接到数据库。在管理中。php我也可以$.postajaxurl, 但这只能在管理标头中访问。

我可以使用什么方法来显示公共页面,但仍然具有admin的大部分功能。php?

1 个回复
最合适的回答,由SO网友:gmazzap 整理而成

即使admin-ajax.phpAjax API 是为了在ajax请求中使用而创建的,它们可以在正常的http请求中使用,没有任何问题,请注意is_admin() 即使用户未登录并且请求是从前端完成的,也将为true。

您需要做的是为ajax api创建回调。在插件中或functions.php 放置:

$survey_action = \'my_survey\';
add_action( "wp_ajax_{$survey_action}", \'my_survey_callback\' );
add_action( "wp_ajax_nopriv_{$survey_action}", \'my_survey_callback\' );

function my_survey_callback() {
  echo "Welcome to the survey!";
  exit(); // always exit() at the end, when using ajax api
}
现在,当您向admin-ajax.php 包含设置为的“action”请求变量"my_survey" 这个my_survey_callback 功能将被触发。

因此,如果您现在在浏览器地址栏中输入一个url,如

http://www.example.com/wp-admin/admin-ajax.php?action=my_survey
服务器将回答“欢迎参加调查!”。

关于在javascript中使用此url,是的,ajaxurl 默认情况下,全局变量在管理页面中可用,但没有什么阻止您在非管理页面中使用wp_localize_script.

假设您的javascript文件名为my-script.js 并位于主题文件夹中的“js”子文件夹中,然后您可以将文件排队并传递ajax url,如下所示:

add_action( \'wp_enqueue_scripts\', \'add_my_script\' );

function add_my_script() {
  $handle = \'myscript\';
  wp_enqueue_script( $handle, get_template_directory_uri() . \'/js/my-script.js\' );
  $data = array(
    \'ajaxurl\' => admin_url( \'admin-ajax.php\' )
  );
  wp_localize_script( $handle, \'my_script_data\', $data );
}
使用上面的代码,内部my-script.js 您可以访问名为my_script_data 谁的ajaxurl 属性将是您必须使用的正确ajax url,因此,您可以在那里执行以下操作:

window.open( my_script_data.ajaxurl + \'?action=my_survey\' );
将打开一个新的浏览器选项卡,显示一个很棒的“欢迎参加调查!”。

结束

相关推荐

在wp-admin后端区域定制WordPress更新通知

有没有办法在后台管理区定制wordpress更新通知?我想这样做,这样我就可以改变Please update now 到Please contact now 并链接到其他URL。因此,运行网站的人不会更新网站,因为他们不知道如何备份网站。我已经找到了在线隐藏通知的方法,但没有办法实际编辑它。