web-dev-qa-db-fra.com

Comment puis-je changer la meta_key pour une information particulière?

J'ai ajouté à un plugin que j'utilise qui fonctionne bien dans l'ensemble, mais il y a plusieurs problèmes que j'ai dû résoudre et résoudre dans ses fichiers principaux.

Le problème que je traite en ce moment est d'essayer de corriger la manière dont certaines informations sont stockées dans la base de données.

Le plugin active la messagerie privée. La situation est que ce plugin utilise la méta_key "_participants" pour stocker l'ID utilisateur de l'expéditeur et du destinataire d'un message.

Ainsi, lorsque j'essaie d'afficher le destinataire d'un message, le seul moyen que j'ai trouvé pour obtenir le nom/l'ID du destinataire à afficher sur le serveur frontal est d'utiliser la méta_key _participants.

Cependant, comme vous pouvez probablement le deviner, lorsque j’utilise _participants metakey, il extrait les données du destinataire et de l’expéditeur. Je n'ai pas besoin que l'expéditeur/l'auteur du message s'affiche lorsque je récupère les données.

J'assume que je dois changer la méta_key avec laquelle l'ID de destinataire est stocké avec autre chose que _participants afin de créer un degré de séparation.

Où/comment puis-je changer le nom de la méta_key globale pour pouvoir attribuer une autre meta_key à mes destinataires?

Je pense aussi qu'une autre solution (et probablement la meilleure solution, plus robuste) pourrait être d'utiliser une sorte d'énoncé conditionnel pour exclure l'auteur du message lorsque je tire les données _participants du module particulier avec lequel je travaille, mais je suis toujours un noob avec php donc je ne suis pas sûr de savoir comment réussir à retirer cette méthode.

Ce serait génial si quelqu'un pouvait donner un aperçu et des conseils sur l'une ou l'autre de ces deux solutions potentielles.

Voici le code qui affiche les noms d'utilisateur des _participants (expéditeur et destinataire)

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

Il affiche actuellement sur le front-end comme ceci:

Message Participants: joesender, johnrecipient

mais il faut en quelque sorte exclure l’auteur du message pour l’obtenir comme ceci:

Destinataire: johnrecipient

et voici un autre bloc que je pense peut être important pour résoudre ce problème (je pense que c'est ce qui stocke les données pour l'auteur + le destinataire (alias les _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

Solution:

J'ai modifié la ligne qui dit } else { add_post_meta( $message_id, '_participants', $message['message_to_id'] ); en remplaçant _participants par _recipients, puis j'ai également appliqué le nouveau _recipients meta_key à l'endroit où il est affiché en mode frontal.

0
kosmicbird