The pings_open WordPress PHP filter allows you to control whether a specific post is open to receiving pingbacks and trackbacks.
Usage
add_filter('pings_open', 'your_custom_function', 10, 2); function your_custom_function($open, $post_id) { // Your custom code here return $open; }
Parameters
$open
(bool) – Indicates whether the current post is open for pings.$post_id
(int) – The ID of the post.
More information
See WordPress Developer Resources: https://developer.wordpress.org/reference/hooks/pings_open/
Examples
Disable Pings for a Specific Post
Disable pings for the post with ID 42
.
add_filter('pings_open', 'disable_pings_for_specific_post', 10, 2); function disable_pings_for_specific_post($open, $post_id) { if ($post_id == 42) { return false; } return $open; }
Enable Pings Only for Certain Post Categories
Enable pings only for posts in the “Announcements” and “Events” categories.
add_filter('pings_open', 'enable_pings_for_categories', 10, 2); function enable_pings_for_categories($open, $post_id) { $allowed_categories = array('announcements', 'events'); $post_categories = wp_get_post_categories($post_id, array('fields' => 'slugs')); if (array_intersect($allowed_categories, $post_categories)) { return true; } return false; }
Disable Pings for Posts Older than 30 Days
Disable pings for posts that are older than 30 days.
add_filter('pings_open', 'disable_pings_for_old_posts', 10, 2); function disable_pings_for_old_posts($open, $post_id) { $post_date = get_post_time('U', true, $post_id); $days_old = (time() - $post_date) / DAY_IN_SECONDS; if ($days_old > 30) { return false; } return $open; }
Enable Pings for Posts with Specific Tags
Enable pings only for posts with the “Featured” or “Important” tags.
add_filter('pings_open', 'enable_pings_for_tags', 10, 2); function enable_pings_for_tags($open, $post_id) { $allowed_tags = array('featured', 'important'); $post_tags = wp_get_post_tags($post_id, array('fields' => 'slugs')); if (array_intersect($allowed_tags, $post_tags)) { return true; } return $open; }
Disable Pings for All Posts
Disable pings for all posts on the website.
add_filter('pings_open', '__return_false');
Enable Pings for Specific Author
Enable pings only for posts written by the author with ID 5
.
add_filter('pings_open', 'enable_pings_for_author', 10, 2); function enable_pings_for_author($open, $post_id) { $author_id = get_post_field('post_author', $post_id); if ($author_id == 5) { return true; } return $open; }
Disable Pings for Private Posts
Disable pings for private (password-protected) posts.
add_filter('pings_open', 'disable_pings_for_private_posts', 10, 2); function disable_pings_for_private_posts($open, $post_id) { $post_status = get_post_status($post_id); if ($post_status == 'private') { return false; } return $open; }
Enable Pings Based on Custom Field Value
Enable pings only for posts with a custom field allow_pings
set to true
.
add_filter('pings_open', 'enable_pings_based_on_custom_field', 10, 2); function enable_pings_based_on_custom_field($open, $post_id) { $allow_pings = get_post_meta($post_id, 'allow_pings', true); if ($allow_pings == 'true') { return true; } return false; }
Enable Pings for Posts with a Minimum Word Count
Enable pings only for posts that have a word count greater than or equal to 500
.
add_filter('pings_open', 'enable_pings_for_min_word_count', 10, 2); function enable_pings_for_min_word_count($open, $post_id) { $post_content = get_post_field('post_content', $post_id); $word_count = str_word_count(strip_tags($post_content)); if ($word_count >= 500) { return true; } return $open; }
10. Disable Pings for Posts with Certain Post Formats
Disable pings for posts with the “Aside” or “Quote” post formats.
add_filter('pings_open', 'disable_pings_for_post_formats', 10, 2); function disable_pings_for_post_formats($open, $post_id) { $disallowed_formats = array('aside', 'quote'); $post_format = get_post_format($post_id);
if (in_array($post_format, $disallowed_formats)) {
return false;
}
return $open;
}