首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将用户角色传递给正文中的javascript代码

将用户角色传递给正文中的javascript代码
EN

WordPress Development用户
提问于 2022-03-01 09:35:50
回答 1查看 146关注 0票数 0

我知道这个问题以前已经回答过了,但这并不是我想要的信息。

现在我正在为一个客户开发一个聊天机器人。我对web开发有点陌生,但特别是wordpress (这是客户端正在使用的)。

聊天机器人使用wordpress的Insert Headers and Footers插件添加到页面中。我把它加到头上。但我想它也会在身体里起作用。

考虑到我不了解PHP/Wordpress,我不知道如何将用户角色传递给bot,因此它只对某些用户角色提供支持。

我知道有一些php函数(is_user_loggedin或wp_get_current_user),但我不知道如何实际运行这些函数。

我试着在像下面这样的脚本标记之间添加它们,至少尝试将信息转储到浏览器控制台,但是它没有工作。

代码语言:javascript
代码运行次数:0
运行
复制
<?php
$user = wp_get_current_user();
var_dump($user);
?>

这就是我如何添加聊天机器人到网站:我添加以下的应用程序的Header使用前面提到的插件。

代码语言:javascript
代码运行次数:0
运行
复制
!(function () {
  let e = document.createElement("script"),
    t = document.head || document.getElementsByTagName("head")[0];
  (e.src =
    "https://cdn.jsdelivr.net/npm/rasa-webchat@1.x.x/lib/index.js"),
    // Replace 1.x.x with the version that you want
    (e.async = !0),
    (e.onload = () => {
      window.WebChat.default(
        {
          params: { storage:"session"},
          title: "TestBot",
          initPayload: 'hello',
          customData: { language: "en" },
          socketUrl: "https://testlink.com",
          inputTextFieldHint: "Ask question here",
          // add other props here
        },
        null
      );
    }),
    t.insertBefore(e, t.firstChild);
})();

我试图将用户角色传递给initPayload属性。但是,在这里,我真的很难理解如何实际运行和存储php代码的结果。

我真的很感激你的帮助!

EN

回答 1

WordPress Development用户

发布于 2022-03-01 17:42:21

据我了解,上述插件的目的是将css或js添加到站点的页眉、正文或页脚,而不是PHP。

我建议创建一个自定义插件,用于在站点上集成您的自定义脚本。这样,您就不依赖于其他插件,并且您可以完全控制脚本添加到站点的方式和时间。

您可以了解有关从WP Dev,插件基础创建自定义插件的更多信息。

在您的自定义插件中,您可以根据用户和角色有条件地添加脚本。下面是简单的例子。取消注释if语句,或根据需要添加更多语句。

代码语言:javascript
代码运行次数:0
运行
复制
add_action( 'wp_head', 'my_maybe_add_chatbot' );
function my_maybe_add_chatbot() {

  // only logged in users?
  // if ( ! is_user_logged_in() ) {
  //   return;
  // }

  // Only certain role
  // $user = wp_get_current_user();
  // $allowed_role = 'some_role';
  // if ( ! in_array( $allowed_role, (array) $user->roles ) ) {
  //   return;
  // }

  // other guards..

  my_print_chatbot_script();
}

function my_print_chatbot_script() {
  ?>

当然,您可以省略PHP语句,始终打印脚本,只需在脚本中间打印角色。但我不认为这是一种干净的做事方式。

代码语言:javascript
代码运行次数:0
运行
复制
add_action( 'wp_head', 'my_print_chatbot_script_with_role' );
function my_print_chatbot_script_with_role() {
  $user = wp_get_current_user();
  ?>
  
    // script...
    title: "TestBot",
    initPayload: <?php echo (array) $user->roles[0]; ?>,
    customData: { language: "en" },
    // script...

第三种选择是将脚本放入单独的js文件中,并使用排队进行。然后,内联要在主脚本文件中使用的角色数据。

代码语言:javascript
代码运行次数:0
运行
复制
add_action( 'wp_enqueue_scripts', 'my_enqueue_scripts' );
function my_enqueue_scripts() {
  $user = wp_get_current_user();
  
  wp_enqueue_script(
    'my-script',
    plugin_dir_url( __FILE__ ) . '/js/script.js',
    array(),
    '1.0.0',
    true
  );

  // access in js console.log( MY_SCRIPT_USER_ROLES );
  wp_add_inline_script(
    'my-script', 
    'const MY_SCRIPT_USER_ROLES = ' . json_encode( (array) $user->roles ), 
    'before'
  );
}
票数 1
EN
页面原文内容由WordPress Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://wordpress.stackexchange.com/questions/403253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档