Commit Graph

214 Commits

Author SHA1 Message Date
Boone Gorges
fdeed90e77 Ensure get_terms() results are unique when using 'meta_query'.
The introduction of 'meta_query' to `get_terms()` in 4.4 made it possible for
`get_terms()` to erroneously return duplicate results. To address the issue,
we add the `DISTINCT` keyword to the SQL query when a 'meta_query' parameter
has been provided.

Props @jadpm.
Fixes #35137.

git-svn-id: https://develop.svn.wordpress.org/trunk@36003 602fd350-edb4-49c9-b593-d223f7449a82
2015-12-18 17:43:46 +00:00
John Blackbourn
29b1f4484e Add a missing @param doc to wp_update_term_count().
See #32246


git-svn-id: https://develop.svn.wordpress.org/trunk@35907 602fd350-edb4-49c9-b593-d223f7449a82
2015-12-14 02:03:21 +00:00
John Blackbourn
bc4e0a1c4e Remove a redundant @param tag from the_taxonomies().
See #32246


git-svn-id: https://develop.svn.wordpress.org/trunk@35906 602fd350-edb4-49c9-b593-d223f7449a82
2015-12-14 02:01:43 +00:00
Sergey Biryukov
5cae9f6aba Docs: Improve documentation for wp_count_terms().
Props bordoni, swissspidy.
Fixes #34861.

git-svn-id: https://develop.svn.wordpress.org/trunk@35895 602fd350-edb4-49c9-b593-d223f7449a82
2015-12-13 12:10:26 +00:00
Drew Jaynes
cca457a958 Docs: Document the optional $args parameter in wp_delete_term() in the hash notation style.
Props slushman, swissspidy.
Fixes #34862.


git-svn-id: https://develop.svn.wordpress.org/trunk@35889 602fd350-edb4-49c9-b593-d223f7449a82
2015-12-12 16:26:42 +00:00
Sergey Biryukov
3e634c753e After [35718], update the location of some files in This filter is documented in docs.
Partially reverts [33954].

Fixes #33413.

git-svn-id: https://develop.svn.wordpress.org/trunk@35725 602fd350-edb4-49c9-b593-d223f7449a82
2015-11-22 03:50:32 +00:00
Andrew Nacin
8220d04e6d Simplify the include graph after work to split out classes.
see #33413. More details there.


git-svn-id: https://develop.svn.wordpress.org/trunk@35718 602fd350-edb4-49c9-b593-d223f7449a82
2015-11-20 07:23:04 +00:00
Boone Gorges
134a7af0fc Introduce WP_Term.
`get_term()` now returns a `WP_Term` object, instead of a `stdClass` object.
Cache support and sanitization filters for individual terms are now more
centralized. For example, `get_term_by()` is able to cast results of its query
to a `WP_Term` object by passing it through `get_term()`.

The `$taxonomy` parameter for `get_term()` is now optional, as terms ought to
be unique to a taxonomy (ie, shared terms no longer exist). In cases where
`get_term()` detects that the term matching the specified term_id is from the
wrong taxonomy, it checks to see if you've requested a shared term, and if so,
it splits the term. This is used only for fallback purposes.

The elimination of shared terms allows the caching strategy for terms to be
simplified. Individual terms are now cached in a single 'terms' bucket.

Props flixos90, boonebgorges, scribu, dipesh.kakadiya.
See #14162.

git-svn-id: https://develop.svn.wordpress.org/trunk@34997 602fd350-edb4-49c9-b593-d223f7449a82
2015-10-10 01:58:37 +00:00
Drew Jaynes
88b8113b8d Docs: Clarify the file header summary for wp-includes/taxonomy.php, the top-level file for the core Taxonomy API.
See #33413. See #33701.


git-svn-id: https://develop.svn.wordpress.org/trunk@34404 602fd350-edb4-49c9-b593-d223f7449a82
2015-09-22 13:22:38 +00:00
Scott Taylor
bb0b507718 Taxonomy: move WP_Tax_Query into its own file. taxonomy.php loads the new files, so this is 100% BC if someone is loading taxonomy.php directly. New files created using svn cp.
Creates: 
`class-wp-tax-query.php` 
`taxonomy-functions.php` 

`taxonomy.php` contains only top-level code. Class file only contains the class. Functions file only contains functions.

See #33413.


git-svn-id: https://develop.svn.wordpress.org/trunk@33760 602fd350-edb4-49c9-b593-d223f7449a82
2015-08-26 12:48:11 +00:00
Dion Hulse
3b525395cc Term Splitting: Switch to a faster cron unschedule process to benefit sites with thousands of affected jobs. Fix the cron hook name in the failsafe rescheduler.
Props Otto42, dd32, peterwilsoncc
See #33423


git-svn-id: https://develop.svn.wordpress.org/trunk@33727 602fd350-edb4-49c9-b593-d223f7449a82
2015-08-25 04:31:52 +00:00
Drew Jaynes
797b6c4d7c Docs: Add better documentation for all accepted values for the fields argument in get_terms().
See #32246.


git-svn-id: https://develop.svn.wordpress.org/trunk@33715 602fd350-edb4-49c9-b593-d223f7449a82
2015-08-23 17:39:07 +00:00
Boone Gorges
b01b3be23e In wp_delete_term(), the $deleted_term object passed to filters should be generated before term relationships are deleted.
This allows the `count` property to reflect the pre-delete state of affairs,
rather than always being 0.

Props nicholas_io.
Fixes #33485.

git-svn-id: https://develop.svn.wordpress.org/trunk@33711 602fd350-edb4-49c9-b593-d223f7449a82
2015-08-22 19:42:30 +00:00
Boone Gorges
9bb010f2a1 wp_update_term() should return a true integer for 'term_taxonomy_id'.
Props ipm-frommen.
Fixes #32876.

git-svn-id: https://develop.svn.wordpress.org/trunk@33652 602fd350-edb4-49c9-b593-d223f7449a82
2015-08-19 19:32:04 +00:00
Dion Hulse
63fd3a32dd Term Splitting: Fix a reversal of parameters to wp_schedule_single_event() introduced in [33621].
The existing invalid cron entries will not be purged automatically (as the 'timestamp' is never matched) so we do this ourselves.

Props mechter for noticing!
See #30261.
Fixes #33423 for trunk.


git-svn-id: https://develop.svn.wordpress.org/trunk@33646 602fd350-edb4-49c9-b593-d223f7449a82
2015-08-19 11:30:42 +00:00
Boone Gorges
9c70cea98f Don't suspend cache invalidation when running term splitting batch routine.
`wp_suspend_cache_invalidation()` was originally added to increase performance,
but the switch to batch processing in [33615] mitigates serious performance
concerns.

As a precaution against timeouts, the batch size has been reduced from 20 to 10.

Props Chouby.
See #30261.

git-svn-id: https://develop.svn.wordpress.org/trunk@33619 602fd350-edb4-49c9-b593-d223f7449a82
2015-08-15 19:24:42 +00:00
Boone Gorges
f18355e66e Term splitting routine should be run in a separate process, triggered via wp-cron.
[32814] introduced a routine to split shared terms, which was run during the
regular WP database upgrade. This turned out to be problematic because plugins
are not loaded during the db upgrade (due to `WP_INSTALLING`), with the result
that plugins were not able to hook into the 'split_shared_term' action during
the bulk split. We work around this limitation by moving the term splitting
routine to a separate process, triggered by a wp-cron hook.

Props boonebgorges, Chouby, peterwilsoncc, pento, dd32.
Fixes #30261.

git-svn-id: https://develop.svn.wordpress.org/trunk@33615 602fd350-edb4-49c9-b593-d223f7449a82
2015-08-14 03:58:41 +00:00
Boone Gorges
ee67bd08f9 When splitting a shared 'nav_menu' term, ensure that nav items and theme locations are retained.
Props boonebgorges, dd32.
Fixes #33187.

git-svn-id: https://develop.svn.wordpress.org/trunk@33611 602fd350-edb4-49c9-b593-d223f7449a82
2015-08-12 14:06:21 +00:00
Drew Jaynes
78548dd49d Fix formatting in the DocBlock for _split_shared_term().
See #32246. See #32891.


git-svn-id: https://develop.svn.wordpress.org/trunk@33238 602fd350-edb4-49c9-b593-d223f7449a82
2015-07-13 21:56:53 +00:00
Boone Gorges
f7b8ff5a2e Don't allow $field param to be passed to get_term_link().
The new parameter creates inconsistencies in the signatures of the various
functions for fetching term links (`get_term_feed_link()`,
`get_edit_term_link()`, etc.).

Reverts [32553].

See #14156.

git-svn-id: https://develop.svn.wordpress.org/trunk@33022 602fd350-edb4-49c9-b593-d223f7449a82
2015-07-01 12:53:05 +00:00
John Blackbourn
dd419b74cc Introduce a no_terms label for taxonomies. This label is used when indicating that there are no terms in the given taxonomy associated with an object.
Fixes #32150
Props afercia


git-svn-id: https://develop.svn.wordpress.org/trunk@32933 602fd350-edb4-49c9-b593-d223f7449a82
2015-06-25 00:15:46 +00:00
Boone Gorges
e0908f450f Fix PHP notice in WP_Tax_Query::get_sql_for_clause().
Previously, the `$where` variable was not initialized, so that when an invalid
'operator' was passed, PHP would complain that `$where` was undefined.

Props dlh.
Fixes #32756.

git-svn-id: https://develop.svn.wordpress.org/trunk@32910 602fd350-edb4-49c9-b593-d223f7449a82
2015-06-23 12:43:05 +00:00
Scott Taylor
89328eb69f Customizer et al, use elseif in PHP, not else if.
This was corrected via brute force in [31090].

See #32444.


git-svn-id: https://develop.svn.wordpress.org/trunk@32874 602fd350-edb4-49c9-b593-d223f7449a82
2015-06-19 22:00:33 +00:00
Boone Gorges
cf9044394b Add filters to wp_unique_term_slug().
This changeset adds two new filters:
* 'wp_unique_term_slug_is_bad_slug' lets developers control whether a test slug needs to be made unique, before the queries required to build a suffix are performed.
* 'wp_unique_term_slug' filters the output of the function.

These changes introduce parity with the filters in `wp_unique_post_slug()`.

Props coffee2code, bolo1988, boonebgorges.
Fixes #20783.

git-svn-id: https://develop.svn.wordpress.org/trunk@32837 602fd350-edb4-49c9-b593-d223f7449a82
2015-06-18 13:19:12 +00:00
Boone Gorges
4649b2345d Performance enhancements for _split_shared_term().
* Introduce a `$record` parameter, which defaults to true. When set to false, `_split_shared_term()` will not keep a record of split term data in wp_options. The judicious use of this flag can greatly improve performance when processing shared terms in batches.
* Allow term/tt objects to be passed to the `$term_id` and `$term_taxonomy_id` parameters. This has the potential to save database queries when the objects are already available.

See #30261.

git-svn-id: https://develop.svn.wordpress.org/trunk@32813 602fd350-edb4-49c9-b593-d223f7449a82
2015-06-17 01:47:52 +00:00
Boone Gorges
036c33caaa Filter out empty object_types in register_taxonomy_for_object_type().
This prevents weird edge bugs when registering an existing taxonomy with an
object type when the taxonomy was previously associated with no object types.

Fixes #32590.

git-svn-id: https://develop.svn.wordpress.org/trunk@32709 602fd350-edb4-49c9-b593-d223f7449a82
2015-06-08 19:44:32 +00:00
Scott Taylor
be0175838b Add missing doc blocks to taxonomy.php.
Correct some `@return` values.
Some functions can `return new WP_Error` without setting it to a variable.
Some functions can return their `apply_filters(...)` call without first setting it to a variable.
`is_object_in_taxonomy()` can return its conditional instead of if/else true/false.
 
See #32444.


git-svn-id: https://develop.svn.wordpress.org/trunk@32627 602fd350-edb4-49c9-b593-d223f7449a82
2015-05-27 21:59:06 +00:00
Boone Gorges
94a9896b05 Introduced $field argument to get_term_link().
This new argument allows developers to specify which term field should be
matched by the value of the `$term` parameter (in particular, 'name' and
'term_taxonomy_id' are now supported).

Props sudar, mordauk.
Fixes #14156.

git-svn-id: https://develop.svn.wordpress.org/trunk@32553 602fd350-edb4-49c9-b593-d223f7449a82
2015-05-23 18:28:22 +00:00
Boone Gorges
3a47da7943 Respect $_wp_suspend_cache_invalidation in clean_term_cache().
Props tollmanz, rmccue.
Fixes #28743.

git-svn-id: https://develop.svn.wordpress.org/trunk@32498 602fd350-edb4-49c9-b593-d223f7449a82
2015-05-12 20:13:53 +00:00
Drew Jaynes
8cb8a90b7e Fix a wide variety of syntactical, spacing, wording, and other issues in wp-includes/taxonomy.php.
See #32246.


git-svn-id: https://develop.svn.wordpress.org/trunk@32453 602fd350-edb4-49c9-b593-d223f7449a82
2015-05-07 06:13:27 +00:00
Drew Jaynes
3ff997b3b6 Ensure the optional parameter in get_object_taxonomies() is documented as such.
See #32246.


git-svn-id: https://develop.svn.wordpress.org/trunk@32452 602fd350-edb4-49c9-b593-d223f7449a82
2015-05-07 05:32:29 +00:00
Drew Jaynes
2b62df22b3 Add a description to the hook documentation for the created_$taxonomy action to clarify the dynamic portion of the hook name.
See #32246.


git-svn-id: https://develop.svn.wordpress.org/trunk@32451 602fd350-edb4-49c9-b593-d223f7449a82
2015-05-07 05:27:36 +00:00
Drew Jaynes
97ac7fffa1 Add missing parameter descriptions to the created_term hook documentation.
Props dlh.
Fixes #32276.


git-svn-id: https://develop.svn.wordpress.org/trunk@32450 602fd350-edb4-49c9-b593-d223f7449a82
2015-05-07 05:25:30 +00:00
Boone Gorges
1efe303ebf Improve sanitization of 'name' param in get_terms().
Values of 'name' that contain db-encoded character on insert - like an
ampersand, which is HTML-encoded in the database - will only match if they go
through the same `sanitize_term_field()` routine.

Fixes #32248.

git-svn-id: https://develop.svn.wordpress.org/trunk@32353 602fd350-edb4-49c9-b593-d223f7449a82
2015-05-05 11:13:51 +00:00
Drew Jaynes
9d9fbf6a5b Add a changelog entry for the $resource_type parameter added to the get_ancestors filter in 4.1.1.
Props dimadin.
See #31925.


git-svn-id: https://develop.svn.wordpress.org/trunk@32351 602fd350-edb4-49c9-b593-d223f7449a82
2015-05-05 02:16:58 +00:00
Drew Jaynes
fae4ff9b2f Ensure the optional parameters for get_taxonomies() are documented as such.
See #31800.


git-svn-id: https://develop.svn.wordpress.org/trunk@32349 602fd350-edb4-49c9-b593-d223f7449a82
2015-05-05 02:04:52 +00:00
Drew Jaynes
e8668f7bca Improve inline documentation in wp-includes/taxonomy.php.
* Adds missing `@since` versions
* Adds `@global` tags and descriptions to DocBlocks where appropriate

Props ChaseWiseman.
See #31800.


git-svn-id: https://develop.svn.wordpress.org/trunk@32348 602fd350-edb4-49c9-b593-d223f7449a82
2015-05-05 02:00:18 +00:00
Boone Gorges
53d42e6a9c Remove duplicate semicolon introduced in [32326].
git-svn-id: https://develop.svn.wordpress.org/trunk@32327 602fd350-edb4-49c9-b593-d223f7449a82
2015-04-29 12:57:35 +00:00
Boone Gorges
1700d2b265 Improve performance of loop detection in _get_term_children().
Using an array keyed by term_id allows us to use `isset()` rather than the
slower `in_array()`. In addition, it lets us avoid the use of `wp_list_pluck()`
on large arrays, and helps us to avoid arrays that are unnecessarily large due
to duplicate entries.

Fixes #32144 for trunk.

git-svn-id: https://develop.svn.wordpress.org/trunk@32326 602fd350-edb4-49c9-b593-d223f7449a82
2015-04-29 12:55:29 +00:00
Sergey Biryukov
fdd254b5d8 Add missing word to wp_insert_term() error strings.
props dipesh.kakadiya.
fixes #32031.

git-svn-id: https://develop.svn.wordpress.org/trunk@32297 602fd350-edb4-49c9-b593-d223f7449a82
2015-04-26 11:49:36 +00:00
Sergey Biryukov
3b6ff03136 wp_update_term() should check if get_term() returned null.
props dlh.
fixes #31954.

git-svn-id: https://develop.svn.wordpress.org/trunk@32117 602fd350-edb4-49c9-b593-d223f7449a82
2015-04-13 01:20:57 +00:00
Drew Jaynes
bec2445b11 Fix a variety of inline documentation syntactical issues in wp-includes/taxonomy.php.
See #31888.


git-svn-id: https://develop.svn.wordpress.org/trunk@32047 602fd350-edb4-49c9-b593-d223f7449a82
2015-04-05 17:07:54 +00:00
Drew Jaynes
601aee103a Supplement hook documentation for the get_terms_fields filter to more clearly explain the expected consequences of using it to modify the fields to select in a terms query.
Props boonebgorges.
Fixes #31174.


git-svn-id: https://develop.svn.wordpress.org/trunk@31855 602fd350-edb4-49c9-b593-d223f7449a82
2015-03-20 20:10:22 +00:00
Boone Gorges
31bded083b Ensure that the $exclusions parameter of 'list_terms_exclusions' filter is always a string.
Props fhwebcs.
Fixes #31681.

git-svn-id: https://develop.svn.wordpress.org/trunk@31813 602fd350-edb4-49c9-b593-d223f7449a82
2015-03-18 18:22:20 +00:00
Boone Gorges
ec49827b0b In wp_insert_term(), allow a term with an existing name if a unique $slug has been provided.
`wp_insert_term()` protects against the creation of terms with duplicate names
at the same level of a taxonomy hierarchy. However, it's historically been
possible to override this protection by explicitly providing a value of `$slug`
that is unique at the hierarchy tier. This ability was broken in [31734], and
the current changeset restores the original behavior.

A number of unit tests are added and refactored in support of these changes.

See #17689 for discussion of a fix that was superceded by [31734]. This commit
retains the fix for the underlying bug described in that ticket.

See #31328.

git-svn-id: https://develop.svn.wordpress.org/trunk@31792 602fd350-edb4-49c9-b593-d223f7449a82
2015-03-16 11:15:34 +00:00
Gary Pendergast
1357e7fc2e Add emoji URL support, and Twemoji fallback for displaying slugs in wp-admin, when the browser doesn't natively support emoji.
Props pento, SergeyBiryukov and boonebgorges.

Fixes #31328



git-svn-id: https://develop.svn.wordpress.org/trunk@31734 602fd350-edb4-49c9-b593-d223f7449a82
2015-03-11 22:54:49 +00:00
Drew Jaynes
86b23615ea Remove a duplicate mention of the default value for the $number argument in get_terms().
Props iandunn.
Fixes #31526.


git-svn-id: https://develop.svn.wordpress.org/trunk@31652 602fd350-edb4-49c9-b593-d223f7449a82
2015-03-07 01:04:22 +00:00
Boone Gorges
98322a7143 Ensure that an array of object IDs is passed to the 'get_object_terms' filter.
Originally introduced in [31581].

Props doublesharp.
Fixes #18828.

git-svn-id: https://develop.svn.wordpress.org/trunk@31639 602fd350-edb4-49c9-b593-d223f7449a82
2015-03-06 13:17:09 +00:00
Drew Jaynes
653f2ee36e Correct the $number argument description in get_terms() to reflect that an empty string or 0 will return all possible results, not -1.
Previously, it was noted that -1 would return all possible results. However, as the value of `$number` is passed through `absint()`, -1 would actually be converted to 1, thereby producing unexpected results.

Props iandunn.
Fixes #31526.


git-svn-id: https://develop.svn.wordpress.org/trunk@31638 602fd350-edb4-49c9-b593-d223f7449a82
2015-03-06 08:04:32 +00:00
Boone Gorges
22179be8ca Introduce 'get_object_terms' filter in wp_get_object_terms().
The existing 'wp_get_object_terms' filter accepts a parameter `$taxonomies`,
which is a list of taxonomy names formatted for direct use in a MySQL IN clause.
This formatting makes it difficult to make use of the taxonomy list in filter
callbacks. However, changing the parameters passed to the existing filter
raises backward compatibility concerns, so we introduce a new filter that
receives a structured `$taxonomy_array` parameter.

We also take this opportunity to correct and clean up some of the documentation
on the 'wp_get_object_terms' filter.

Props postpostmodern, doublesharp, wonderboymusic, nacin.
Fixes #18828.

git-svn-id: https://develop.svn.wordpress.org/trunk@31581 602fd350-edb4-49c9-b593-d223f7449a82
2015-02-27 20:30:13 +00:00