web-dev-qa-db-ja.com

2ワードプレスプラグインの機能を使用する

私は以下のことをやりたいと思います。

私のワードプレスアプリケーションの登録ユーザーはメッセージを受け取ることができます。次の方法でメッセージを受信するように選択できます。

  • Wordpressアプリケーション(受信システム)
  • SMSメッセージ
  • Eメール

ポータルでメッセージを送信するには、 フロントエンドPMプラグイン を使用します。 SMSメッセージの場合は、 Twilioプラグイン を使用します。

それで彼らがメッセージを送ったとき(フロントエンドPMプラグインによる機能性)私はSMSを送るためにTwilioプラグインの中の別の機能を呼びたいです。

これを行うための適切な方法は何ですか?フロントエンドPMプラグインで関数を編集するのが正しい方法ではないと思いますか?どうすればいいの?

3
nielsv

Levi Dulsteinにはたくさんの権利がありますが、私の意見ではFront-end-pmは2つのフックを使ってメッセージを送信します。

  • fep_save_message(バックエンドから)
  • fep_action_message_after_send(フロントエンドから)

電子メールを送信する前に、publishigや送信ステータス(/ 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 );
}

だから、テストのためにあなたのプラグインやテーマにこのようなものを追加してみてください:

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

私の英語ですみません。私が言いたいことを理解してください。

3
nmr

私は両方のプラグインのドキュメントを見ましたが、どちらのプラグインもあちこちにNiceアクションフックを提供しているので、これは比較的簡単にできることのようです。

WP Twilioの文書によると、あなたは "事実上あらゆるWordPressアクションでテキストメッセージを送る"ことができなければならず、そしてそれらはその方法の 簡単な例さえ提供します。 私はその機能を使って他のプラグインのアクションにフックしようとしました。

フロントエンドPMプラグインはn iceアクションフックがあるようです

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

フロントエンドUIを使用した後にメッセージがDBに保存されるたびに実行されるので、SMS送信機能をプラグインするのに最適な場所のようです。そのフック内にメッセージデータを取得することもできます。 、すごくかっこいい、それを使うよ!

要約すると、このようなことを試してみます。

  1. Twilioの例を使用してSMSを送信する関数を作成します。すべての引数は上記のフックから取得されます。

    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. これであなたの関数をフロントエンドPMのフックにフックすることができます:

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

私がここでやっていることは、私がプラグインのコードで見たものに基づいた素早いドラフトであることを心に留めておいてください。私はそれをテストしていませんが、それはあなたにあなたの問題に取り組む方法をあなたに一般的な考えを与えるべきです。

問題はそのコードをどこに置くかということかもしれません - あなたはあなたのテーマのfunctions.phpを試すことができると思いますが、それはテストの目的のためだけで両方のプラグインがアクティブであると確信できるときだけです。実運用目的では、これを3番目のプラグインとして分離し、 is_plugin_active() 関数を使用して、すべての依存関係が整っていることを確認します。

1
Levi Dulstein

免責事項:私は比較的新しい開発者であり、それらのプラグインを知らないので私の提案は一般的です。

既存の機能を編集しないのは正しいことです。

私の考えはあなた自身のプラグインを作成し、あなたがフロントエンドPMプラグインに結びつけることができるフックがあるかどうか見ることでしょう。 Twilo関数をピギーバックするためのフィルタ(?)を追加できるかどうかを確認してください。

あなたが実行しようとする前に他のプラグインの両方が利用可能であることを確かめるためにあなたのプラグインテストを持つ必要があるでしょう。

しかし、これはものすごく不安定になるだろうと私の直感は伝えてくれます。

あまり有用ではありませんが、長期的にはより良い可能性があります。それらのプラグインの開発者に連絡を取り、アイデアがあるかどうかを確認してください。

がんばろう!

0
Deleyna