wake-up-neo.net

Verwenden Sie die Funktionalität von 2 WordPress-Plugins

Ich würde gerne folgendes machen:

Registrierte Benutzer in meiner WordPress-Anwendung können Nachrichten empfangen. Sie können Nachrichten auf folgende Arten empfangen:

  • Die Wordpress-Anwendung (Inbox-System)
  • SMS-Nachricht
  • Email

Ich möchte das Frontend PM Plugin verwenden, um Nachrichten im Portal zu versenden. Für die SMS-Nachrichten würde ich das Twilio-Plugin verwenden.

Wenn sie also eine Nachricht gesendet haben (Funktionalität durch das Front-End-Plugin PM), möchte ich eine andere Funktion im Twilio-Plugin aufrufen, um eine SMS zu senden.

Was ist der richtige Weg, um dies zu tun? Ich denke nicht, dass das Bearbeiten der Funktion im Front-End-Plugin PM der richtige Weg ist, dies zu tun? Wie soll es gemacht werden?

3
nielsv

Levi Dulstein hat viel Recht, aber meiner Meinung nach verwendet Front-End-PM zwei Haken, um Nachrichten zu senden:

  • fep_save_message (vom Backend)
  • fep_action_message_after_send (vom Frontend)

Vor dem Versenden einer E-Mail werden einige Dinge überprüft, wie etwa der Veröffentlichungs- oder Sendestatus (enthält/class-fep-emails.php):

function save_send_email( $postid, $post ) {
    if ( ! $post instanceof WP_Post ) {
        $post = get_post( $postid );
    }
    if ( 'publish' != $post->post_status ){
        return;
    }       
    if ( get_post_meta( $postid, '_fep_email_sent', true ) ){
        return;
    }
    $this->send_email( $postid, $post );
}

Fügen Sie Ihrem Plugin oder Theme zum Testen so etwas wie dieses hinzu:

function send_sms( $postid, $post ) {
    if ( ! $post instanceof WP_Post ) {
        $post = get_post( $postid );
    }
    if ( 'publish' != $post->post_status ){
        return;
    }       
    if ( get_post_meta( $postid, '_fep_email_sent', true ) ){
        return;
    }
    // use Twilio plugin function twl_send_sms
    if( function_exists('twl_send_sms') ) {

        $participants = fep_get_participants( $postid );
        // check if recipients exists, for each get the phone number, 
        // send message and mark sms as sent (or save sms send time)
        $args = array( 
            'message' => $post->post_title, // or $post->post_content
        ); 
        foreach ($participants as $participant) {
            // get usermeta with phone number for $participant ID 
            $args['number_to'] = '098765'; 
            twl_send_sms( $args );
        }
    }
}
add_action( 'fep_save_message', 'send_sms', 99, 2 ); //sending from back-end
add_action( 'fep_action_message_after_send , 'send_sms', 99, 2 ); //front-end

Entschuldigung für mein Englisch. Ich hoffe du verstehst was ich sagen will.

3
nmr

Ich habe mir beide Plugins-Dokumente angeschaut und es sieht so aus, als ob das, was Sie brauchen, relativ einfach gemacht werden kann, da beide Plugins hier und da nette Aktions-Hooks bieten.

Laut WP Twilio docs sollten Sie in der Lage sein, "eine Textnachricht über praktisch jede WordPress-Aktion zu senden", und sie bieten sogar ein einfaches Beispiel dafür. Ich würde versuchen, diese Funktion zu verwenden und sie in die Aktion des anderen Plugins einzubinden.

Für das Front-End-Plugin PM scheint es einen n ice action hook zu geben:

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

Es wird jedes Mal ausgeführt, wenn eine Nachricht in der Datenbank gespeichert wird, nachdem die Front-End-Benutzeroberfläche verwendet wurde. Es scheint also ein perfekter Ort zu sein, an dem Sie die SMS - Sendefunktion anschließen können. Sie erhalten sogar die Nachrichtendaten in diesem Hook , ziemlich cool, das werden wir nutzen!

Zusammenfassend würde ich also Folgendes versuchen:

  1. Erstellen Sie eine Funktion, die anhand des Beispiels von Twilio ein SMS sendet. Alle Argumente werden aus dem oben genannten Hook übernommen:

    function send_sms_with_twilio( $message_id, $message, $inserted_message ){
         // Now the $message should be an array with Front End PM data, 
         // so just check the plugin's code to determine what data you want to pass to a text message.
         // i'll do a simple example:
         $sms_message  = '';
         if ( is_array( $message ) && ! empty( $message['message_title'] ) ) {
              $sms_message = sprintf( 'Hello mate, you have received a new PM titled "%s"', esc_html( $message['message_title'] ) );
         }
    
         // [message_to_id] key should contain WP users ID's, again - you should doublecheck that
         $receivers = ! empty( $message['message_to_id'] ) ? (array) $message['message_to_id'] : [];
    
         // Now I'm not sure where you keep phone numbers, but let's assume it's in user's meta, so I'll try this
         // assuming 'phone_number' is right meta key:
         foreach( $receivers as $receiver ){
              $to = get_user_meta( $receiver, 'phone_number', true );
    
              // Let's send this message finally! But only if we have a number and text.
              // you probably should do some additional validation here 
              // to make sure that the phone number is properly formatted.
              if ( empty( $to ) || empty( $sms_message ) ) {
                    return;
              }
    
              // this is Twilo's plugin function
              twl_send_sms( [
                   'number_to' => $to,
                   'message'   => $sms_message,
            ] );
         }
    }
    
  2. Jetzt können Sie Ihre Funktion mit dem Hook des Front-End-PM verknüpfen:

    add_action( 'fep_action_message_after_send', 'send_sms_with_twilio', 100, 3 );
    

Denken Sie daran, dass ich hier nur einen kurzen Entwurf mache, der auf dem basiert, was ich im Code der Plugins gesehen habe. Ich habe es nicht getestet, aber es soll Ihnen eine allgemeine Vorstellung davon geben, wie Sie Ihr Problem angehen können.

Die Frage könnte sein, wo Sie diesen Code einfügen sollen - ich denke, Sie könnten den functions.php Ihres Themas nur zu Testzwecken ausprobieren und wenn Sie sicher sind, dass beide Plugins aktiv sind. Für Produktionszwecke würde ich das als drittes Plugin trennen und is_plugin_active () verwenden, um sicherzustellen, dass alle Abhängigkeiten vorhanden sind.

1
Levi Dulstein

Haftungsausschluss: Ich bin ein relativ neuer Entwickler und kenne diese Plugins nicht, daher sind meine Vorschläge allgemein.

Sie haben Recht, die vorhandenen Funktionen nicht zu bearbeiten.

Mein Gedanke wäre, ein eigenes Plugin zu erstellen und zu prüfen, ob es Hooks gibt, mit denen Sie das Plugin Front End PM verknüpfen können. Sehen Sie nach, ob Sie einen Filter (?) Hinzufügen können, um die Twilo-Funktion darauf aufzubauen.

Sie müssen Ihren Plugin-Test durchführen lassen, um sicherzustellen, dass beide anderen Plugins verfügbar sind, bevor Sie versuchen, sie auszuführen.

Mein Bauch sagt mir, dass dies jedoch enorm instabil wäre.

Weniger nützliche Antwort, aber möglicherweise auf lange Sicht besser: Wenden Sie sich an die Entwickler dieser Plugins, um zu sehen, ob sie Ideen haben.

Viel Glück!

0
Deleyna