You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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 :-)
The text was updated successfully, but these errors were encountered: