posts_join_paged is a WordPress PHP filter that allows you to modify the JOIN clause of a query, specifically for paging queries.
Usage
add_filter('posts_join_paged', 'custom_posts_join_paged', 10, 2); function custom_posts_join_paged($join, $query) { // your custom code here return $join; }
Parameters
$join
(string) – The JOIN clause of the query.$query
(WP_Query) – The WP_Query instance (passed by reference).
More Information
See WordPress Developer Resources: posts_join_paged
Examples
Join custom table with post table
Join a custom table named wp_custom_data
with the post table using the post_id
field.
add_filter('posts_join_paged', 'join_custom_data_table', 10, 2); function join_custom_data_table($join, $query) { global $wpdb; $join .= " LEFT JOIN {$wpdb->prefix}custom_data ON {$wpdb->prefix}posts.ID = {$wpdb->prefix}custom_data.post_id"; return $join; }
Join post meta table for a specific meta key
Join the post meta table for the meta key special_feature
.
add_filter('posts_join_paged', 'join_special_feature_meta', 10, 2); function join_special_feature_meta($join, $query) { global $wpdb; $join .= " LEFT JOIN {$wpdb->postmeta} ON {$wpdb->posts}.ID = {$wpdb->postmeta}.post_id AND {$wpdb->postmeta}.meta_key = 'special_feature'"; return $join; }
Exclude posts with specific term from custom taxonomy
Exclude posts with a term beginner
from the custom taxonomy difficulty_level
.
add_filter('posts_join_paged', 'exclude_beginner_posts', 10, 2); function exclude_beginner_posts($join, $query) { global $wpdb; $join .= " LEFT JOIN {$wpdb->term_relationships} ON {$wpdb->posts}.ID = {$wpdb->term_relationships}.object_id"; $join .= " LEFT JOIN {$wpdb->term_taxonomy} ON {$wpdb->term_relationships}.term_taxonomy_id = {$wpdb->term_taxonomy}.term_taxonomy_id"; return $join; }
Join user table to display author information
Join the user table to display author information like name and email.
add_filter('posts_join_paged', 'join_user_table', 10, 2); function join_user_table($join, $query) { global $wpdb; $join .= " LEFT JOIN {$wpdb->users} ON {$wpdb->posts}.post_author = {$wpdb->users}.ID"; return $join; }
Join comment table to show comment count
Join the comment table to display the comment count for each post.
add_filter('posts_join_paged', 'join_comment_table', 10, 2); function join_comment_table($join, $query) { global $wpdb; $join .= " LEFT JOIN {$wpdb->comments} ON {$wpdb->posts}.ID = {$wpdb->comments}.comment_post_ID"; return $join; }