You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jQuery实现同页调用PHP函数后执行window.print功能求助

解决方案:在WordPress中点击打印按钮同时触发PHP函数

嘿,我懂你现在的需求啦——既要保留当前的打印功能,又要在点击按钮时悄悄调用一个PHP函数对吧?这在WordPress里用Ajax就能轻松实现,正好能用上你正在学习的知识点,咱们一步步来:

1. 修改前端jQuery脚本,加入Ajax请求

先把你原来的点击事件扩展一下,在执行打印后发起Ajax请求,触发后端PHP函数:

$(document).ready(function(){
  $("#print-poem").click(function(){
    // 先执行页面打印
    window.print();
    
    // 发起Ajax请求调用后端PHP函数
    $.ajax({
      url: ajax_object.ajax_url, // 这个地址由WordPress提供,后面会在PHP里配置
      type: 'POST',
      data: {
        action: 'trigger_print_related_function', // 这个标识对应后端的处理钩子
        // 如果你需要给PHP函数传参数,比如当前文章ID,可以在这里加:
        // post_id: <?php echo get_the_ID(); ?>
      },
      success: function(response){
        // 请求成功后的回调(可选),比如在控制台确认操作
        console.log('PHP函数执行成功:', response);
      },
      error: function(xhr, status, error){
        // 请求出错时的提示(可选)
        console.error('触发PHP函数失败:', error);
      }
    });
  });
});

2. 在子主题的functions.php中配置Ajax处理

WordPress有专门的Ajax机制,咱们需要注册处理请求的PHP函数,同时把Ajax地址传递给前端:

// 第一步:把WordPress的Ajax地址传递给前端JS
add_action('wp_enqueue_scripts', 'my_pass_ajax_url');
function my_pass_ajax_url() {
  // 本地化jQuery脚本,让前端能拿到ajax_url变量
  wp_localize_script('jquery', 'ajax_object', array(
    'ajax_url' => admin_url('admin-ajax.php')
  ));
}

// 第二步:注册处理Ajax请求的PHP函数
// 登录用户触发的请求用wp_ajax_钩子
add_action('wp_ajax_trigger_print_related_function', 'my_print_related_function');
// 未登录用户触发的请求用wp_ajax_nopriv_钩子(如果你的页面允许未登录用户访问,就保留这行)
add_action('wp_ajax_nopriv_trigger_print_related_function', 'my_print_related_function');

function my_print_related_function() {
  // 这里写你要执行的PHP逻辑,比如记录打印日志、更新数据等
  // 举个例子:把打印记录写入日志
  $current_post_id = isset($_POST['post_id']) ? intval($_POST['post_id']) : 0;
  error_log("用户点击了打印按钮,文章ID:{$current_post_id}");
  
  // (可选)给前端返回响应
  wp_send_json_success('打印关联操作已完成');
  
  // 必须用die()结束,避免WordPress返回额外内容
  die();
}

注意事项

  • 如果你的jQuery脚本是放在单独的.js文件里,记得用wp_enqueue_script正确引入,并且在wp_localize_script的第一个参数里填写你脚本的handle名称(比如print-poem-script)。
  • 如果你的页面只对登录用户开放,可以删掉wp_ajax_nopriv_*那一行钩子。
  • WordPress默认已经加载了jQuery,所以不用额外引入,但如果你的主题移除了jQuery,记得用wp_enqueue_script('jquery')重新加载。

内容的提问来源于stack exchange,提问作者ChrisJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:36:42