我想在发布新帖子后立即发送推送通知

时间:2015-03-17 作者:Alfro

每次我发布新帖子时,我都想从我的网站向iOs/android用户发送推送消息。我认为这与执行php代码是一样的。我尝试粘贴一个php脚本,每次启动iOs设备时,它都会向iOs设备发送推送消息,但没有成功。我已经在这段代码之后粘贴了php代码

<div id="content">

    <?php

    if( have_posts() ):

        get_template_part( \'templates/content/content\', str_replace(\'bw_pt_\', \'\', get_post_type() ) );
在单曲中。php文件在word press->外观->编辑器中。我也上传了ck。pem文件位于同一文件夹中。这是我的php代码,当我从终端启动它时,它运行良好。我需要添加一些自定义代码,这将是一个检索数据库,以查看所有设备并为每个设备发送推送通知。稍后我会编写代码,目前我需要知道我是否必须输入此代码,以便在每次管理员按下发布新条目按钮时执行。

这是我的php代码:

    <?php

// Put your device token here (without spaces):
$deviceToken = \'993c92d21b053c5115d1xxXXXXxxXXXXXxxxXXXXXxxebe9c21f0f59a0723de8bd38\';

// Put your private key\'s passphrase here:
$passphrase = \'123456\';

// Put your alert message here:
$message = \'Hello world!\';

////////////////////////////////////////////////////////////////////////////////

$ctx = stream_context_create();
stream_context_set_option($ctx, \'ssl\', \'local_cert\', \'ck.pem\');
stream_context_set_option($ctx, \'ssl\', \'passphrase\', $passphrase);

// Open a connection to the APNS server
$fp = stream_socket_client(
    \'ssl://gateway.sandbox.push.apple.com:2195\', $err,
    $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);

if (!$fp)
    exit("Failed to connect: $err $errstr" . PHP_EOL);

echo \'Connected to APNS\' . PHP_EOL;

// Create the payload body
$body[\'aps\'] = array(
    \'alert\' => $message,
    \'sound\' => \'default\'
    );

// Encode the payload as JSON
$payload = json_encode($body);

// Build the binary notification
$msg = chr(0) . pack(\'n\', 32) . pack(\'H*\', $deviceToken) . pack(\'n\', strlen($payload)) . $payload;

// Send it to the server
$result = fwrite($fp, $msg, strlen($msg));

if (!$result)
    echo \'Message not delivered\' . PHP_EOL;
else
    echo \'Message successfully delivered\' . PHP_EOL;

// Close the connection to the server
fclose($fp);
?>

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

将其包装在函数中并将其挂钩到transition_post_status:

function wpse_18140_transition_post_status( $new, $old, $post ) {
     if ( $new === \'publish\' && $new !== $old ) {
           // Your code here
     }
}

add_action( \'transition_post_status\', \'wpse_18140_transition_post_status\', 10, 3 );
这将在每次发布帖子时运行,但在您只更新帖子内容时不会运行。

结束

相关推荐

高级或不高级的PRE_GET_POSTS查询

我只想显示那些有“现在和未来”孩子使用pre_get_posts 行动挂钩。有人知道如何做到这一点吗?function pre_get_posts($query) { if(!is_admin() && $query->is_main_query()) { //check if the query matches this post type if(is_post_type_archive(\'event