function sfc_publish_automatic($id, $post) { // check to make sure post is published if ($post->post_status !== 'publish') { return; } // check options to see if we need to send to FB at all $options = get_option('sfc_options'); if (!$options['autopublish_app'] && !$options['autopublish_profile']) { return; } // load facebook platform include_once 'facebook-platform/facebook.php'; $fb = new Facebook($options['api_key'], $options['app_secret']); // to do this autopublish, we might need to switch users if ($options['user'] && $options['session_key']) { $tempuser = $fb->user; $tempkey = $fb->api_client->session_key = $session_key; $fb->set_user($options['user'], $options['session_key']); } else { return; // safety net: if we don't have a user and session key, we can't publish properly. } // build the post to send to FB // apply the content filters, in case some plugin is doing weird image stuff $content = apply_filters('the_content', $post->post_content); // look for the images to add with image_src $images = array(); // get the post thumbnail, put it first in the image list if (current_theme_supports('post-thumbnails')) { if (has_post_thumbnail($post->ID)) { $thumbid = get_post_thumbnail_id($post->ID); $att = wp_get_attachment_image_src($thumbid, 'full'); $images[] = $att[0]; } } // look for any images in the content if (preg_match_all('/<img (.+?)>/', $content, $matches)) { foreach ($matches[1] as $match) { foreach (wp_kses_hair($match, array('http')) as $attr) { $img[$attr['name']] = $attr['value']; } if (isset($img['src'])) { if (isset($img['class']) && false === strpos($img['class'], 'wp-smiley')) { // ignore smilies $images[] = $img['src']; } } } } // build the attachment $permalink = get_permalink($post->ID); $attachment['name'] = $post->post_title; $attachment['href'] = $permalink; $attachment['description'] = sfc_publish_make_excerpt($post->post_content); $attachment['comments_xid'] = urlencode($permalink); // image attachments (up to 5, as that's all FB allows) $count = 0; foreach ($images as $image) { $attachment['media'][$count]['type'] = 'image'; $attachment['media'][$count]['src'] = $image; $attachment['media'][$count]['href'] = $permalink; $count++; if ($count == 5) { break; } } // Read Post link $action_links[0]['text'] = 'Read Post'; $action_links[0]['href'] = $permalink; // Link to comments $action_links[1]['text'] = 'See Comments'; $action_links[1]['href'] = get_comments_link($post->ID); // publish to page if ($options['autopublish_app'] && !get_post_meta($id, '_fb_post_id_app', true) && $options['fanpage']) { if ($options['fanpage']) { $who = $options['fanpage']; } else { $who = $options['appid']; } // check to see if we can send to FB at all $result = $fb->api_client->users_hasAppPermission('publish_stream', $who); if (!$result) { break; } $fb_post_id = $fb->api_client->stream_publish(null, json_encode($attachment), json_encode($action_links), null, $who); if ($fb_post_id) { // update the post id so as to prevent automatically posting it twice update_post_meta($id, '_fb_post_id_app', $fb_post_id); } } // publish to profile if ($options['autopublish_profile'] && !get_post_meta($id, '_fb_post_id_profile', true)) { // check to see if we can send to FB at all $result = $fb->api_client->users_hasAppPermission('publish_stream'); if (!$result) { break; } $fb_post_prof_id = $fb->api_client->stream_publish(null, json_encode($attachment), json_encode($action_links)); if ($fb_post_prof_id) { // update the post id so as to prevent automatically posting it twice update_post_meta($id, '_fb_post_id_profile', $fb_post_prof_id); } } // switch users back, just in case if ($tempuser) { $fb->set_user($tempuser, $tempkey); } }
function sfc_publish_automatic($id, $post) { // check to make sure post is published if ($post->post_status !== 'publish') { return; } // check options to see if we need to send to FB at all $options = get_option('sfc_options'); if (!$options['autopublish_app'] && !$options['autopublish_profile']) { return; } // build the post to send to FB // apply the content filters, in case some plugin is doing weird image stuff $content = apply_filters('the_content', $post->post_content); // look for the images to add with image_src $image = null; // get the post thumbnail, put it first in the image list if (current_theme_supports('post-thumbnails')) { if (has_post_thumbnail($post->ID)) { $thumbid = get_post_thumbnail_id($post->ID); $att = wp_get_attachment_image_src($thumbid, 'full'); if (!empty($att[0])) { $image = $att[0]; } } } // look for any images in the content if (!$image && preg_match_all('/<img (.+?)>/i', $content, $matches)) { foreach ($matches[1] as $match) { foreach (wp_kses_hair($match, array('http')) as $attr) { $img[strtolower($attr['name'])] = $attr['value']; } if (isset($img['src'])) { if (isset($img['class']) && false === straipos($img['class'], apply_filters('sfc_img_exclude', array('wp-smiley')))) { // ignore smilies $image = $img['src']; break; } } } } // build the attachment $permalink = apply_filters('sfc_publish_permalink', wp_get_shortlink($post->ID), $post->ID); $attachment['name'] = $post->post_title; $attachment['link'] = $permalink; if (!empty($post->post_excerpt)) { $attachment['description'] = sfc_publish_make_excerpt($post->post_excerpt); } else { $attachment['description'] = sfc_publish_make_excerpt($post->post_content); } if (!empty($image)) { $attachment['picture'] = $image; } // Actions $actions[0]['name'] = 'Share'; $actions[0]['link'] = 'http://www.facebook.com/share.php?u=' . urlencode($permalink); $attachment['actions'] = $actions; // publish to app or page if ($options['autopublish_app'] && !get_post_meta($id, '_fb_post_id_app', true)) { if ($options['fanpage']) { $url = "https://graph.facebook.com/{$options['fanpage']}/feed"; $attachment['access_token'] = $options['page_access_token']; } else { $url = "https://graph.facebook.com/{$options['appid']}/feed"; $attachment['access_token'] = $options['app_access_token']; } $data = wp_remote_post($url, array('body' => http_build_query($attachment))); if (!is_wp_error($data)) { $resp = json_decode($data['body'], true); if ($resp['id']) { update_post_meta($id, '_fb_post_id_app', $resp['id']); } } } // publish to profile if ($options['autopublish_profile'] && !get_post_meta($id, '_fb_post_id_profile', true)) { $url = "https://graph.facebook.com/{$options['user']}/feed"; // check the cookie for an access token. If not found, try to use the stored one. $cookie = sfc_cookie_parse(); if ($cookie['access_token']) { $attachment['access_token'] = $cookie['access_token']; } else { $attachment['access_token'] = $options['access_token']; } $data = wp_remote_post($url, array('body' => http_build_query($attachment))); if (!is_wp_error($data)) { $resp = json_decode($data['body'], true); if ($resp['id']) { update_post_meta($id, '_fb_post_id_profile', $resp['id']); } } } }