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

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 国际许可协议 进行授权,转载请附上出处链接及本声明。

------本页内容已结束,喜欢请分享------
Invitation
QiYun
715366739
created:04/09/2022
Welcome to Candyhome

Use this card to join the candyhome and participate in a pleasant discussion together .

Welcome to Knlde's candyhome,wish you a nice day .

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

© 版权声明
THE END
喜欢就支持一下吧
点赞29 分享
评论 共1条
头像
请认真评论,发表纯数字纯表情做禁言处理!
提交
头像

昵称

取消
昵称常用语表情代码图片
    • pengqi的头像-淇云博客-专注于IT技术分享钻石会员pengqiLV6重庆市 鹏博士宽带0