Intereting Posts
Добавление значков рядом с категориями в wp_nav_menu Не удается войти в WordPress даже после изменения пароля хэша в phpmyadmin Как отображать CPT-архивы? Как сортировать элементы в мета-поле пользовательской таксономии? Дубликаты При использовании вложенного WP_Query Проблема с разбивкой по страницам Как я включил каналы Atom в новой установке WP3? Предполагается ли, что HyperDB может обрабатывать экземпляры базы данных только для чтения (только)? Как указать URL-адрес для перенаправления пользователя после выхода из него? Как получить имя меню в WordPress? Как настроить многопользовательский режим для нескольких языков? Akismet отмечает все комментарии, сделанные с помощью браузера Microsoft Edge на двух моих сайтах WordPress как спам Как темы отображают тексты субтитров в расширенной разметке (например, параграфы «wp-caption») Местоположение базы данных WP DB для значения индекса «Следующее сообщение для создания» Преобразование страницы WP для использования полных явных путей?

Уведомление Apple push не работает

Я написал плагин, который запускает уведомление Apple push на устройства IOS.

Когда я запускаю его вручную через корневой каталог, он отлично работает. Ловушка, когда я перемещаю его в папку плагина и запускаю его как плагин, используя:

add_action( 'publish_post', 'post_published' ,10,2); 

он возвращает ssl-ошибку с серверов apple.

В коде ничего не изменилось (кроме include ('wp-config.php')), который не нужен в качестве плагина.

Это ошибка:

Предупреждение: stream_socket_client () [function.stream-socket-client]: операция SSL завершилась неудачно с кодом 1. OpenSSL Сообщения об ошибках: ошибка: 14094410: процедуры SSL: SSL3_READ_BYTES: сбой вызова подтверждения sslv3 в / nas / wp / www / staging / geektimecoil /wp-content/plugins/wp-mes-push-to-apple/wp-mes-push-to-apple.php в строке 131

Предупреждение: stream_socket_client () [function.stream-socket-client]: не удалось включить криптографию в / nas / wp / www / staging / geektimecoil / wp-content / plugins / wp-mes-push-to-apple / wp-mes -push-to-apple.php в строке 131

Предупреждение: stream_socket_client () [function.stream-socket-client]: невозможно подключиться к ssl: //gateway.sandbox.push.apple.com: 2195 (Неизвестная ошибка) в / nas / wp / www / staging / geektimecoil / wp-content / plugins / wp-mes-push-to-apple / wp-mes-push-to-apple.php в строке 131 Ошибка: 0

Это код, как и в плагине:

 function post_published($ID, $post ) { // $url = "http://geektimecoil.staging.wpengine.com/googlePush.php"; global $wpdb; // $post = get_post(211051); $categories = get_the_category($post->ID ); if($categories){ $cond = array(); $cats = array(); foreach($categories as $category) { $cats[] = $category->slug; switch ($category->slug) { case "startup": $cond[] = "startup"; break; case "development": $cond[] = "dev"; break; case "gadgets": $cond[] = "mobile"; break; case "internet": $cond[] = "internet"; break; case "hi-tech": $cond[] = "hightech"; break; case "%d7%a1%d7%a7%d7%99%d7%a8%d7%95%d7%aa": // hebrew skirot $cond[] = "reviews"; break; case "science": $cond[] = "science"; break; } } print_r($cond); $condition = "( (".$cond[0]."=1)"; for ($i=1; $i<=(count($cond)-1) ; $i++) { $condition .= "or(".$cond[$i]."=1)"; } $condition .= " )"; } $sql="SELECT token FROM wp_mobile where device=1 AND ".$condition; $users = $wpdb->get_results($sql); print_r($sql); print_r($users); $passphrase = '***'; $ctx = stream_context_create(); stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase); stream_context_set_option($ctx, 'ssl', 'local_cert','/push/geek_dev.pem'); // stream_context_set_option($ctx, 'ssl', 'local_cert','/push/geek_prod.pem'); stream_context_set_option($ctx, 'ssl', 'cafile', '/push/ios_entrust.pem'); # Open a connection to the APNS server $fp = stream_socket_client(//'ssl://gateway.push.apple.com:2195', $err, 'ssl://gateway.sandbox.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); if (!$fp){ echo "Error: ".$err; exit; } $post_url = str_replace('www','m',get_permalink( $post->ID)); $body["aps"] = array( "alert" => "message", //title "sound" => "default", "badge" => "0", "url" => $post_url, ); $payload = json_encode($body); $msg = chr(1) // command (1 byte) . pack('N', 'notification') // identifier (4 bytes) . pack('N', time() + 86400) // expire after 1 day (4 bytes) . pack('n', 32) // token length (2 bytes) . pack('H*', 'db8***b414004ccb9a***2a54d9de06') . pack('n', strlen($payload)) // payload length (2 bytes) . $payload; // the JSON payload // Send it to the server $result = fwrite($fp, $msg, strlen($msg)); //echo "\n$result"; //set blocking stream_set_blocking($fp,0); //Wait to response sleep(1); fclose($fp); return $print; } add_action( 'publish_post', 'post_published' ,10,2); ?> 

Как я уже упоминал ранее, без add_action и не как плагин этот точный код работает.

OMG, наконец, по мере того, как код запускается из плагина, текущий рабочий каталог установлен на wp-admin, тогда как когда я запускаю его вручную, он устанавливает для / wp-content / plugins …

Итак, когда вызывается функция push, просто добавьте следующую строку кода:

 chdir(ABSPATH . 'wp-content/plugins/*your plugins folder name*/');