web-dev-qa-db-ja.com

特定の情報のmeta_keyを変更する方法

私は使っているプラ​​グインに追加してきましたが、それは全体的にうまくいきましたが、いくつかの問題を抱えていて、そのコアファイルを修正しなければなりませんでした。

私が今扱っている問題は、特定の情報がデータベースにどのように格納されるかを修正しようとしています。

プラグインはプライベートメッセージングを有効にします。状況は、このプラグインがmeta_key "_participants"を使用してメッセージの送信者と受信者の両方のユーザーIDを格納することです。

したがって、メッセージの受信者を表示しようとするとき、フロントエンドに表示する受信者の名前/ IDを取得する唯一の方法は_participants meta_keyを使用することです。

ただし、ご想像のとおり、_participantsメタキーを使用すると、受信者と送信者の両方にデータが送信されます。データを取得したときに送信者またはメッセージの作成者が表示する必要はありません。

ある程度の分離を作成するには、受信者IDが格納されているmeta_keyを_participants以外のものに変更する必要があると思います。

メッセージ受信者に別のmeta_keyを付けることができるように、包括的なmeta_keyの名前をどこで、どのように変更できますか。

私が作業している特定のモジュールの_participantsデータを引っ張るとき、私はまた別の解決策(そしておそらくより良い、より堅牢な解決策)がある種の条件文を使ってメッセージの作者を除外することができると思いますphpのnoobなので、どうやってこのメソッドをうまくやらせるのか私にはわからない。

これらの2つの解決策のいずれかについて、誰かが何らかの洞察とガイダンスを与えることができれば素晴らしいでしょう。

これは_参加者(送信者と受信者の両方)のユーザー名を表示しているコードです。

  $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>

現在はフロントエンドに次のように表示されています。

メッセージの参加者:joesender、johnrecipient

しかし、このようにするためにはどういうわけかメッセージの作者を除外する必要があります。

受信者:johnrecipient

そしてこれが私がこれを解決するために重要であると思うもう一つのブロックです(私はこれが著者+受取人(別名_participants)のためのデータを格納しているものであると思います)

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
kosmicbird

溶液:

_participants_recipientsに変更することによって} else { add_post_meta( $message_id, '_participants', $message['message_to_id'] );と言う行を修正し、それからそれがフロントエンドで表示されるところに新しい_recipients meta_keyも適用しました。

0
kosmicbird