# 201027 - Reuse Categories in another blog | Only Posts in Home
We have categories (terms | taxonomy: affiliation) stored in root (blog_id: 1). We want to apply those categories to to posts in home.
We also want regular categories in home (announcement, news, question).
## There is many ways to go about this
### move home to root (home = root) (preferred?)
* 👍 simple
* 👍 overlapping pages (with blogs) is not a problem.
* 👍🎉 You can create pages like before. A page like spcs.com/page would become spcs.com/page.
* 👎 it would be nice to seperate home & root to different shards (thinking about load)
http://spaces.test/start
- ✅ idea: prefix posts with /home/
- ✅ create post "abc" -> can create space "abc"
- ✅ create page "abc" -> can't create space "abc"
- ✅ create a post "ttt" -> create a page "ttt" -> page will be automatically named "ttt1"
- ✅ 😐 ❓ could be better, but okay. create space "def" -> create page "def". page is only accessible with prefix
- ✅ 😐 (only with plain permalink setting) admin create page -> user adds post with the same name -> post is not accessible (page overwrites)
- ✅ Make sure, that the proper (date) permalink structure is selected for posts! Add an [admin_notice](https://developer.wordpress.org/reference/hooks/admin_notices/).
- ~~ML: Done~~
- VS: Hm, i guess this was not really needed?
* ✅👷♂️ if you change the siteurl of root, you can still create a blog with the same name: prevent this! - Done for frontend!
* ✅ 👷♂️ spaces-core currently checks for the existence of a blog, before it can be used as home [here](https://github.com/dol-lab/spaces/blob/master/web/app/plugins/spaces-core/includes/classes/SettingsSettings_Network_General.php#L248). Think about a solution.
* ~~ML: Sol. 1. Check not only for the Slug of a Blog, also use the blog id.~~
* ~~ML: Sol. 2. Allowed the Home_URL from rootblog as entry, get_home_url(0)-> spaces.test/home and take home->~~
* ✅ Just allow root as a blog via "/"
* ~~ML: Sol. 3. Allowed as default empty which is the home_url of the root blog.~~
* ~~ML: Sol. 4. Allow / for setting. Results in redirection error ->fixed~~
* ✅👷♂️ (is fixed, when we adjust ``wp_options:option_name:home != ''``) things currently work in twenty-twenty-theme. our defaultspace needs some fixes
* 🏃♀️ 👷♀️ user is not properly redirected after login.
* 🏃♀️ 👷♀️ don't allow users to create pages.
* ML: Can be done with the Role Editor Plug-In (very easy) or (Done)
* ~~ML: Programatically (easy) by removing the page capabilities by activating the Theme and only for root blog.~~
### hack wp_query (preferred?)
- ❓ Whenever we query add a post_affiliation query with relation 'AND'
- ❓ Whenever we store a post, also store the post_affiliation (but where?)
### just switch the prefix of (preferred?) ``$wpdb->terms`` & ``$wpdb->term_taxonomy``
- Exampe: home blog id: 4
- $wpdb->terms = 'wp_4_terms' => 'wp(_1)_terms'
- $wpdb->term_taxonomy = 'wp_4_term_taxonomy' => 'wp(_1)_term_taxonomy'
- $wpdb->term_taxonomy = 'wp_4_term_taxonomy' => 'wp(_1)_term_taxonomy'
- https://github.com/sbrajesh/multisite-global-terms/blob/master/mu-global-terms.php
- 👍 Relathinships are stored in home
- 👍 No issues with overlapping taxo-ids.
- 👎 terms & taxonomies have to be created in root
- 👎🤯 can table joins be done across different hosts (databases) https://stackoverflow.com/questions/8752477/joining-tables-from-different-servers
### just store all the things in home
- 👎 Not intuitive/clean
- 👎 Not optimal with sharding
- 👍 "Easy" to implement, no cross-blog categories needed.
### sync terms (have them both in root & home)
- 👎 ❓ how do we deal with overlapping term-ids? 💡 sync via slug?
- 👎 you need check in root: when a taxonomy changes, it also needs to change in home : some of code necessary
- 👎 if the term slug already exists in the home blog (low probability) it can't exist again with the same slug (https://developer.wordpress.org/reference/functions/wp_unique_term_slug/). So maybe sync via term name?
- ❓ what do we use for
-
### specify a custom ``$object_type`` in `WP_Taxonomy` Class which references another blog
'post' 'post_in_blog_1'
- 👎 saved in root
### [Multisite-Taxonomies](https://github.com/HarvardChanSchool/multisite-taxonomies)
- 👎 We also store things in a central place.
- 👎 introduce another system
⚡ Make sure the WP-Query for posts work as usual
```php
$the_query = new WP_Query( array(
'tax_query' => array(
'relation' => 'AND',
array (
'taxonomy' => 'post_affiliation',
'field' => 'slug',
'terms' => 'f01',
)
array(
'taxonomy' => 'category',
'field' => 'slug',
'terms' => 'announcement',
),
),
) );
```
## Case #store-relation-in-root
The term_taxonomy_id
### DB - Structure
## `wp_term_relationships`
Brings together terms & objects (posts).
| object_id | term_taxonomy_id | term_order |
| ------------------- | -------------------------------- | ---------- |
| post_id/user_id/... | unique( term_id & taxonomy_name) | --- |
| 2 (user) | 1 | --- |
| 22 (blog) | 3 | --- |
| 23 (blog) | 4 | --- |
| 24 (blog) | 3 | --- |
| 25 (blog) | 3 | --- |
## `wp_terms` | wp_1_terms | wp_4_terms (home)
| term_id | name | slug | term_group (obsolete) |
| ------- | ------------ | ---- | --------------------- |
| 1 | f01 | - | - |
| 2 | f02 | - | - |
| 3 | announcement | - | - |
## `wp_term_taxanomy`
Junction table (between a PHP taxonomy and wp_terms). Assigns a taxonomy (with a name) to a term.
| term_taxonomy_id | term_id | taxonomy | description | parent | count |
| ---------------- | ------- | ---------------- | ----------- | ------ | ----- |
| 1 | 1 | post-affiliation | 0 | 0 | |
| 2 | 1 | user-affiliation | | | |
| 3 | 1 | blog-affiliation | | | |
| 4 | 2 | blog-affiliation | | | |
| 5 | 3 | category | | | |
## `wp_terms`
| meta_id | term_id | meta_key | meta_value |
| ------- | ------- | -------- | ---------- |
| | | - | - |
###### tags: `KISD` `TH` `Kunden`