续上回,因为朋友想建二次元社区网站,所以我帮他开发网站。我觉得社区网站多多少少用户发文章需要被打回把,但wordpress打回文章到草稿没有任何功能会告知用户!这就很离谱了。于是我就写了条代码实现管理员能够在后台写打回原因并发送给用户。

代码

首先得知道Zibll是如何调用发送私信的。这里我先找到了发送私信的ajax代码的位置:/inc/functions/message/functions/ajax.php:176 function zib_ajax_send_private()。之后就可以根据这个代码写自己的发送私信的函数:

function send_private_message($data){
        //设置浏览器缓存限制提交的间隔时间
    $receive = $data['msg'];
    $expire = time() + 3;
    //登录用户验证
    $user_id = !empty($data['send_user']) ? $data['send_user'] : 1;
    //黑名单验证
    //联网合规性判断
    $msg_args = array(
        'send_user'    => $user_id,
        'receive_user' => $data['receive_user'],
        'content'      => $receive,
        'parent'       => '',
        'status'       => '',
        'meta'         => '',
        'other'        => '',
    );

    $msg = Zib_Private::add($msg_args);

    if (!$msg) {
        echo (json_encode(array('error' => 1, 'ys' => 'danger', 'msg' => '操作失败')));
        exit;
    }
    $html = Zib_Private::get_msg_box($msg, $user_id);
    return '消息已发送';

}

把这个函数放到functions.php 中即可。

$data = {

‘msg’ =  ‘ 发送的话’,

‘send_user’ = ‘发送用户的ID,是数字,不是字符串’,

‘receive_user’ = ‘收信用户的ID,是数字’

}

之后加入另一个代码:

<?php
//注册meta box
add_action( 'add_meta_boxes', 'init_fallback_private_message' );
function init_fallback_private_message() {
    add_meta_box(
        'fallback_msg',
        '打回理由',
        'fallback_private_message',
        'post',
        'normal',
        'low'
    );
}

//然后在配置参数里面指定回调函数,我们需要在这个函数里面创建表单:

function fallback_private_message($post) {

    // 创建临时隐藏表单,为了安全
    wp_nonce_field( 'fallback_private_message', 'fallback_private_message_nonce' );
    // 获取之前存储的值
    $value = get_post_meta( $post->ID, '_fallback_msg', true );

    ?>

    <label for="fallback_msg"></label>
  <p>输入打回原因,不填写则不发送</p>
  <input type="hidden" name="fallback_msg" id="fallback_msg" value="<?php echo esc_attr( $value ); ?>'" />
  <textarea cols="60" rows="3" style="width:100%;" name="fallback_msg"><?php echo esc_attr( $value ); ?></textarea><br />
  <ul>
      <?php
      $prev_feedback_msg = get_post_meta( $post->ID, '_prev_feedback_msg', true );
      if(!empty($prev_feedback_msg))
      foreach($prev_feedback_msg as $k=>$v){
          ?>
              
              <li>
                  <?php echo $k.' - '.$v; ?>
              </li>
              
          <?php
      }
      ?>
  </ul>
    <?php
}

//保存artwork_id参数
add_action( 'save_post', 'artwork_id_save_meta_box' );
function artwork_id_save_meta_box($post_id){
    $msg = sanitize_text_field( $_POST['fallback_msg'] );
    $last = get_post_meta( $post_id, '_prev_feedback_msg', true )?:array();
    
    array_push($last, $msg);
    if (!empty($msg)){
        update_post_meta( $post_id, '_prev_feedback_msg', $last );
    }
    update_post_meta( $post_id, '_fallback_msg', '' );
    
    $msg_args = array(
        'send_user'    => get_current_user_id(),
        'receive_user' => get_post($post_id)->post_author,
        'msg'          => '您的文章《<a href="'.get_permalink( $post_id ).'">'. get_post($post_id)->post_title.'</a>》已退回,原因:'.$msg
    );
    if(!empty($msg)){
        send_private_message($msg_args);
    }
}

代码主要功能我就不赘述了。直接上功能预览。

子比主题为驳回的文章添加私信通知-狐狸库

在打回原因中写入文字后,只要保存文章就会发送给该文章的所有者。

子比主题为驳回的文章添加私信通知-狐狸库

当然,还有自动保存前几次的打回原因。是不是很人性化

子比主题为驳回的文章添加私信通知-狐狸库

这就是效果了。

结束语

这就是所有的步骤了,该功能还做的不完善。比如历史记录应该加上是哪个管理发送的打回,在什么时候打回的之类的功能。

来源:详情

依据 CC BY-SA 3.0 CN 国际许可协议 进行授权,转载请附上出处链接及本声明。

温馨提示:本文最后更新于2023/11/08 16:19:25。若文章内容或图片失效,请留言联系站长反馈!
!
也想出现在这里? 联系我们
创意广告
© 版权声明
THE END
点赞0赞赏 分享
评论 共3条

请登录后发表评论

    请登录后查看评论内容