Release date: September 15th, 2018
The difference between something good and something great is attention to detail. – Charles R. Swindoll†
Foreword
We’ve written a foreword on v3.1, it tells the story behind of what we’ve done. You should read it, so you’ll know what to expect from this update.
Feature highlights
- We completely redesigned the meta-titles generation, they support 114+ languages out of the box, and we’ve added new title adjustment features.
- We’ve vastly improved the meta-description generation code, it now supports all languages, it leaves out junk, and it’s faster than ever before.
- The SEO Bar is now more intelligent. It’s now aware of its WordPress, linguistic, and graphical environment, and it tells you more details.
- The pixel counter is now the most accurate guideline in its field. Hover over it, and you’ll find it gives you more information.
- Custom Post Type support is improved, and you can now easily manage various settings for them individually.
- The plugin’s interface is now fully accessible with added keyboard navigation.
- …and more than 700 other noteworthy changes, found in our detailed log.
Upgrade notes
- PHP 5.3 support has been dropped. Here’s why:
- PHP 5.3 hasn’t received updates for over 4 years and using it yields a major security risk.
- Using PHP 5.4 lowers our time spent on maintenance, and it increases our productivity; so, we can focus on faster, better, and more useful solutions.
- Learn more about Upgrading PHP.
- WordPress 4.4 and 4.5 support has been dropped. Here’s why:
- Although WordPress still brings security updates for versions as low as 3.7, most users have upgraded to a newer version.
- WordPress brings a slightly different yet vastly better developer environment with each major release. Supporting these will not only lower our maintenance and support time, but it also brings you a better experience.
- Learn more about Upgrading WordPress.
If, for whatever reason, you still wish to use PHP 5.3 and/or WordPress 4.4/4.5, The SEO Framework 3.0.6 still supports them.
New and simplified API docs
After two years, we’ve finally updated our API documentation, go check it out.
Like what you see?
Consider giving us an awesome review!
Detailed log
Fred Brooks’ law: “What one developer can do in one month, two developers can do in two months.”
For everyone: API changes
- The plugin’s API has been greatly overhauled and improved.
- If you have no coding experience – but have still implemented filters/snippets acquired from the support forums – please check out the debug logs.
- If you’re getting deprecation or “doing it wrong” notices on the website or logs after updating, don’t be alarmed. Copy the error or notice and paste it in our support forums in a code block. Our support team (Sybre…) will forge new snippets for you, or point you to newly available options.
- Note that you should never set
WP_DEBUG
totrue
(inwp-config.php
) on a production website. Set this tofalse
, live sites shouldn’t be actively debugged.
For developers: About the integral options
- The integral options (from checkboxes and number fields) now always return an integral type, instead of a string.
- So, you’ll now get a
(int) 0
, instead of a(string) '0'
. - This change was made because we now use
stripslashes_deep()
, which usesstripslashes_from_strings_only()
. - This improves performance. And, this shouldn’t affect code behavior, unless you used strict integral-string checks.
For developers: About the API
- We’ve removed or otherwise deprecated most API functions. We’ve done this to lower maintenance time drastically.
- We encourage you to always use the factory function
the_seo_framework()
. Via this factory function, you can access all API methods when needed. - The factory function yields many failsafe capturers so we can make future changes with peace of mind. This wouldn’t be possible with procedural code.
For developers: JavaScript changes
- The original JS file (stemming from August 2015) was a God Object container, which grew over 3000 lines of code. So, we split the code over multiple objects, thus files, to improve maintainability and added a script loader.
- Theoretically, we could’ve auto-combined the files in the loader (like WP
load-scripts.php
does), but we figured most servers use HTTP/2 now. And, if they don’t, they should. - With this introduction, most of the split-off code’s API has been dropped, without deprecation. We plan to incorporate the new API into the Extension Manager, which now maintains its own versions of almost everything.
- We’ve also removed the “externs” files, as we long moved to favor Babel, instead of Google’s Closure Compiler.
Super detailed log
No line left unturned.
> View code changes.
> View closed tickets.
For everyone:
- Added:
- New title options, including:
- A toggle that strips HTML tags, like WordPress normally does.
- On every singular page edit screen, a “Remove the blog name” toggle has been added.
- New description options, including:
- A toggle for automated descriptions.
- New home page options, including:
- Open Graph title.
- Open Graph description.
- Twitter Title.
- Twitter description.
- New robots options that allow setting robots for each post type.
- These robots settings are applied to the whole custom post type, including its terms.
- The “noindex” settings also remove the post type from the sitemap.
- New SEO Bar checks:
- When the generated description is empty, it’ll now tell you with a blue block, instead of saying it’s “far too short”.
- When the generated title is empty thanks to filters, it’ll now tell you with a blue block, instead of saying it’s “far too short”.
- Pages in draft correctly state their indexing status.
- Pages that are protected now correctly state their indexing status.
- When the Blog Page is empty, and when it’s not the home page, it’ll show a “noindex” notification.
- Post types that have robots settings applied, now show them via appropriate notifications.
- New post type settings:
- Found in the General Settings meta box, they’ll prevent The SEO Framework from interacting.
- These settings should only be used on conflicting post types, like which offer their own SEO settings or are otherwise incorrectly registered.
- New sitemap settings:
- Set the maximum posts queried per type.
- Toggle the output of priorities. This is enabled by default for old sites, disabled for new sites.
- The sitemap stylesheet now outputs favicon meta tags.
- When you activate any plugin, a check will be performed for conflicting SEO plugins; when found, a single dismissible warning notification will be outputted.
- Only users with plugin activation capabilities can see this message.
- Breadcrumbs are now rendered on non-hierarchical pages, too.
- This seems to have little real-world effect, for now.
- The post-edit and global SEO settings’ tabs now support keyboard navigation. You’ll notice they’ll have an accessible border around them when using keyboard navigation.
- Polylang string translation support on titles and descriptions.
- New title options, including:
- Improved:
- Meta descriptions:
- “Plausibly” embeddable URLs are now removed from the autogenerated descriptions. “Plausibly” because we don’t extensively test the URLs for embeddability.
- This plugin now detects Elementor as a conflicting plugin for content. This means that when Elementor builds a page, no automated description can be generated from the content.
- Improved multibyte support in automated descriptions, like for finding punctuations.
- Automated descriptions now try to find complete sentences by stripping the last three trailing words after the latest found punctuation mark.
- Canonical:
- WC Shop and Blog Pages now have “rel=prev/next” canonical URLs added when link relationship tags are enabled for archives.
- Shortlinks now support search pages.
- Shortlinks now output shorter date-archive links.
- Robots:
- WC Shop and Blog Pages now listen to the global pagination robots’ “noindex” settings.
- Sitemap:
- The automated scheme detection can now prevent the sitemap from using (and caching) the wrong scheme.
- The sitemap and stylesheet URLs should no longer be shown in the search results of search engines.
- All sitemap transients are now deleted on corresponding deletion queries when using WPML.
- Long URLs are now truncated in the sitemap stylesheet. This does not affect the sitemap itself, nor how search engines see the URLs.
- Structured Data:
- New Google ListItem requirements have been put in place for the breadcrumbs.
- UI/UX:
- Input fields:
- Canonical, redirect, and image URLs are no longer uselessly suggested by the browser for the administrative input fields.
- Code and URL input types (Twitter profile, Webmasters’ verification codes) now always flow from left to right, even if your site’s written language setting is otherwise.
- Webmasters’ code input now automatically strips extraneous HTML. So, you can simply paste the code you copied from the analytical setup interfaces.
- Tooltips:
- They now support RTL screens without the arrow overflowing.
- The arrows now always follow your mouse, for a more natural look.
- The arrows are now indented twice the size of a small object, like with
[?]
, giving them a more prominent look.
- Pixel & Character Counters:
- The post-edit counters are no longer affected by your input when a preceding value is set in the Home Page SEO Settings.
- The administrative title placeholders now better resemble the real front-end output when using HTML tokens or duplicated spaces.
- Added a descriptive title on character counters, telling what happens when you click them.
- The character counters can now count down to zero and will notify you off it.
- The pixel counter is now color coded. Hover over it to know why!
- Switching SEO meta box tabs or loading a page with character counters is now a tad less resource intensive.
- The SEO Bar:
- It will no longer overflow, but it will now wrap automatically when needed. For this, we had to change a few things.
- The tooltips aren’t “boxed in” anymore, but flow wherever they deem best.
- There are 5 to 6 times as many tooltip listeners per SEO bar, as it did prior v3.0.
- It is a little less daunting–by 13.63% in width to be exact.
- It no longer performs intricate and slow requests to verify if we’re on a term page on Custom Post Types list tables.
- It is now capable of articulating post type names, instead of only term names.
- It now suggests what you need to do with titles and descriptions that are deemed to short or long, instead of stating binary information.
- On Firefox, list table overflow is now less prone to happen. We’ve removed compatibility fixes, and introduced a flexible system via CSS.
- The overflowing is caused by a bug in Internet Explorer 6, which Firefox happily integrated, affecting roughly 30% of their users.
- In short, Gecko ignores word-wrap values in tables, and for 13 years running, Firefox ignores overflow-preventing width values. Both these bugs combined cause mayhem.
- It will no longer overflow, but it will now wrap automatically when needed. For this, we had to change a few things.
- Other:
- We’ve added descriptive links to all meta title and description labels.
- The Facebook Business page URL description has been updated, to be in line with the current behavior.
- A lot of verbatims regarding various settings has been improved, to make it more clear what they do, and when they do it.
- The primary term selector tooltip now states the human readable and translatable (archive type) name, instead of the static code name.
- Plugin conflict notices are now shown in red.
- Homepage setting notifications are now always showing when applicable.
- When Polylang is active, users are now notified that it’s better not to utilize some of the Home Page SEO settings meta box fields.
- The Google Search Console’ verification code link now directly sends you to the correct form.
- Input fields:
- Settings:
- The main plugin’s cache is now flushed after the SEO settings are requested to be updated, even when the options aren’t changed.
- In the robots settings meta box, we’ve added a descriptive warning for the sitewide
noindex
andnofollow
settings. - In the homepage settings meta box, and on the post-edit meta box for the homepage, we’ve added a descriptive warning for the
noindex
andnofollow
settings. - The settings handler has been slightly refactored to improve performance.
- Upgrader:
- It is now more intelligent and is now able to skip upgrades that aren’t necessary for new installations.
- Upgrading can no longer happen on the SEO Settings page; instead, it redirects you from it to prevent setting desynchronization.
- It automatically registers the default site options for new sites, so the admin interface no longer needs to be accessed (once) for them to have an effect.
- This is great for multisite setups that block the admin interface.
- It prevents/resolves all sorts of first-run bugs, like the sitemap’s initial registration.
- The plugin can now downgrade its database version to the currently installed version automatically. This makes sure necessary future upgrade procedures are reinstated when you choose to downgrade (for any reason).
- Since TSF v3.0.6 this happens when a user saved the options, but this could lead to inconsistent behavior on WordPress Multisite installations.
- Performance:
- We removed a lot of redundant code (like option upgrade checks), which have long been superseded by better standards.
- We’ve scanned the plugin once more for performance culprits, and improved what needed improving.
- Meta descriptions:
- Changed:
- TSF now requires WordPress 4.6 (previously 4.4).
- TSF now requires PHP 5.4 (previously 5.3).
- The pixel and character-count guidelines have been updated:
- They’re much more reluctant regarding description lengths.
- They’re a little more reluctant regarding title lengths.
- The “is there a timestamp shown is search” condition has been removed, the effect holds no evidence anymore.
- They’re more informative on Facebook and Twitter inputs.
- The upgrader can now run on the front-end, to prevent missing options (which could harm your site in ranking). This means, that when you have automated plugin-update enabled, left the admin dashboard before an update finished, or updated via a multisite network interface:
- Some parts of the upgrade process don’t run, like showing notifications of options changes. We will solve this in a later update, by enqueuing notifications.
- If your site runs out of memory on the front-end, the upgrade process might cause a white screen. This is highly unlikely and will resolve itself because the upgrader keeps a record of how far it’s gotten. We will solve this in a later update by adding memory exhaustion checks.
- Upgrading from The SEO Framework 2.6.x or earlier is no longer reliable (a soft check was put in place), and we urge the ~100 webmasters still using it to reset and reconfigure their settings after updating. The upgrader was introduced in 2.7.0, and 2.7.0 or later versions will support upgrading indefinitely.
- URL input types (Canonical, Redirect) are now
url
instead oftext
. This means you need to supply a correct URL according to the browser, instead that only TSF checks for correctness after it’s being saved. - Term title prefixes are now applied to Open Graph and Twitter titles too.
- The Schema.org effort states they’re moving towards and are going to prefer HTTPS. So, after two years including some testing, we abide to be future-proof. Note that it’s a parameter, not a link.
- On post preview, the plugin no longer outputs SEO meta. This is to prevent object caching conflicts.
- On post preview, the plugin no longer redirects. This is to prevent browser caching conflicts.
- The sitemap’s “generated by” mark now leads to our homepage, instead of the WordPress.org plugin page. The URL is still invisible and otherwise blocked from robots, and can be easily removed using the Incognito extension.
- The “Home” URL in the plugin activation page is now dubbed “About”.
- Description additions are automatically turned off now on new sites.
- Link relationship tags for Posts and Pages are now automatically enabled on new installations, because there’s no longer a performance impact.
- The sitemap’s timestamp options are now found under the new “Metadata” tab.
- The title’s separator option is now found under the “Additions” tab.
- This plugin now removes WooCommerce’s breadcrumbs, to prevent output conflict, regardless of TSF’s Structured Data settings.
- Updated:
- Most, if not all, database transients related to this plugin have been invalidated and are being rebuilt. The old transients will be cleaned up by WordPress automatically.
- Various [?]-links have been updated. Some were redirecting, others had the URL fragment adjusted.
- The “SEOPress” plugin is now detected as a conflicting SEO plugin.
- These plugins are no longer detected as conflicting plugins:
- Open Graph:
- “Fedmich’s Facebook Open Graph Meta” – No longer updated, low user base.
- “Facebook AWD All in one” – No longer updated, low user base.
- “Facebook Featured Image & OG Meta Tags” – No longer updated, low user base.
- “Facebook Meta Tags” – No longer updated, low user base.
- “Add Link to Facebook” – No longer updated, relative low user base, closed for security reasons.
- Twitter:
- “Twitter” – they only embed sharing links.
- Open Graph:
- Bing Webmaster’s verification code link now leads to their new landing page.
- Yandex Webmaster’s verification code link now leads to their new landing page.
- Removed:
- Counters now only work with JavaScript enabled. In PHP, this added too much overhead as we were predicting and (incorrectly) counting in code that’d be superseded by JavaScript anyway.
- Description excerpts are no longer added to categories based on the latest post-ID.
- Open Graph, Twitter, Structured Data, and SEO plugins no longer disable certain functionality in the plugin.
- Instead, only a warning is shown on the settings page.
- We made this change as some users found this plugin to be broken when trying it out, while it was actually preventing conflicts when other plugins remained active.
- When a sitemap file or plugin is found, this plugin no longer removes its related settings.
- Instead, only a warning is shown on the settings page, telling that the options have no effect.
- AnsPress title compatibility, they handle this correctly.
- Jetpack Open Graph compatibility checks, they handle this since 2016, and improved upon this since JetPack v6.4.
- Description output caching. It causes too much overhead, and it provides no benefit any longer. In fact, it degrades performance.
noydir
robots meta tag. It’s no longer used by any search engine.
- Fixed:
- When reactivating or deactivating the plugin, there’s no longer a chance for your SEO options to be wiped on a random database error.
- We used to delete the options, so we could reactivate option-auto-loading; now we add a buster-timestamp.
- Various RTL UI elements are now aligned correctly.
- On Firefox, checkbox options marked “default” (recommended) or “warned” (use at own risk) are now color-coded again.
- When adding a new category when no category is selected, the primary term is now correctly assigned.
- When the primary term selection changed after load and when a new category is added, the previous category is no longer assigned as primary.
- Twitter description and title fields now render escaped
<&'">
characters in placeholders correctly when fetched from related Open Graph fields. - When no description or title is found for the corresponding Open Graph or Twitter fields, no more infinite loop will occur that might crash the browser. Luckily, modern browsers detect this to prevent said crashes.
- When the homepage is a blog, it’ll now be included in the sitemap again.
- Thanks to the upgrade to PHP 5.4, the SEO bar can now count words with non-latin special characters.
- In their normal form of writing, it’s not able to count Han characters.
- When no tagline is set in the WordPress settings, the home page will no longer display “Untitled on Site name” for the description by default.
- The SEO Bar’s title suggestion now interprets title protection, like “Private:” and “Protected:”.
- Quotes and other special characters in titles and descriptions are now correctly calculated by the SEO Bar.
- Note that double single-quotes will be converted to single double-quotes, and they’ll, therefore, be counted as one character.
- Ultimate Member support:
- The Canonical URL is now correct.
- The Descriptions are now correct.
- The Titles are now fully controlled by TSF.
- Extraneous (duplicated) meta output from Ultimate Member has been removed.
- Invalid settings’ input is now checked, this makes the saving buttons work as intended:
- Before you can change tabs. It’ll block the tab switch and notify you.
- After you close a meta box, and it’ll reopen instantly to notify you.
- The SEO Bar no longer incorrectly tells that CPT categories or tags are discouraged from indexing via the global settings.
- WC Shop and Blog page’s canonical URLs now correctly output pagination.
- WC Shop and Blog page’s shortlink URLs now correctly output pagination.
- Search pages now correctly output pagination.
- The title meta box’s example title (from the latest post) can now be substituted for the example title when empty.
- Term titles no longer have their HTML tags stripped in the generated SEO titles by default.
- When no blog description or tagline is set, the left/right example titles are no longer partially emptied when JS is deactivated.
- Duplicated spaces are no longer counted by the pixel and character counters, and they’ll be removed from the front-end output.
- Entering lone spaces in the title and descriptions will no longer set the pixel and character counters to 0.
- IE11 pixel and character counters now work correctly again when an HTML symbol is introduced.
- Settings are now correctly registered before the plugin tries to upgrade.
- The sitemap is now correctly registered via
WP_Rewrite
when the plugin is installed for the first time. - When you try to leave a post-edit admin screen, TSF no longer conflicts with other plugins (two-way street) when trying to warn you of unsaved data.
- Migrating Genesis theme term-meta now has an effect on the front-end too, instead of only the administrative option fields.
- Parent categories, where children have posts, are no longer automatically and incorrectly marked for “noindex” in the SEO Bar when no posts are assigned.
- This didn’t affect the real, front-end output value.
- Interactive tooltips arrows now no longer overflow when the balloon size becomes smaller.
- The primary term selector no longer overflows to the bottom. Instead, the text flows neatly to the bottom, while the button stays inline.
- Titles and descriptions now have no chance from experiencing ID conflicts, where a post and term ID might collide.
- When entering something in the Open Graph description or title fields, and then emptying it, and then entering something in the meta description or title fields, it will no longer cause the Twitter title to use the latest known meta description or title field from when the Open Graph field got emptied.
Whew (╯°□°)╯︵ ┻┻ - When JavaScript is enabled, the social description placeholders now show their front-end value when no custom description is set.
- Taxonomies that aren’t public will no longer show an SEO bar, confusing users.
- When reactivating or deactivating the plugin, there’s no longer a chance for your SEO options to be wiped on a random database error.
For translators:
- New translations are available.
- Notes:
- We no longer list every single linguistic change here. It’s very tedious and slows down development time tremendously.
- In this update, you’ll find that languages that use grammatical gender can be more incisive.
- All new translatable strings are available at the translation page.
For developers:
- Tips:
- Want to check if TSF is activated? Use:
defined( 'THE_SEO_FRAMEWORK_PRESENT' )
. - Want to use TSF’s API? You’re in (fail)safe hands with
the_seo_framework()
. - Want to make sure you can use TSF’s API? Call
the_seo_framework()->loaded
.
- Want to check if TSF is activated? Use:
- Note:
- We tried to list every single change here; but, we could’ve overlooked a thing or two. Test your code!
- Added:
- Singleton class
\The_SEO_Framework\Builders\Scripts
, via a “Builder Pattern”, callable as e.g.the_seo_framework()->Scripts()::function_name()
.- This is the first class of this kind in The SEO Framework plugin.
- The plugin now tries to remove all active
wp_title
filters, like it has been doing forpre_get_document_title
a long time. - New option indexes, available via
the_seo_framework()->get_option( $index )
, serialized on optionautodescription-site-settings
:(array) disabled_post_types
(array) the_seo_framework()->get_robots_post_type_option_id( 'noindex' )
(array) the_seo_framework()->get_robots_post_type_option_id( 'nofollow' )
(array) the_seo_framework()->get_robots_post_type_option_id( 'noarchive' )
(int) (bool) auto_description
(int) (bool) title_strip_tags
(string) homepage_og_title
(string) homepage_og_description
(string) homepage_twitter_title
(string) homepage_twitter_description
(int) sitemap_query_limit
- The sitemap xsl stylesheet now has its colors defined in various
xsl:variable
elements. It’s also completely reconfigurable via hooks. - The plugin now initializes options cache. For instance, when the plugin’s activated a temporarily value will be set that it did.
- Various JS functions and class objects have been introduced. These are available via the API, but shouldn’t be used as the JS API is still under consideration and can change at any update.
- An initial database version option has been added. This is
the_seo_framework_initial_db_version
, it’s only used in the upgrading process, and it’s not autoloaded. - [JavaScript]: Input fields within TSF’s metaboxes with the class
tsf-input-not-saved
set will not invoke an “unsaved-work” AYS notice on page-navigation. - [JavaScript]:
tsf.i18n.inputGuidelines
is now available. - [JavaScript]:
tsf.params.inputGuidelines
is now available. - [JavaScript]:
tsf.params.socialPlaceholders
is now available. - [JavaScript]:
tsf.states.isGutenbergPage
is now available.
- Singleton class
- Improved:
- A “doing it wrong” notice is now supplied when calling
the_seo_framework()
too early. - Resolved all “non-passive event listener” warnings caused by jQuery, by using our own improved event handlers.
- The “doing it wrong” notice on “too early” query calls now shows the query-class method called.
- A “doing it wrong” notice is now supplied when calling
- Changed:
- The title generation has been overhauled.
- The plugin now loads within the
/bootstrap/
folder via the plugin’s initialautodescription.php
file, where you can more easily discern how the plugin’s loaded. - [JavaScript]: Tooltips are now instanced via their own object named
window.tsfTT
, eliminating the previous JS API.- The auto-invoked API still works as intended, via CSS.
- [JavaScript]: Media handlers are now instanced via their own object named
window.tsfMedia
, eliminating the previous JS API. - [JavaScript]: Primary Term handlers are now instanced via their own object named
window.tsfPT
, eliminating the previous JS API. - [JavaScript]:
tsf.params.titleAdditions
now always contains a value, unconditionally. Usetsf.states.useTagline
andtsf.states.taglineLocked
to determine whether it should be used (before settings change). - The WordPress filter
pre_ent2ncr
can now run on filterthe_seo_framework_sitemap_additional_urls
. - The WordPress filter
single_post_title
is now used for singular post titles. - Query caching is now disabled in WP_CLI.
- Integral options (1, 0, or a number) now return an integer, instead of a number encapsulated in a string.
- Calling any class of the
the_seo_framework()
façade other than\The_SEO_Framework\Init
will result in a fatal error. The\The_SEO_Framework\Core
constructor is now private and inherited by all classes but\The_SEO_Framework\Init
.- In other words: Don’t instantiate the façade. Just use
the_seo_framework()
.
- In other words: Don’t instantiate the façade. Just use
- Removed:
- We removed the
seotips
folder and their contents. They were a gimmick, accumulating SEO tips brought over past plugin update changelogs. - Many deprecated methods, which were deprecated on or before TSF v2.9.4 (August 30, 2017).
- The plugin’s automagic-upgrader has been removed, which has been replaced with a static, ordered and semantic plugin upgrader since TSF v2.7.0.
- Meta-generator methods’ debugging have been removed, along with all the debugging methods used for that.
- Title “doing it wrong” checks have been removed.
- [JavaScript]:
tsf.params.titlePixelGuideline
is no longer available. - [JavaScript]:
tsf.params.descPixelGuideline
is no longer available. - [JavaScript]:
tsf.i18n.good
is no longer available. - [JavaScript]:
tsf.i18n.okay
is no longer available. - [JavaScript]:
tsf.i18n.bad
is no longer available. - [JavaScript]:
tsf.i18n.unknown
is no longer available.
- We removed the
- Fixed:
- The wpForo title compatibility filter no longer emits a PHP notice when no title is generated from their plugin.
- A highly unlikely PHP error now won’t occur when
$wpdb
returns incomplete data on excluded archive/search IDs. - A PHP notice and unintentionally false-esque return value when the post ID is 0, or when the post ID is excluded, in method
is_post_included_in_sitemap()
. - A PHP warning is no longer omitted caused by a referencing parameter in
\The_SEO_Framework\_bbpress_filter_do_adjust_query()
. - The SEO Bar can now read filters applied to titles.
- When a custom social image goes missing, no PHP notices (regarding uncountable) will be emitted when their dimensions are calculated anymore.
- Class notes:
- Added:
\The_SEO_Framework\Silencer
, called when\The_SEO_Framework\Load
is blocked from loading in filters.
- Added:
- Constant notes:
- Added:
THE_SEO_FRAMEWORK_PRESENT
, defined when the plugin gets past environmental tests.THE_SEO_FRAMEWORK_BOOTSTRAP_PATH
, holds the bootstrap folder’s path.THE_SEO_FRAMEWORK_DIR_PATH_TRAIT
, holds the plugin traits’ folder’s path.THE_SEO_FRAMEWORK_SITE_CACHE
, holds the plugin cache option key.
- Ignored: (no longer have an effect)
THE_SEO_FRAMEWORK_DEBUG_HIDDEN
- Removed:
THE_SEO_FRAMEWORK_UPDATES_CACHE
- Added:
- Function notes:
- Added:
the_seo_framework_boot()
, marked private (do not use).the_seo_framework_pre_boot_test()
, marked private.the_seo_framework_db_version()
, returns the site’s TSF-database version.\The_SEO_Framework\_register_autoloader()
, marked private.\The_SEO_Framework\_init_tsf()
, marked private.\The_SEO_Framework\_load_trait()
, marked private.\The_SEO_Framework\_um_filter_generated_title()
, marked private.\The_SEO_Framework\_um_filter_generated_url()
, marked private.\The_SEO_Framework\_um_filter_generated_description()
, marked private.\The_SEO_Framework\_activation_set_plugin_check_caches()
, marked private.
- Removed:
the_seo_framework_pre_load()
, without deprecation–no one should’ve used this.the_seo_framework_test_server()
, without deprecation–no one should’ve used this.the_seo_framework_load_base_files()
, without deprecation–no one should’ve used this. Usethe_seo_framework_boot()
instead (it’s marked private, so you shouldn’t).the_seo_framework_test_server_phase()
, without deprecation–no one should’ve used this.\The_SEO_Framework\_init()
, without deprecation–no one should’ve used this. Usethe_seo_framework()
instead.\The_SEO_Framework\_um_user_functions_available()
, without deprecation–it’s an internal compatibility function.\The_SEO_Framework\_um_filter_custom_field_title()
, without deprecation–it’s an internal compatibility function.
- Deprecated:
the_seo_framework_active()
. Use expressionthe_seo_framework()->loaded
instead.the_seo_framework_version()
. Use constantTHE_SEO_FRAMEWORK_VERSION
instead.the_seo_framework_dot_version()
, without a replacement.the_seo_framework_options_pagehook()
. Use expressionthe_seo_framework()->pagehook
instead.the_seo_framework_get_option()
. Use expressionthe_seo_framework()->get_option( 'option_key' )
instead.the_seo_framework_title_from_cache()
. Use expressionthe_seo_framework()->get_title()
instead.the_seo_framework_description_from_cache()
. Use expressionthe_seo_framework()->get_description()
instead.the_seo_framework_the_url_from_cache()
. Use expressionthe_seo_framework()->get_current_canonical_url()
instead.the_seo_framework_is_settings_page()
. Use expressionthe_seo_framework()->is_seo_settings_page()
instead.the_seo_framework_update_option()
. Use expressionthe_seo_framework()->update_settings()
instead.the_seo_framework_options_page_slug()
. Use expressionthe_seo_framework()->seo_settings_page_slug
instead.
- Added:
- Method notes:
- Note:
- Almost all methods that were marked private are now prefixed with an underscore, without deprecation.
- These methods are usually callbacks for WordPress hooks or filters, and shouldn’t be used outside of their purposed context.
- Almost all methods that were marked private are now prefixed with an underscore, without deprecation.
- Added:
- In class:
\The_SEO_Framework\Admin_Init
— Factory:the_seo_framework()
Scripts()
enqueue_media_scripts()
enqueue_primaryterm_scripts()
get_input_guidelines()
get_input_guidelines_i18n()
_init_admin_scripts()
, private. Useinit_admin_scripts()
instead._check_tsf_ajax_referer()
, private._wp_ajax_update_counter_type()
, private._wp_ajax_crop_image()
, private.
- In class:
\The_SEO_Framework\Admin_Pages
— Factory:the_seo_framework()
make_checkbox_array()
attention()
attention_noesc()
attention_description()
attention_description_noesc()
- In class:
\The_SEO_Framework\Core
— Factory:the_seo_framework()
get_view_location()
_add_plugin_action_links()
, private.hellip_if_over()
- In class:
\The_SEO_Framework\Cache
— Factory:the_seo_framework()
_insert_seo_meta_box()
, private.get_sitemap_transient_name()
set_plugin_check_caches()
- In class:
\The_SEO_Framework\Debug
::_set_instance()
, marked private._debug_output()
, marked private._set_debug_query_output_cache()
, marked private.
- In class:
\The_SEO_Framework\Detect
— Factory:the_seo_framework()
is_post_type_disabled()
is_post_type_supported()
taxonomy_supports_custom_seo()
is_taxonomy_disabled()
is_taxonomy_public()
get_supported_post_types()
- In class
\The_SEO_Framework\Generate
— Factory:the_seo_framework()
is_post_type_robots_set()
- In class
\The_SEO_Framework\Generate_Image
— Factory:the_seo_framework()
register_image_dimension()
- In class
\The_SEO_Framework\Generate_Title
— Factory:the_seo_framework()
get_title()
get_custom_field_title()
get_generated_title()
get_raw_custom_field_title()
get_raw_generated_title()
generate_title_from_query()
generate_title_from_args()
get_generated_archive_title()
get_generated_single_post_title()
get_generated_single_term_title()
get_generated_post_type_archive_title()
get_generated_search_query_title()
get_static_404_title()
merge_title_branding()
merge_title_pagination()
merge_title_protection()
use_title_branding()
use_generated_archive_prefix()
use_home_page_title_tagline()
use_singular_title_branding()
get_home_page_tagline()
- In class
\The_SEO_Framework\Generate_Url
— Factory:the_seo_framework()
get_paged_urls()
, returns a cached array forget_paged_url()
.
- In class:
\The_SEO_Framework\Post_Data
— Factory:the_seo_framework()
get_post_type_label()
is_draft()
- In class
\The_SEO_Framework\Query
— Factory:the_seo_framework()
is_singular_archive()
numpages()
is_multipage()
, now is public, was protected.
- In class
\The_SEO_Framework\Render
— Factory:the_seo_framework()
get_document_title()
get_wp_title()
- In class
\The_SEO_Framework\Sanitize
— Factory:the_seo_framework()
_set_backward_compatibility()
, marked private.sanitize_field_id()
s_disabled_post_types()
s_post_types()
s_min_max_sitemap()
strip_newline_urls()
strip_paragraph_urls()
- In class
\The_SEO_Framework\Site_Options
— Factory:the_seo_framework()
get_static_cache()
update_static_cache()
get_robots_post_type_option_id()
- In class:
\The_SEO_Framework\Term_Data
— factory:the_seo_framework()
get_tax_type_label()
- In class
\The_SEO_Framework\Builders\Scripts
— Factory:the_seo_framework()->Scripts()
.::prepare()
::get_status_of()
::enqueue()
::register()
::verify()
::_prepare_admin_scripts()
, private, it’s called autonomously.
- In class:
- Moved:
- Note: All deprecated methods are moved to
\The_SEO_Framework\Deprecated
. This class is auto-loaded once a non-existing or deprecated method is called. - Note: The changes below (currently) don’t affect the factory method:
the_seo_framework()
. get_current_canonical_url()
.\The_SEO_Framework\Render => \The_SEO_Framework\Generate_Url
.get_current_permalink()
.\The_SEO_Framework\Render => \The_SEO_Framework\Generate_Url
.get_homepage_permalink()
.\The_SEO_Framework\Render => \The_SEO_Framework\Generate_Url
.get_the_front_page_ID()
.\The_SEO_Framework\Core => \The_SEO_Framework\Query
.generate_dismissible_notice()
.\The_SEO_Framework\Core => \The_SEO_Framework\Admin_Pages
.do_dismissible_notice()
.\The_SEO_Framework\Core => \The_SEO_Framework\Admin_Pages
.generate_dismissible_sticky_notice()
.\The_SEO_Framework\Core => \The_SEO_Framework\Admin_Pages
.do_dismissible_sticky_notice()
.\The_SEO_Framework\Core => \The_SEO_Framework\Admin_Pages
.code_wrap()
.\The_SEO_Framework\Core => \The_SEO_Framework\Admin_Pages
.code_wrap_noesc()
.\The_SEO_Framework\Core => \The_SEO_Framework\Admin_Pages
.description()
.\The_SEO_Framework\Core => \The_SEO_Framework\Admin_Pages
.description_noesc()
.\The_SEO_Framework\Core => \The_SEO_Framework\Admin_Pages
.google_language()
.\The_SEO_Framework\Core => \The_SEO_Framework\Admin_Pages
.
- Note: All deprecated methods are moved to
- Changed:
- In class:
\The_SEO_Framework\Admin_Pages
— Factory:the_seo_framework()
notices()
is now marked private.output_character_counter_wrap()
no longer uses the second parameter, and its complete output is now hidden from no-js.
- In class:
\The_SEO_Framework\Cache
— Factory:the_seo_framework()
setup_transient_names()
now runs atplugins_loaded
priority 5 (via constructor), instead of 10 (via new action).
- In class
\The_SEO_Framework\Generate
— Factory:the_seo_framework()
get_separator()
- Removed caching.
- Removed escaping parameter, and the method no longer escapes the output.
- This will not lead to security issues, but it might lead to a stray visual ampersand when used incorrectly.
- Escaping should be done at the output, regardless.
- In class
\The_SEO_Framework\Detect
— Factory:the_seo_framework()
wp_version()
- Now supports x.yy.zz WordPress versions.
- No longer caches.
- In class
\The_SEO_Framework\Generate_Title
— Factory:the_seo_framework()
- For these methods, the first parameter is now expecting an array or null, instead of an ID only:
get_twitter_title()
get_open_graph_title()
get_generated_twitter_title()
get_generated_open_graph_title()
- For these methods, the first parameter is now expecting an array or null, instead of an ID only:
- In class:
\The_SEO_Framework\Generate_Url
— Factory:the_seo_framework()
set_url_scheme()
, the third parameter is now deprecated and shouldn’t be used.get_shortlink()
:- No longer accepts $post_id input. Output’s based on query only.
- Shortened date archive URL length.
- Removed query parameter collisions.
- Added search support.
append_php_query()
, it no longer generates duplicated query parameters.get_paged_url()
:- Now recognizes WC Shops and WP Blog pages as archival types.
- Now sanitizes canonical URL according to permalink settings.
- Removed second parameter. It was only a source of bugs.
- Removed WordPress Core
get_pagenum_link
filter.
get_current_permalink()
:- This now works for taxonomies, too.
- In class:
\The_SEO_Framework\Post_Data
— Factory:the_seo_framework()
inattachment_seo_save()
is now marked private.inpost_seo_save()
is now marked private.get_excerpt_by_id()
no longer returns anything for terms, and now strips plausible embed URLs.fetch_excerpt()
no longer returns anything for terms, and now strips plausible embed URLs.
- In class:
\The_SEO_Framework\Query
— Factory:the_seo_framework()
is_category_admin()
no longer guesses, and only returns true on WordPress’ built-in categories.is_tag_admin()
no longer guesses, and only returns true on WordPress’ built-in tags.get_the_real_ID()
no longer invokes caching warnings when the first parameter ($use_cache
) is false.
- In class:
\The_SEO_Framework\Sitemaps
— Factory:the_seo_framework()
generate_sitmeap()
now useswp_raise_memory_limit( 'sitemap' )
.- This applies the WP Core filter
{$context}_memory_limit
, where$context
issitemap
.
- This applies the WP Core filter
- In class
\The_SEO_Framework\Sanitize
— Factory:the_seo_framework()
s_dupe_space()
- Now also catches non-breaking spaces.
- Now uses a regex pattern.
- In class:
- Removed:
- In class:
\The_SEO_Framework\Admin_Init
— Factory:the_seo_framework()
enqueue_admin_javascript()
additional_js_l10n()
enqueue_admin_css()
enqueue_admin_scripts()
_register_admin_javascript()
, was marked private._localize_admin_javascript()
, was marked private.check_tsf_ajax_referer()
, was marked private.wp_ajax_update_counter_type()
, was marked private.wp_ajax_crop_image()
, was marked private.
- In class:
\The_SEO_Framework\Admin_Pages
— Factory:the_seo_framework()
make_textfield()
, was marked private.field_value()
, redundant. Useget_option()
instead.get_field_value()
, redundant. Useget_option()
instead.is_default_radio()
, wasn’t ever used.
- In class:
\The_SEO_Framework\Cache
— Factory:the_seo_framework()
pre_seo_box()
, was marked private.inpost_seo_box()
set_theme_dir_transient()
delete_theme_dir_transient()
tt_inpost_box()
, was marked private, is now protected.singular_inpost_box()
, was marked private, is now protected.singular_inpost_box_general_tab()
, was marked private, is now protected.singular_inpost_box_visibility_tab()
, was marked private, is now protected.singular_inpost_box_social_tab()
, was marked private, is now protected.setup_transient_names()
, it could only be used internally.setup_auto_description_transient()
, it could only be used well internally.get_auto_description_transient()
, feature removed.setup_ld_json_transient()
, it could only be used well internally.get_ld_json_transient()
, replaced byget_ld_json_transient_name()
. It could’ve returned empty, so nothing changes.
- In class:
\The_SEO_Framework\Compat
— Factory:the_seo_framework()
jetpack_compat()
, was marked private.
- In class:
\The_SEO_Framework\Core
— Factory:the_seo_framework()
site_updated_plugin_option()
do_settings_updated_notice()
plugin_action_links()
- In class:
\The_SEO_Framework\Debug
::set_instance()
, was marked private.::has_debug_output()
, was marked private.::_output_debug()
, was marked private.::_debug_output()
, was marked private.profile()
, was marked private.get_debug_information()
, was marked private.set_debug_query_output_cache()
, was marked private.debug_key_wrapper()
, was marked private, is now protected.debug_value_wrapper()
, was marked private, is now protected.timer()
, was marked private, is now protected.
- In class:
\The_SEO_Framework\Detect
— Factory:the_seo_framework()
set_tell_title_doing_it_wrong()
tell_title_doing_it_wrong()
theme_title_doing_it_right()
theme_title_fix_active()
can_manipulate_title()
- In class
\The_SEO_Framework\Generate_Description
— Factory:the_seo_framework()
parse_description_args()
reparse_description_args()
get_description_excerpt_normal()
get_description_excerpt_social()
generate_home_page_description()
generate_description_additions()
generate_description_title()
generate_excerpt()
- In class:
\The_SEO_Framework\Generate_Url
— Factory:the_seo_framework()
set_url_scheme_filter()
- In class:
\The_SEO_Framework\Init
— Factory:the_seo_framework()
header_actions()
, should’ve only been used internally.call_function()
, was marked private, is now protected.
- In class:
\The_SEO_Framework\Inpost
— Factory:the_seo_framework()
_include_primary_term_selector_template()
, was marked private.
- In class:
\The_SEO_Framework\Load
— Factory:the_seo_framework()
debug_init()
, was marked private, and it’s no longer used.
- In class:
\The_SEO_Framework\Metabox
— Factory:the_seo_framework()
- These are now protected:
general_metabox_general_tab()
general_metabox_layout_tab()
general_metabox_performance_tab()
general_metabox_canonical_tab()
general_metabox_timestamps_tab()
general_metabox_posttypes_tab()
title_metabox_general_tab()
title_metabox_additions_tab()
title_metabox_prefixes_tab()
description_metabox_general_tab()
description_metabox_additions_tab()
robots_metabox_general_tab()
robots_metabox_no_tab()
homepage_metabox_general_tab()
homepage_metabox_additions_tab()
homepage_metabox_robots_tab()
homepage_metabox_social_tab()
social_metabox_general_tab()
social_metabox_facebook_tab()
social_metabox_twitter_tab()
social_metabox_postdates_tab()
sitemaps_metabox_general_tab()
sitemaps_metabox_robots_tab()
sitemaps_metabox_timestamps_tab()
sitemaps_metabox_notify_tab()
sitemaps_metabox_style_tab()
schema_metabox_general_tab()
schema_metabox_structure_tab()
schema_metabox_presence_tab()
- These are now protected:
- In class:
\The_SEO_Framework\Render
— Factory:the_seo_framework()
title_from_cache()
- In class:
\The_SEO_Framework\Sitemaps
— Factory:the_seo_framework()
enqueue_rewrite_flush_other()
, was marked private.flush_rewrite_rules()
, was marked private.use_googleplus_tags()
— The G+ project uses Open Graph and structured data.
- In class:
\The_SEO_Framework\Title
— Factory:the_seo_framework()
build_title_doingitwrong()
parse_title_args()
reparse_title_args()
process_title_additions()
build_title_notagline()
get_notagline_title()
generate_title()
title_for_home()
title_for_terms()
get_custom_field_title()
get_the_search_title()
get_the_404_title()
add_title_additions()
add_title_protection()
do_title_pre_filter()
do_title_pro_filter()
home_page_add_title_tagline()
- In class:
\The_SEO_Framework\Query
— Factory:the_seo_framework()
can_cache_query()
, was marked private, is now protected.
- In class:
- Deprecated:
- In class:
\The_SEO_Framework\Core
— Factory:the_seo_framework()
get_meta_output_cache_key()
, useget_meta_output_cache_key_by_query()
(without Page ID) orget_meta_output_cache_key_by_type()
(with page ID) instead.is_checked()
, use(bool) $value
instead.is_option_checked()
, use(bool) the_seo_framework()->get_option()
instead.
- In class:
\The_SEO_Framework\Detect
— factory:the_seo_framework()
get_supported_post_type()
, useis_post_type_supported()
instead.
- In class
\The_SEO_Framework\Generate_Description
— Factory:the_seo_framework()
generate_description()
, useget_description
instead.description_from_custom_field()
, useget_description_from_custom_field()
instead.generate_description_from_id()
, useget_generated_description()
instead.
- In class:
\The_SEO_Framework\Generate_Title
— factory:the_seo_framework()
title()
, goodbye, old friend. Useget_title()
instead.build_title()
, useget_title()
instead.post_title_from_ID()
, useget_raw_generated_title( [ 'id' => $id ] )
instead.title_from_custom_field()
, useget_raw_custom_field_title()
instead.generate_home_title()
, useget_title()
instead.get_the_real_archive_title()
, useget_generated_archive_title()
instead.single_term_title()
, useget_generated_single_term_title()
instead.process_title_additions()
, usemerge_title_branding()
instead.add_title_pagination()
, usemerge_title_pagination()
instead.use_archive_prefix()
, useuse_generated_archive_prefix()
instead.untitled()
, useget_static_untitled_title()
instead.
- In class:
\The_SEO_Framework\Generate_Url
— Factory:the_seo_framework()
get_prefered_scheme()
, useget_preferred_scheme()
instead. (typo)get_paged_post_url()
, useget_paged_url()
instead. (typo)
- In class:
\The_SEO_Framework\Render
— factory:the_seo_framework()
description_from_cache()
, useget_description()
instead.
- In class:
\The_SEO_Framework\Term_Data
— factory:the_seo_framework()
get_tax_labels()
, use WordPress Core functionality instead.
- In class:
- Note:
- Property notes:
- Added:
- In class:
\The_SEO_Framework\Query
— Factory:the_seo_framework()
(bool) pretty_permalinks
- In class:
- Removed:
- In class:
\The_SEO_Framework\Admin_Init
— Factory:the_seo_framework()
css_name
js_name
page_base_file
- In class:
\The_SEO_Framework\Cache
— Factory:the_seo_framework()
theme_doing_it_right_transient
- In class:
\The_SEO_Framework\Load
— Factory:the_seo_framework()
the_seo_framework_debug_hidden
- In class:
\The_SEO_Framework\Render
— Factory:the_seo_framework()
title_doing_it_wrong
- In class:
- Added:
- Interface notes:
- In interface:
\The_SEO_Framework\Debug_Interface
- Removed:
debug_init()
- Removed:
- In interface:
- Action notes:
- Added:
the_seo_framework_admin_loaded
. Runs after the plugin factory is loaded in the admin-end.the_seo_framework_loaded
. Runs after the plugin factory is loaded on any end.the_seo_framework_after_init
. Runs after the plugin has initialized its admin or front-end hooks. See also, the admin-only hook:the_seo_framework_after_admin_init
.the_seo_framework_delete_cache_{$type}
. Runs after cache deletion of$type
.the_seo_framework_xsl_head
. Runs in the sitemap xsl stylesheet header.the_seo_framework_xsl_description
. Runs in the sitemap xsl stylesheet description part of the HTML content.the_seo_framework_xsl_content
. Runs in the sitemap xsl stylesheet content part of the HTML content.the_seo_framework_xsl_footer
. Runs in the sitemap xsl stylesheet footer part of the HTML content.
- Added:
- Filter notes:
- Added:
(array) the_seo_framework_scripts
, allows you to adjust (or add to) the default script parameters.(string) the_seo_framework_title_from_custom_field
, the meta title from custom fields.(string) the_seo_framework_title_from_generation
, the meta title from (inputted/detected) query.(array) the_seo_framework_sitemap_styles
, the sitemap styles.(string) the_seo_framework_site_cache
, the cache option value.(array) the_seo_framework_inpost_seo_save_defaults
, the post SEO data defaults. Note that this doesn’t change the post data prior saving.(array) the_seo_framework_save_custom_fields
, the post SEO data, right before it’s saved.(array) the_seo_framework_save_term_data
, the term SEO data, right before it’s saved.(array) the_seo_framework_separator_list
, the separator list.(array) the_seo_framework_input_guidelines
, the input guideline list.(bool) the_seo_framework_supported_taxonomy
, whether the taxonomy is supported.
- Changed:
the_seo_framework_detect_page_builder
- Now returns
null
by default. - Now, when a boolean (either true or false) is defined, it’ll short-circuit this function. See this comment for more information.
- Now returns
the_seo_framework_sitemap_post_limit
now returns an option value.the_seo_framework_custom_post_type_support
is now checked on presence. This is cached. If your filter is added too late, it won’t work.the_seo_framework_sitemap_color_main
, it now reflects the main color, instead of the accent color.the_seo_framework_sitemap_color_accent
, it now reflects the accent color, instead of the main color.the_seo_framework_ogimage_output
, when the output is empty, theog:image
output will no longer continue.the_seo_framework_seo_plugin_detected
,the_seo_framework_og_plugin_detected
,the_seo_framework_seo_plugin_detected
, andthe_seo_framework_sitemap_plugin_detected
:- When filtered to be false, other plugins are still checked.
- Added two new parameters.
the_seo_framework_term_meta_defaults
is now also used on the front-end.the_seo_framework_custom_field_description
now passes a ‘taxonomy’ index in the second parameter.the_seo_framework_fetched_description_excerpt
no longer passes a third and fourth parameter.the_seo_framework_supported_post_type
, the first parameter is always a boolean, and no longer the accepted post type string.- Use the second parameter to get the evaluated post type, instead.
- Removed:
the_seo_framework_update_options_at_update
the_seo_framework_canonical_force_scheme
(was deprecated since 2.8.0). Usethe_seo_framework_preferred_url_scheme
instead.the_seo_framework_seo_bar_pill
, and all related supporting visuals — for improved browser painting performance.the_seo_framework_admin_color_css
, we standardized this filter’s behavior into the new script handler via other means.- Title related:
the_seo_framework_title_args
the_seo_framework_search_title
the_seo_framework_pre_add_title
, usethe_seo_framework_title_from_generation
instead.the_seo_framework_pro_add_title
, usethe_seo_framework_title_from_generation
instead.the_seo_framework_custom_field_title
, usethe_seo_framework_title_from_custom_field
instead.the_seo_framework_add_blogname_to_title
, use the options API instead.the_seo_framework_do_shortcodes_in_title
, use any of the two new title filters mentioned right above and returndo_shortcode( $title )
instead.the_seo_framework_use_archive_title_prefix
, use the options API instead.the_seo_framework_title_pagination
the_seo_framework_title_seplocation_front
, use the options API instead.the_seo_framework_title_seplocation
, use the options API instead.
the_seo_framework_inpost_seo_bar
, use the option introduced in TSF 2.7 instead.the_seo_framework_generator_tag
, it’s useless and you can do it viaadd_action( 'wp_head', function() { echo <meta.../>; } );
the_seo_framework_updates_cache
, it wasn’t used.the_seo_framework_generated_description_additions
, use the new options instead.the_seo_framework_do_shortcodes_in_description
, use any of the description filters and returndo_shortcode( $description )
instead.
- Deprecated:
the_seo_framework_get_term_meta
, usethe_seo_framework_term_meta_defaults
instead.
- Fixed:
the_seo_framework_default_site_options
Now runs whenever default options are called. So, it’s much more predictable, like when resetting options.
- Added:
- Structural notes:
- Added:
- Folder
/bootstrap/
, with:activation.php
deactivation.php
define.php
envtest.php
index.php
load.php
upgrade.php
- File
/inc/classes/silencer.class.php
. - File
/inc/compat/wp-470.php
. - File
/inc/classes/silencer.class.php
.
- Folder
- Removed:
- File
/inc/compat/wp-460.php
and all its contents. - File
/inc/functions/plugin-activation.php
, moved to/bootstrap/activation.php
. - File
/inc/functions/plugin-deactivation.php
, moved to/bootstrap/deactivation.php
. - File
/inc/functions/upgrade.php
, moved to/bootstrap/upgrade.php
. - File
/load.php
moved to/bootstrap/load.php
. - Folder
/seotips/
, with:seotips.txt
index.php
- File
- Added: