将用户角色传递给正文中的Java脚本代码

时间:2022-03-01 作者:George Brian Busila

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

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

聊天机器人是使用Insert Headers and Footers wordpress插件。我将其添加到标题中。但我想它在体内也会起作用。

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

我知道有一些php函数(is\\u user\\u loggedin或wp\\u get\\u current\\u user),但我不知道如何实际运行这些函数。

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

<script>

<?php
$user = wp_get_current_user();
var_dump($user);
?>

</script> 
这就是我将聊天机器人添加到网站的方式:我将以下内容添加到Header 使用前面提到的插件的应用程序。

<script>!(function () {
  let e = document.createElement("script"),
    t = document.head || document.getElementsByTagName("head")[0];
  (e.src =
    "https://cdn.jsdelivr.net/npm/[email protected]/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);
})();
</script>
我正在尝试将用户角色传递给initPayload 属性但我在理解如何实际运行和存储php代码的结果方面确实遇到了困难。

我真的很感谢你的帮助!

1 个回复
SO网友:Antti Koskinen

据我所知,上述插件旨在向站点的页眉、正文或页脚添加css或js,而不是PHP。

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

您可以从中了解有关创建自定义插件的更多信息WP Dev docs, Plugin Basics.

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

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() {
  ?>
  <!-- script here -->
  <?php
}
当然,您可以省去PHP if语句,始终打印脚本,只打印脚本中间的角色。但我不认为这是一种干净的做事方式。

add_action( \'wp_head\', \'my_print_chatbot_script_with_role\' );
function my_print_chatbot_script_with_role() {
  $user = wp_get_current_user();
  ?>
  <script>
    // script...
    title: "TestBot",
    initPayload: <?php echo (array) $user->roles[0]; ?>,
    customData: { language: "en" },
    // script...
  </script>
  <?php
}
第三种选择是将脚本放入单独的js文件中enqueue 它使用PHP。然后inline 要在主脚本文件中使用的角色数据。

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\'
  );
}

相关推荐

浏览器刷新时删除数据库条目,AJAX PHP jQuery

我有一个表单,在通过ajax提交表单时更新数据库表中的列。一切都很好,数据库表列可以获取信息,但一旦刷新浏览器,信息就会从数据库中删除。如果meta\\u值不存在,但meta\\u值也在提交表单时创建的数据库中,则PHP将执行数据库更新。我希望信息保留在数据库中,直到或除非meta\\u值被删除或不存在。任何见解都将不胜感激。PHPadd_action(\'wp_ajax_hide_this\', \'hide_this_by_id\'); add_action(\'wp_ajax_nopriv_