Hi, I am not looking for advice, I just want to share one thing that can be useful for someone else (and googable). So - my site uses P2P plugin for many years, connecting "posts" to "locations". Recenty I installed Polylang plugin for multilingual WordPress, and started translating posts and locations to other languages. And a strange thing happened. In backend (and it was similar on frontend) everything worked when I was viewing "all languages" items lists (posts list). But switching to default EN language caused some "locations" missing - its column was empty. It was not language issue - those missing locations were set to EN language. Switching languages to "show all languages" filled all columns with location names, again.
Long story short, the issue is - when connecting "locations" to posts, and "locations" are multilingual post type by Polylang, then Polylang alters WP_Query with its tax_query (languages etc. are handled as taxonomy and terms by Polylang). The problem is, when WP_Query contains tax_query, WordPress adds "GROUP BY wp_posts.ID" to final SQL statement. And this grouping is something P2P does not expect.
For example - I have 10 posts that are all connected to one Location A. P2P then gets 10 results from its WP_Query, and all the rows are identical/duplicate "Location A" posts (with same wp_posts.ID, obviously), and every one of them has its "p2p connection id" column with link to its post item. But if Polylang steps in, the result set is grouped by wp_posts.ID, and returns not 10 duplicate rows/locations, but only one. So P2P plugin has now only one location for one post, and remaining 9 posts have "location column" empty.
This issue is not limited to Polylang, sure. It happens everytime any WP_Query with P2P connections is tax_queried, or has meta_key / meta_query added ... everytime GROUP BY addition takes place, respectively. After long hours of debugging and googling (and not finding anything) this old issue #304 revealed what could be wrong with my website.
My solution (but I am not sure if it works 100% correctly) is to hook to posts_groupby filter and reseting the group by statement for P2P WP_Queries ... but how to tell if query is P2P query? I noticed its queries have some query vars added, connected_type for example. So I am checking against this query var. It fixed all my issues, and looks like it did not break anything else on my website (I hope).
Hi, I am not looking for advice, I just want to share one thing that can be useful for someone else (and googable). So - my site uses P2P plugin for many years, connecting "posts" to "locations". Recenty I installed Polylang plugin for multilingual WordPress, and started translating posts and locations to other languages. And a strange thing happened. In backend (and it was similar on frontend) everything worked when I was viewing "all languages" items lists (posts list). But switching to default EN language caused some "locations" missing - its column was empty. It was not language issue - those missing locations were set to EN language. Switching languages to "show all languages" filled all columns with location names, again.
Long story short, the issue is - when connecting "locations" to posts, and "locations" are multilingual post type by Polylang, then Polylang alters WP_Query with its tax_query (languages etc. are handled as taxonomy and terms by Polylang). The problem is, when WP_Query contains tax_query, WordPress adds "GROUP BY wp_posts.ID" to final SQL statement. And this grouping is something P2P does not expect.
For example - I have 10 posts that are all connected to one Location A. P2P then gets 10 results from its WP_Query, and all the rows are identical/duplicate "Location A" posts (with same wp_posts.ID, obviously), and every one of them has its "p2p connection id" column with link to its post item. But if Polylang steps in, the result set is grouped by wp_posts.ID, and returns not 10 duplicate rows/locations, but only one. So P2P plugin has now only one location for one post, and remaining 9 posts have "location column" empty.
This issue is not limited to Polylang, sure. It happens everytime any WP_Query with P2P connections is tax_queried, or has meta_key / meta_query added ... everytime GROUP BY addition takes place, respectively. After long hours of debugging and googling (and not finding anything) this old issue #304 revealed what could be wrong with my website.
My solution (but I am not sure if it works 100% correctly) is to hook to
posts_groupby
filter and reseting the group by statement for P2P WP_Queries ... but how to tell if query is P2P query? I noticed its queries have some query vars added,connected_type
for example. So I am checking against this query var. It fixed all my issues, and looks like it did not break anything else on my website (I hope).So hopefully it will save someone a few hours of wondering what could be wrong with their website / theme :-)