Всем привет! Когда-то давно уже делал подобное для других сайтов на вордпрессе, решил сделать так же для данного блога подобную систему репостинга в социальную сеть вконтакте.
Думал, что сложностей не возникнет, но оказывается, что сейчас что-то стало проще, а что-то труднее.
Информации по интеграции WordPress с новым АПИ ВК изложенной последовательно и просто, я не нашел поэтому пришлось собирать данные об этом из разных частей, а потом пробовать те или иные вариант, но в итоге я пришел к более-менее приемлемому варианту для себя.
Во-первых сразу нужно оговорится, что авторизация через получения токена из ссылке как это было раньше сейчас проблематична потому что Вконткте ввел дополнительные проверки, например, верефикацию по IP адресу. Конечно эту задачу тоже можно решить, но я захотел тратить на этом много времени, мне нужно было быстрое и рабочее решение.
Поэтому я решил делать репостинг через токен группы, чтобы его подключить необходимо в своей группе перейти в управление и создать ключ доступа ( он потребуется для выполнения дальнейших запросов от WP к нашей группе )
Перед тем как писать код на php я бы хотел так же отметить, что выбранный мной формат репоста будет являться ссылка на пост сайта. Сначала были предприняты попытки добавление полноценной записи со своим изображением и текстом, но проблемой оказалось так сделать потому что для загрузки изображение в группу а так же получения данных альбомов группы треубется пользовательский токен, а его теперь стало труднее получить поэтому я отказался от создания полноценного поста в ВК.
Не знаю по какой причине по токену группы нельзя получить список фотографий этой же группы и почему нельзя загрузить фотографию в эту же группу, возможно это бага, возможно фича. Общаться на эту тему в группе VK API у меня не было особого желания поэтому я отказался от создания полноценных записей на стену сообщества и остановился на варианте передачи attachments в запрос к АПИ со ссылкой на запись поста.
И тут хотелось бы так же сказать еще, что для красивого отображения прикрепленных ссылок требуется чтобы на сайте на который вы оставляете ссылку были прописаны Open Graph теги, как это можно сделать я писал тут
Добавить Open Graph в WordPress необходимо, вот, например как будет выглядеть репост в социальную сеть с Open Graph и без него:
Ну что ж, теперь можно переходить к полноценной разработке нашей системы репостинга, базовый функционал репостига был реализован аналогичным образом для репоста в телеграмм, о котором я писал вот тут
Теперь расширяем функционал репостинга для ВК
Открываем на редактирование functions.php нашей темы и создаем функцию, которая будет отправлять наш пост на стену сообщества
// Добавляем функцию авторипостинга в хуки смены статуса поста // Если пост переходит из автосохраненной в публикацию add_action('auto-draft_to_publish', 'send_post_vk', 20, 1); // Если пост переходит из запланированного поста в публикацию add_action('future_to_publish', 'send_post_vk', 20, 1); // Если пост переходит из черновика в публикацию add_action('draft_to_publish', 'send_post_vk', 20, 1); function send_post_vk($post_id) { // Получаем пост $post = get_post($post_id); // Добавляем к тексту сообщения теги поста $text = get_tags_to_message($post->ID); if (!empty($text)) { $text = PHP_EOL.$text.PHP_EOL; } // Убираем из текста лишнее и обрезаем его до 500 символов $text .= preg_replace('/[\n\r]+/s', "\n\n", strip_tags($post->post_content)); $text = strip_tags($text); if (strlen($text) > 500) { $text = mb_substr($text, 0, 500) . '...'; } // Закидываем в текст прямую ссылку на пост ( иногда почему-то аттачмент не срабатывает, поэтому я решил дополнительно еще добавить ссылку поста к тексту $text .= PHP_EOL.get_permalink($post->ID).PHP_EOL; $data = [ 'message' => $text, 'link' => get_permalink($post->ID) ]; // Вызываем функцию обращения к АПИ и передаем ее сформированный массив с данными vk_send_message_to_channel($data); } function vk_send_message_to_channel($data) { $url = 'https://api.vk.com/method/wall.post'; $params = [ 'owner_id' => VK_GROUP, // ВК сообщество ( не забываейте что это должно быть отрицательное целое с минусом в начале ID сообщества) 'message' => $data['message'], // Текст сообщения на стене 'attachments' => $data['link'], // В атачменте передаем прикрепленную ссылку с необходимым постом 'access_token' => VK_TOKEN, // Тут должен передаваться токен АПИ вашего сообщества, я показывал где его можно создать на скриншоте выше 'from_group' => 1, // Сообщаем, что пост будет от автора сообщества 'v' => '5.131' ]; // Вызываем метод отправки данных через curl curl_sender_exec($url, $params); } // Функция отправки данных через curl, вынес его чтобы не дублировать в других местах, где необходимо также отправка данных через curl function curl_sender_exec($url, $params) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_exec($ch); curl_close($ch); }
Ну вот и все :) Теперь автопостинг будет автоматически отправлять при публикации в WordPress вашу статью в сообщество. Вот тут можно посмотреть как выглядет репостинг, за одно подписаться