如何更改特定信息的元密钥?

时间:2016-10-18 作者:kosmicbird

我一直在添加一个插件,我正在使用的插件总体上运行良好,但有几个问题,我必须在它的核心文件中解决。

我现在正在处理的问题是试图修复某些信息在数据库中的存储方式。

该插件支持私人消息传递。情况是,此插件使用meta\\u键“\\u participants”存储两个发送者的用户IDand 邮件的收件人。

因此,当我试图显示邮件的收件人时,我发现在前端显示收件人姓名/ID的唯一方法是使用\\u participants meta\\u键。

然而,正如您可能猜到的,当我使用\\u参与者元键时,它会同时提取收件人和发件人的数据。当我提取数据时,我不需要显示发件人/消息作者。

我想我需要将存储收件人ID的meta\\u密钥更改为\\u参与者以外的其他内容,以便创建一定程度的分离。

在何处/如何更改总体meta\\u键的名称,以便为邮件收件人指定不同的meta\\u键?

我还认为另一个解决方案(可能是更好、更健壮的解决方案)是,当我在使用的特定模块中提取\\u参与者数据时,使用某种条件语句来排除消息作者,但是我仍然是php的新手,因此我不确定如何成功地实现此方法。

如果有人能对这两种潜在的解决方案中的任何一种给出一些见解和指导,那就太棒了。

以下是显示\\u参与者(发件人和收件人)用户名的代码

  $post = $message; //setup_postdata does not work properly if variable name is NOT $post !!!!!

  ob_start();
  setup_postdata( $post ); //setup_postdata does not work properly if variable name is NOT $post !!!!!
  //$read_class = fep_is_read() ? \' fep-hide-if-js\' : \'\';
  $participants = get_post_meta( get_the_ID(), \'_participants\' );
  $par = array();
  foreach( $participants as $participant ) {
    $par[] = fep_get_userdata( $participant, \'display_name\', \'id\' );
  }
  fep_make_read();
  fep_make_read( true );
  ?>
  <div class="fep-message">
    <div class="fep-message-title-heading2">
<?php _e("Message Participants", \'front-end-pm\'); ?>: <?php echo implode( \', \', $par ); ?></div>
它当前显示在前端,如下所示:

Message Participants: joesender, johnrecipient

但需要以某种方式排除消息作者才能获得这样的消息:

Recipient: johnrecipient

这是另一个我认为可能对解决这个问题很重要的块(我认为这就是为作者+收件人(又名\\u参与者)存储数据的原因)

function fep_send_message( $message = null, $override = array() )
{
if( null === $message ) {
    $message = $_POST;
}

if( ! empty($message[\'fep_parent_id\'] ) ) {
    $message[\'post_status\'] = fep_get_option(\'reply_post_status\',\'publish\');
    $message[\'message_title\'] = __(\'RE:\', \'front-end-pm\'). \' \' . get_the_title( $message[\'fep_parent_id\'] );
    $message[\'message_to_id\'] = get_post_meta( $message[\'fep_parent_id\'], \'_participants\' );
    $message[\'post_parent\'] = absint( $message[\'fep_parent_id\'] );
} else {
    $message[\'post_status\'] = fep_get_option(\'parent_post_status\',\'publish\');
    $message[\'post_parent\'] = 0;
}

$message = apply_filters(\'fep_filter_message_before_send\', $message );

if( empty($message[\'message_title\']) || empty($message[\'message_content\']) ) {
    return false;
}
// Create post array
$post = array(
    \'post_title\'    => $message[\'message_title\'],
    \'post_content\'  => $message[\'message_content\'],
    \'post_status\'   => $message[\'post_status\'],
    \'post_parent\'   => $message[\'post_parent\'],
    \'post_type\'     => \'fep_message\'
);

if( $override && is_array( $override ) ) {
    $post = wp_parse_args( $override, $post );
}

$post = apply_filters(\'fep_filter_message_after_override\', $post );

// Insert the message into the database
$message_id = wp_insert_post( $post );

if( ! $message_id || is_wp_error( $message_id ) ) {
    return false;
}
$inserted_message = get_post( $message_id );

if( ! empty($message[\'message_to_id\'] ) ) { //FRONT END message_to return id of participants
    if( is_array( $message[\'message_to_id\'] ) ) {
        foreach( $message[\'message_to_id\'] as $participant ) {
            add_post_meta( $message_id, \'_participants\', $participant );
        }
    } else {
        add_post_meta( $message_id, \'_participants\', $message[\'message_to_id\'] );
    }
}
add_post_meta( $message_id, \'_participants\', $inserted_message->post_author );

if( $inserted_message->post_parent ) {

    $participants = get_post_meta( $inserted_message->post_parent, \'_participants\' );

    if( $participants && is_array( $participants ) )
    {
        foreach( $participants as $participant ) 
        {
            delete_post_meta( $inserted_message->post_parent, \'_fep_parent_read_by_\'. $participant );
            delete_user_meta( $participant, \'_fep_user_message_count\' );
        }
    }
    fep_make_read( true, $inserted_message->post_parent, $inserted_message->post_author );

} else {
    $participants = get_post_meta( $message_id, \'_participants\' );

    if( $participants && is_array( $participants ) )
    {
        foreach( $participants as $participant ) 
        {
            delete_user_meta( $participant, \'_fep_user_message_count\' );
        }
    }
}

fep_make_read( true, $message_id, $inserted_message->post_author );

 do_action(\'fep_action_message_after_send\', $message_id, $message, $inserted_message );

return $message_id;
}

1 个回复
最合适的回答,由SO网友:kosmicbird 整理而成

解决方案:

我修改了那句话} else { add_post_meta( $message_id, \'_participants\', $message[\'message_to_id\'] ); 通过更改_participants_recipients, 然后还应用了新的_recipients meta\\u键,指向它在前端显示的位置。

相关推荐

如何从/wp-json/wp/v2/USERS/Me获取数据

我试图在wordpress中使用JWT auth获取用户数据。我被发送给/wp-json/wp/v2/users/me的邮递员get请求中包含了我从/wp-json/jwt-auth/v1/token获得的令牌。但我有一个错误:{ "code": "rest_not_logged_in", "message": "you are not logged in", "dat