#51373 closed enhancement (duplicate)
Include Site ID In WP_Post
| Reported by: |
|
Owned by: | |
|---|---|---|---|
| Milestone: | Priority: | normal | |
| Severity: | normal | Version: | |
| Component: | Posts, Post Types | Keywords: | 2nd-opinion |
| Focuses: | multisite | Cc: |
Description
Right now, it is not possible to, given a WP_Post instance, determine which site on a multi-site network that post came from. This is extremely inconvenient for many cases:
- Serialization/deserialization. When a post is de-serialized, it cannot be known what site it came from. Therefore, the data in that instance is completely irrelevant, since a post with the same ID can exist in any site.
- Separation of Concerns. When doing something with a post, only the
WP_Postinstance should be required at most. All basic information, and even a map of custom field names to their values, can be derived from aWP_Postinstance; but not its site ID.
So, the site ID is a critical part of the post that is required for actually identifying the post on a network, and is an integral part of what a post _is_. And yet, that crucial data is missing from WP_Post instances.
## Solution
Add a site_id property to WP_Post instances. Any code that is in charge of fetching one or multiple posts from the database can know what site it belongs to by checking get_current_blog_id(). That code can then assign the site_id property. All consumers of WP_Post will then be guaranteed to have that data available, without making WP applications wrap their posts into ad-hoc interfaces etc.
Change History (5)
#2
@
5 years ago
I am developing a plugin that handles post objects from foreign sites within a network and I can see this being helpful, but I also think it would be somewhat impotent given the bigger problem that is the widespread use of post ID alone to identify posts.
As an example, get_permalink can take either an ID or a post object.
Currently, if a foreign post object is provided, get_permalink returns an incorrect and broken permalink that mixes the foreign post properties with the local permalink structure and homeurl.
If the site ID were included as a property on the WP_Post class, it would make it possible for get_permalink to return the correct permalink for a foreign post.
What it won't solve is when get_permalink and similar functions are called up with only a post ID. Core and plugins do this pervasively, even in cases where they have direct access to the full post object and are literally extracting the ID from it using $post->ID.
What I encounter a lot with my plugin is to fetch foreign posts from the database using switch_to_blog, only to have core and other plugins discard all of their data other than the post ID.
Example: this method calls up get_post_type using the ID only. Even if the original post object was a product from a foreign site, get_post_type ends up checking the current site and finding the ID is most likely not associated with a product. The post object, however, was withheld by an earlier method, so a site ID property would not be of much help to correct the subsequent output of get_post_type.
Including the site ID on WP_Post is only half of the solution. The second half is ensuring the site ID is routinely able to flow through to widely used functions such as get_permalink, get_post_type and similar.
This is an interesting idea @xedinunknown , thanks for raising it.