Using WordPress ‘pre_ping’ PHP action

The pre_ping WordPress PHP action fires just before pinging back links found in a post.

Usage

add_action('pre_ping', 'your_custom_function', 10, 3);

function your_custom_function($post_links, $pung, $post_id) {
  // your custom code here
}

Parameters

  • $post_links (string[]): Array of link URLs to be checked (passed by reference).
  • $pung (string[]): Array of link URLs already pinged (passed by reference).
  • $post_id (int): The post ID.

More information

See WordPress Developer Resources: pre_ping

Examples

Skip Pinging Specific URLs

Skip pinging specific URLs by removing them from the $post_links array.

add_action('pre_ping', 'skip_specific_ping', 10, 3);

function skip_specific_ping(&$post_links, $pung, $post_id) {
  $skip_url = 'https://example.com/skip-me/';
  $post_links = array_diff($post_links, array($skip_url));
}

Ping Only Once

Ensure URLs are pinged only once by checking if they are already in the $pung array.

add_action('pre_ping', 'ping_only_once', 10, 3);

function ping_only_once(&$post_links, $pung, $post_id) {
  $post_links = array_diff($post_links, $pung);
}

Add Custom Data to Pings

Add custom data (e.g., a user agent) to pings by modifying the $post_links array.

add_action('pre_ping', 'add_custom_data_to_pings', 10, 3);

function add_custom_data_to_pings(&$post_links, $pung, $post_id) {
  $user_agent = 'Your-Custom-User-Agent';
  foreach ($post_links as &$link) {
    $link .= '?user_agent=' . urlencode($user_agent);
  }
}

Log Pings to a File

Log all ping attempts to a file for later analysis.

add_action('pre_ping', 'log_pings', 10, 3);

function log_pings($post_links, $pung, $post_id) {
  $log_file = '/path/to/your/log-file.txt';
  $log_entry = '[' . date('Y-m-d H:i:s') . '] Post ID: ' . $post_id . ' - Pinging: ' . implode(', ', $post_links) . PHP_EOL;
  file_put_contents($log_file, $log_entry, FILE_APPEND);
}

Disable Pinging Completely

Disable pinging by clearing the $post_links array.

add_action('pre_ping', 'disable_pinging', 10, 3);

function disable_pinging(&$post_links, $pung, $post_id) {
  $post_links = array();
}