public function test_add_ping_with_post_object() { $post_id = self::factory()->post->create(); $post = get_post($post_id); add_ping($post, 'foo'); $this->assertSame(array('foo'), get_pung($post_id)); }
/** * Pings back the links found in a post. * * @since 0.71 * * @global string $wp_version * * @param string $content Post content to check for links. * @param int $post_ID Post ID. */ function pingback($content, $post_ID) { global $wp_version; include_once ABSPATH . WPINC . '/class-IXR.php'; include_once ABSPATH . WPINC . '/class-wp-http-ixr-client.php'; // original code by Mort (http://mort.mine.nu:8080) $post_links = array(); $pung = get_pung($post_ID); // Step 1 // Parsing the post, external links (if any) are stored in the $post_links array $post_links_temp = wp_extract_urls($content); // Step 2. // Walking thru the links array // first we get rid of links pointing to sites, not to specific files // Example: // http://dummy-weblog.org // http://dummy-weblog.org/ // http://dummy-weblog.org/post.php // We don't wanna ping first and second types, even if they have a valid <link/> foreach ((array) $post_links_temp as $link_test) { if (!in_array($link_test, $pung) && url_to_postid($link_test) != $post_ID && !is_local_attachment($link_test)) { // Also, let's never ping local attachments. if ($test = @parse_url($link_test)) { if (isset($test['query'])) { $post_links[] = $link_test; } elseif (isset($test['path']) && $test['path'] != '/' && $test['path'] != '') { $post_links[] = $link_test; } } } } $post_links = array_unique($post_links); /** * Fires just before pinging back links found in a post. * * @since 2.0.0 * * @param array &$post_links An array of post links to be checked, passed by reference. * @param array &$pung Whether a link has already been pinged, passed by reference. * @param int $post_ID The post ID. */ do_action_ref_array('pre_ping', array(&$post_links, &$pung, $post_ID)); foreach ((array) $post_links as $pagelinkedto) { $pingback_server_url = discover_pingback_server_uri($pagelinkedto); if ($pingback_server_url) { @set_time_limit(60); // Now, the RPC call $pagelinkedfrom = get_permalink($post_ID); // using a timeout of 3 seconds should be enough to cover slow servers $client = new WP_HTTP_IXR_Client($pingback_server_url); $client->timeout = 3; /** * Filter the user agent sent when pinging-back a URL. * * @since 2.9.0 * * @param string $concat_useragent The user agent concatenated with ' -- WordPress/' * and the WordPress version. * @param string $useragent The useragent. * @param string $pingback_server_url The server URL being linked to. * @param string $pagelinkedto URL of page linked to. * @param string $pagelinkedfrom URL of page linked from. */ $client->useragent = apply_filters('pingback_useragent', $client->useragent . ' -- WordPress/' . $wp_version, $client->useragent, $pingback_server_url, $pagelinkedto, $pagelinkedfrom); // when set to true, this outputs debug messages by itself $client->debug = false; if ($client->query('pingback.ping', $pagelinkedfrom, $pagelinkedto) || isset($client->error->code) && 48 == $client->error->code) { // Already registered add_ping($post_ID, $pagelinkedto); } } } }
function pingback($content, $post_ID) { global $wp_version, $wpdb; include_once ABSPATH . WPINC . '/class-IXR.php'; // original code by Mort (http://mort.mine.nu:8080) $log = debug_fopen(ABSPATH . '/pingback.log', 'a'); $post_links = array(); debug_fwrite($log, 'BEGIN ' . date('YmdHis', time()) . "\n"); $pung = get_pung($post_ID); // Variables $ltrs = '\\w'; $gunk = '/#~:.?+=&%@!\\-'; $punc = '.:?\\-'; $any = $ltrs . $gunk . $punc; // Step 1 // Parsing the post, external links (if any) are stored in the $post_links array // This regexp comes straight from phpfreaks.com // http://www.phpfreaks.com/quickcode/Extract_All_URLs_on_a_Page/15.php preg_match_all("{\\b http : [{$any}] +? (?= [{$punc}] * [^{$any}] | \$)}x", $content, $post_links_temp); // Debug debug_fwrite($log, 'Post contents:'); debug_fwrite($log, $content . "\n"); // Step 2. // Walking thru the links array // first we get rid of links pointing to sites, not to specific files // Example: // http://dummy-weblog.org // http://dummy-weblog.org/ // http://dummy-weblog.org/post.php // We don't wanna ping first and second types, even if they have a valid <link/> foreach ($post_links_temp[0] as $link_test) { if (!in_array($link_test, $pung) && url_to_postid($link_test) != $post_ID && !is_local_attachment($link_test)) { // Also, let's never ping local attachments. $test = parse_url($link_test); if (isset($test['query'])) { $post_links[] = $link_test; } elseif ($test['path'] != '/' && $test['path'] != '') { $post_links[] = $link_test; } do_action('pre_ping', array(&$post_links, &$pung)); } } foreach ($post_links as $pagelinkedto) { debug_fwrite($log, "Processing -- {$pagelinkedto}\n"); $pingback_server_url = discover_pingback_server_uri($pagelinkedto, 2048); if ($pingback_server_url) { @set_time_limit(60); // Now, the RPC call debug_fwrite($log, "Page Linked To: {$pagelinkedto} \n"); debug_fwrite($log, 'Page Linked From: '); $pagelinkedfrom = get_permalink($post_ID); debug_fwrite($log, $pagelinkedfrom . "\n"); // using a timeout of 3 seconds should be enough to cover slow servers $client = new IXR_Client($pingback_server_url); $client->timeout = 3; $client->useragent .= ' -- WordPress/' . $wp_version; // when set to true, this outputs debug messages by itself $client->debug = false; if ($client->query('pingback.ping', $pagelinkedfrom, $pagelinkedto)) { add_ping($post_ID, $pagelinkedto); } else { debug_fwrite($log, "Error.\n Fault code: " . $client->getErrorCode() . " : " . $client->getErrorMessage() . "\n"); } } } debug_fwrite($log, "\nEND: " . time() . "\n****************************\n"); debug_fclose($log); }
/** * Pings back the links found in a post. * * @since 0.71 * @uses $wp_version * @uses IXR_Client * * @param string $content Post content to check for links. * @param int $post_ID Post ID. */ function pingback($content, $post_ID) { global $wp_version; include_once ABSPATH . WPINC . '/class-IXR.php'; // original code by Mort (http://mort.mine.nu:8080) $post_links = array(); $pung = get_pung($post_ID); // Variables $ltrs = '\\w'; $gunk = '/#~:.?+=&%@!\\-'; $punc = '.:?\\-'; $any = $ltrs . $gunk . $punc; // Step 1 // Parsing the post, external links (if any) are stored in the $post_links array // This regexp comes straight from phpfreaks.com // http://www.phpfreaks.com/quickcode/Extract_All_URLs_on_a_Page/15.php preg_match_all("{\\b http : [{$any}] +? (?= [{$punc}] * [^{$any}] | \$)}x", $content, $post_links_temp); // Step 2. // Walking thru the links array // first we get rid of links pointing to sites, not to specific files // Example: // http://dummy-weblog.org // http://dummy-weblog.org/ // http://dummy-weblog.org/post.php // We don't wanna ping first and second types, even if they have a valid <link/> foreach ((array) $post_links_temp[0] as $link_test) { if (!in_array($link_test, $pung) && url_to_postid($link_test) != $post_ID && !is_local_attachment($link_test)) { // Also, let's never ping local attachments. if ($test = @parse_url($link_test)) { if (isset($test['query'])) { $post_links[] = $link_test; } elseif ($test['path'] != '/' && $test['path'] != '') { $post_links[] = $link_test; } } } } do_action_ref_array('pre_ping', array(&$post_links, &$pung)); foreach ((array) $post_links as $pagelinkedto) { $pingback_server_url = discover_pingback_server_uri($pagelinkedto, 2048); if ($pingback_server_url) { @set_time_limit(60); // Now, the RPC call $pagelinkedfrom = get_permalink($post_ID); // using a timeout of 3 seconds should be enough to cover slow servers $client = new IXR_Client($pingback_server_url); $client->timeout = 3; $client->useragent .= ' -- WordPress/' . $wp_version; // when set to true, this outputs debug messages by itself $client->debug = false; if ($client->query('pingback.ping', $pagelinkedfrom, $pagelinkedto) || isset($client->error->code) && 48 == $client->error->code) { // Already registered add_ping($post_ID, $pagelinkedto); } } } }
/** * Send WebMentions if new Post was saved * * You can still hook this function directly into the `publish_post` action: * * <code> * add_action('publish_post', array('WebMentionPlugin', 'send_webmentions')); * </code> * * @param int $post_ID the post_ID */ public static function send_webmentions($post_ID) { // get source url $source = get_permalink($post_ID); // get post $post = get_post($post_ID); // initialize links array $links = array(); // Find all external links in the source if (preg_match_all('/<a[^>]+href=.(https?:\\/\\/[^\'\\"]+)/i', $post->post_content, $matches)) { $links = $matches[1]; } // filter links $targets = apply_filters('webmention_links', $links, $post_ID); $targets = array_unique($targets); foreach ($targets as $target) { // send webmention $response = self::send_webmention($source, $target, $post_ID); // check response if (!is_wp_error($response) && wp_remote_retrieve_response_code($response) < 400) { $pung = get_pung($post_ID); // if not already added to punged urls if (!in_array($target, $pung)) { // tell the pingback function not to ping these links again add_ping($post_ID, $target); } } // rescedule if server responds with a http error 5xx if (wp_remote_retrieve_response_code($response) >= 500) { self::reschedule($post_ID); } } }
add_post_meta($rpx_post_id, RPX_POST_META_COUNTS, $rpx_share_count_init, true); $rpx_share_counts = get_post_meta($rpx_post_id, RPX_POST_META_COUNTS, true); if (!empty($rpx_share_counts)) { $rpx_share_counts[$rpx_provider_name] = $rpx_share_counts[$rpx_provider_name] + 1; $rpx_update_counts = update_post_meta($rpx_post_id, RPX_POST_META_COUNTS, $rpx_share_counts); if ($rpx_update_counts !== true) { $rpx_sharepost_stat = 'fail'; $rpx_error = 'post meta update failure'; } } else { $rpx_sharepost_stat = 'fail'; $rpx_error = 'add post meta failure'; } } /* * Add pingback URL to post. */ if ($rpx_sharepost_stat == 'ok') { $rpx_ping = add_ping($rpx_post_id, $rpx_share_url); if ($rpx_ping < 1) { $rpx_sharepost_stat = 'fail'; $rpx_error = 'add pingback failure'; } } if (!empty($rpx_error)) { $rpx_sharepost['error'] = $rpx_error; } $rpx_sharepost['stat'] = $rpx_sharepost_stat; $rpx_sharepost_json = json_encode($rpx_sharepost); ob_end_clean(); echo $rpx_sharepost_json;