【问题标题】:How to run add_action() or add_filter() after a button click?单击按钮后如何运行 add_action() 或 add_filter()?
【发布时间】:2019-04-30 14:51:15
【问题描述】:

我编写了一个简单的插件,通过使用 add_filter() 将一些文本附加到每个帖子内容,它工作正常。但现在我只想在单击按钮后运行 add_filter 。所以我在我的选项页面中添加了一个按钮,并添加了一个在单击后执行的功能。但问题是当我将 add_filter() 放在该按钮操作函数中时,它不会执行。 谁能帮我写代码?谢谢!

这是在 php 文件的根目录中工作的。

add_filter("the_content", "appendAction");

function appendAction($the_Post) {

   $the_Post.=" Bye ! ";

   return $the_Post;
}

但放入按钮操作功能时不起作用

function test_button_action(){

   echo "button clicked "; //this runs after clicking button but not below code

   add_filter("the_content", "appendAction");

   function appendAction($the_Post) {

      $the_Post.=" Bye ! ";

      return $the_Post;
   }
}

【问题讨论】:

    标签: php wordpress


    【解决方案1】:

    Wordpress 做了一些顽皮的输出缓冲操作。很多时候,在您的更改到达输出的模板之前按时到达页面为时已晚。我建议使用像 xdebug 这样的调试工具,或者写入日志文件以查看是否遇到了断点。您还可以执行回显并立即执行退出以绕过输出缓冲操作,以查看您的代码是否正在运行。例如echo 'reached this point in the code';exit; 如果模板中为时已晚,很多时候您需要在模板中添加一个新插槽,以读取您想要在页面上插入的后期信息,然后使用 JavaScript 将其放入页面上的正确位置。

    请向我们提供有关原因的更多信息,我可以给出更详细的答案。

    【讨论】:

    • 谢谢,我会检查的。您知道如何以其他方式执行此操作(单击按钮后执行 add_action() )吗?
    • @TharinduEranga 按钮是存在于前端的东西。你能更清楚他们点击按钮发生了什么吗?它是如何到达后端的?此按钮是否提交表单?它实际上是一个将查询字符串发送到后端的链接吗?它需要保持在会话中吗?或者您是否需要它从后端提取某些内容并通过 Ajax 将其附加到页面,例如通过 Wordpress 的 REST API 端点以 /wp-json/ 开头?请解释一下。
    • 是的,按下按钮并提交表单。它调用我提出的方法。
    • @TharinduEranga 很难说没有看到你在哪里以及如何调用test_button_action。需要尽早调用它,以便在内容已经返回模板输出之前应用add_filter。如果你真的有一个提交表单,你应该已经知道在你的代码中尽可能高地立即调用test_button_action。怀疑它会有所作为,但您可以尝试将appendAction 的函数定义移到test_button_action 之外。只能在test_button_action 内调用add_filter("the_content", "appendAction");
    • 您应该能够在表单中包含一个隐藏字段,您可以让 Wordpress 监听以便知道在提交表单时尽早致电 add_filter("the_content", "appendAction");... 在哪里你在调用test_button_action?应该从functions.php 执行此操作...您是否将其放入主题或插件中?
    猜你喜欢
    • 1970-01-01
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多