[子比]为打回的文章添加一个私信通知

ugOk.gif

d3593c1a58210927

 

[子比]为打回的文章添加一个私信通知

续上回,因为朋友想建二次元社区网站,所以我帮他开发网站。我觉得社区网站多多少少用户发文章需要被打回把,但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);
    }
}

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

e3962e0680210529

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

8a06d5dc32210603

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

f96ad7c742210700

这就是效果了。

结束语

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

顺带我打个广告QwQ,我搞了个动漫资讯站,可以来看看:www.hnav.moe。

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

感谢您的来访,获取更多精彩文章请收藏本站。

© 版权声明
THE END
喜欢就支持一下吧
点赞29 分享
评论 共1条
头像
欢迎提交您的评论,共创文明良好交流环境,请勿提交违规言论!
提交
头像

昵称

取消
昵称表情代码图片