Multisite subdirectory autocompletes are broken
|Reported by:||nacin||Owned by:||nacin|
Description (last modified by nacin)
I have the following sites set up:
- localhost/beta/ ("WordPress")
- localhost/beta/test/ ("Test")
- localhost/beta/testsite/ ("Test Site")
- localhost/beta/author-blog/ ("Author's Blog")
- localhost/beta/author-second-blog/ ("Author's Second Blog")
1. Search term is not broken up based on domain and path
You can search for the domain "localhost" or the path "author", but not "localhost/author". We need to be smart enough inside wp_ajax_autocomplete_site() to split based on domain and path and search both fields, at which point we need to do an AND rather than an OR.
It should be noted that I am not sure if the wp-ms-sites list table performs this same check. It looks like it does not, and simply allows for searching domains for subdomain installs, and paths for subdirectory installs. So we may just need to strip off the domain for subdirectory searches (and vice versa with the path for subdomain searches). This, of course, is not very nice for installs with custom URLs that handle mapping via sunrise (with or without the domain mapping plugin).
But it is important to at least stick to a subset of the logic in wp-ms-sites to ensure that results in one place are results in where you end up, rather than logic that can return sites in the autocomplete that would not show up in the search.
2. The domain is autocompleted, rather than the path
The return value in wp_ajax_autocomplete_site() is always the domain. This is not helpful for subdirectories. Typing in "author" and selecting /localhost/author-blog/ autocompletes to "localhost".
3. Display of domains should use the same logic as sites.php
On sites.php, we only show /beta/, /test/, /author-blog/, etc. Depending on whether we are on a subdirectory or a subdomain install, we trim off domains and paths where possible. (This is nicely compatible with mapped domain setups, as the code then doesn't trim off anything, and you see the full URL.) But in the autocomplete, we show /localhost/beta. If this autocompletes to /localhost/beta (see point 2), sites.php won't return anything. If it autocompletes to just /beta, then it is confusing.
We should try to adhere to the searching and displaying logic of sites.php as much as possible. We should probably just wrap up the searching code into a method in the list table, then just use that method in wp_ajax_autocomplete_site().
4. The name of the blog should not be shown
In a user autocomplete, we show user_login and user_email. The only other field we search is user_nicename. But in site autocomplete, we only search domain and/or path, but we also show the site's blogname. This *could* be a nice feature, but it actually gets in the way, as A) they can't search for names, B) it shows names first, even though paths are the important, unique, identifiable part, C) sites.php doesn't even show names, D) it's unnecessary extra queries, and E) apostrophes are not properly converted ("Author's Blog").