使用2个WordPress插件的功能

时间:2018-07-19 作者:nielsv

我想做以下工作:

我的wordpress应用程序中的注册用户可以接收消息。他们可以选择以下方式接收消息:

Wordpress应用程序(收件箱系统)我想使用Front End PM plugin 在门户中发送消息。对于短信息,我将使用Twilio plugin.

因此,当他们发送消息(前端PM插件的功能)时,我想调用Twilio插件中的另一个功能来发送短信。

正确的方法是什么?我不认为编辑前端PM插件中的函数是正确的方法?应该怎么做?

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

Levi Dulstein有很多技巧,但在我看来,前端pm使用两个挂钩来发送消息:

fep\\u save\\u message(从后端)发送后fep\\u action\\u message\\u(从前端)发送电子邮件之前,会检查一些事项,如发布或发送状态(包括/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
对不起,我的英语不好。我希望你理解我想说的话。

SO网友:Levi Dulstein

我查看了这两个插件的文档,似乎这可以相对容易地完成,因为这两个插件都提供了很好的操作挂钩。

根据WP Twilio docs,您应该能够“在几乎任何WordPress操作上发送文本消息”,他们甚至提供simple example of how to that. 我会尝试使用该函数并将其挂接到另一个插件的操作中。

至于前端PM插件,似乎有一个ice action hook:

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

在使用前端UI后,每次将消息保存到DB中时,都会执行此操作,因此它似乎是插入SMS发送功能的理想场所。你甚至可以在这个钩子中获得消息数据,非常酷,我们会使用它!

总之,我会尝试这样的方式:

使用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,
        ] );
     }
}
现在,您可以将您的功能挂接到前端PM的挂钩上:

add_action( \'fep_action_message_after_send\', \'send_sms_with_twilio\', 100, 3 );
请记住,我在这里所做的只是基于我在插件代码中看到的内容的一个快速草稿。我还没有测试过它,但它应该能让您大致了解如何解决您的问题。

问题可能是把代码放在哪里-我想你可以试试你的主题functions.php 但仅用于测试目的,并且当您确定两个插件都处于活动状态时。出于生产目的,我将其作为第三个插件进行分离,并使用is_plugin_active() 函数以确保所有依赖项都已就位。

SO网友:Deleyna

免责声明:我是一个相对较新的开发人员,不知道这些插件,所以我的建议很笼统。

不编辑现有函数是正确的。

我的想法是创建您自己的插件,看看是否有任何挂钩,您可以连接到前端PM插件。查看是否可以添加过滤器(?)将Twilo函数背驮到它上面。

在尝试运行之前,您需要进行插件测试,以确保其他两个插件都可用。

然而,我的直觉告诉我,这将是非常不稳定的。

答案不太有用,但从长远来看可能更好:考虑联系这些插件的开发人员,看看他们是否有任何想法。

祝你好运

SO网友:Andrea Somovigo

我会检查是否可能拦截“发送消息”按钮,通过javascript调用一个自定义ajax函数,该函数收集必要的数据,并将它们传递给“twilio插件”php类的函数,以同时发送SMS。。但如果没有良好的编程技巧,就不那么容易了。

结束

相关推荐

Organize functions.php

组织职能的最佳方式是什么。php的性能?我有几个add\\u操作调用、几个add\\u主题支持、几个add\\u过滤器和4个附加函数。对于面包屑、样式表、注册菜单和小部件。我们是否需要遵守订单?例如,首先是所有add\\u过滤器函数,然后是add theme\\u support等。不确定添加代码是否相关,因为这是一个一般性问题。如果需要,我很乐意更新这篇文章。