This page has been moved to: 2.7.0 – Contemporary Aspiration.
The goal of this update:
With this update, I wanted to improve this plugin in several ways. Normally, this is listed as “for developers”. This time, I’ve tried to make it more understandable for everyone.
- Minimizing the plugin’s load time.
- Reducing the plugin’s database calls.
- Reducing the plugin’s server resource usage.
- Increase the plugin’s compatibility with other plugins and themes.
- Upgrading the plugin to the latest WordPress standards.
- Reducing future bug reports chance.
- Improving the code quality and readability.
- Helping developers out with better extensibility.
- Better coding standards have been introduced.
How this was achieved (in order set above):
- I’ve removed redundant function calls and I’ve added more efficient caches and ways of data handling.
- I’ve removed temporarily database entries and I’ve exchanging them for permanent ones.
- I’ve transferred all option metaboxes into separated files, which are only loaded when needed on the SEO settings page.
- I’ve exchanged category and tag SEO data injection for WordPress 4.4+ term options. This will make sure premium themes can do whatever they want.
- Alongside the previous upgrade, I’ve taken a very close look at the WordPress core functions, and adjusted code accordingly.
- Because of all previous steps, this would follow naturally.
- I’ve read all code once more, and discovered ways for improvement. It’s like a spellcheck.
- Throughout the code, better and more open standards have been introduced, where other developers can easily add to, disable or enable functionality.
- With the help of a code linter, WordPress.com VIP best practices have been enforced throughout the plugin. This resulted in increased security and overall performance.
Detailed Changelog:
What’s marked with “TODO” is planned.
Last update: August 27th 2016
For everyone:
- Added:
- General compatibility and other improvements for The SEO Framework’s Extension Manager.
- Facebook image width and height meta tags output.
- Twitter image width and height meta tags output.
- Genesis Framework 2.3.0+ term metadata upgrade and fallback compatibility.
- Breadcrumbs images as per new Google requirements. Currently, archives contain an empty value.
- Improved:
- The title and description counter type option is now bound to the user, rather than the site.
- Dismissible notices are now dismissible on every admin page when called.
- The term meta data is now handled through WordPress 4.4 or later functionality, if present.
- Note: From The SEO Framework 2.8.0, backwards compatibility towards version 2.6.6.2 or lower will be removed in order to clean up the database.
- Note: That update will not remove support for WordPress 3.8 onwards 4.4 term metadata. It only means that you won’t be able to revert to old-style SEO metadata after updating either WordPress core or The SEO Framework.
- JavaScript performance counting characters and updating previews, it’s now “instant”.
- BuddyPress’ will no longer output a duplicated canonical URL.
- The dismissible notices created by The SEO Framework are now color-blind accessible through the addition of a small success, warning or failure icon.
- Removed duplicated JavaScript calls on the SEO Settings pageload for improved browser loading time.
- Leaving the SEO Settings page will now also generate a warning when you’ve pasted content into a text area.
- Local Search exclusion will now adjust the given query, instead of pre-emptively checking all posts and fetching the IDs to exclude.
- This massively improves Search page performance and reduces possible bugs.
- Changed:
- The SEO Settings page is now a submenu page, name “SEO Settings”. This change is only visible when another submenu is added.
- The Twitter Image URL output is now wrapped in the
twitter:image
meta tag instead oftwitter:image:src
, as the latter seems to be deprecated.
- Updated:
- TODO POT translation file.
- The counter type option has been reset as it’s now handled per user instead of per site.
- Because the breadcrumbs have been updated, the LD+Json transient cache has been invalidated and will be built up again. Old values are cleaned up automatically by WordPress core.
- Removed:
- The SEO plugin detection module is relatively heavy; therefore, some plugins have been removed from checking conflicts against. These include:
- Easy Facebook Share Thumbnail (hasn’t recieved updates in 3 years).
- SEO Facebook Comments (hasn’t recieved updates in 2 years).
- Simple Facebook Connect (plugin no longer exists).
- Social Discussions (hasn’t recieved updates in 3 years).
- Socialize (hasn’t recieved updates in 3 years).
- Wordbooker (plugin no longer exists).
- WP Caregiver (hasn’t recieved updates in 2 years).
- WP Facebook Like Send & Open Graph Meta (hasn’t recieved updates in 2 years).
- WP-OGP (hasn’t recieved updates in 2 years).
- Zolton.org Social Plugin (hasn’t recieved updates in 2 years).
- WP Facebook Like Button (plugin no longer exists).
- MSM Sitemaps (plugin no longer exists).
- WP Twitter Cards (hasn’t recieved updates in 2 years).
- iG:Twitter Cards (hasn’t recieved updates in 3 years).
- WordPress 4.3.4 and below are no longer to be supported in future updates.
- From this update WordPress 3.9 and later should work as indended, but there will be no more effort to keep that intact.
- From the next update, WordPress 4.3.3 or below could have issues with this plugin.
- Note: Using WordPress 4.4 and later allows your website to have significant performance benefits in combination with this plugin from this update.
- Note: There’s one known bug with WordPress 3.9 that causes a fatal error when adding a new term. After page reload the term is correctly added.
- This will not be fixed.
- Internet Explorer 9 and below are no longer supported.
- The SEO plugin detection module is relatively heavy; therefore, some plugins have been removed from checking conflicts against. These include:
- Fixed:
- Core trac ticket 37505.
- When saving the SEO Options, the counter type was reset. This has been fixed by placing the counter type option out of the plugins options scope.
- When updating the plugin, without added options, the update notification now really should no longer show up onwards from this update.
- Note: no new options have been added in this update. So it might just show up once more unintentionally.
- When solely changing the counter type within the SEO Options, an “unsaved changes” prompt will no longer be displayed.
- When changing the WordPress Core tagline settings, the homepage description transient is now flushed, instead of the blog page (which could be on another page).
- WooCommerce Product Tag and Category IDs can no longer conflict with singular post type IDs.
- The LD+Json home URL output now doesn’t add a trailing slash when your options don’t have supplied one.
- When your home URL is on a subdirectory, the canonical term URL is now correct.
- When inputting HTML entities in the Custom Home Page Title, they’re now correctly converted in the placeholder.
- WPML’s flags now display correctly again on WooCommerce product list overview.
- When an excerpt is filled in, a post update now flushes the automated description correctly.
- Various Firefox admin layout fixes (why aren’t you using a Blink based browser?), including:
- The separator selection options now fit on 1024px+ width windows.
- The SEO Bar now doesn’t make bbPress post type overview tables (topics, forums, replies) overflow below 1450px width windows.
- This fix affects all widefat table titles.
- 6 year old official bug thread.
- TODO Theme performance conflict https://github.com/sybrew/the-seo-framework/issues/18.
- When an empty search query is provided, the Search Exclusion filter now also works.
- The sitemap now correctly converts dates to the correct timezone, instead of always returning the GMT value.
For translators:
- Added:
- A few new sentences.
- Updated:
- A few sentences have had a very minor adjustment to be more in line with the rest of the WordPress/plugin environment.
- Fixed:
- One sentence was never registered correctly. It has now been included within the translations.
For developers:
- Added:
- Class overloading. Certain object actions are now handled in a correcting way to prevent insecure or deprecated API actions.
- When acquiring a class variable, a deprecation handler is loaded.
- This confirms the called variable prior to returning its value. If it’s deprecated, it can and will now let you know.
- Object cloning is now forbidden.
- There are many class constructors in this framework that contain actions. When cloning the object, all these actions will run again. Causing (although not always notable) performance and security issues.
- You can simply get the object using
the_seo_framework()
function. - Cloning will result in a fatal error.
- Object wakeup is now forbidden.
- From this update the framework makes use of
serialize()
for query caching. Although convinient, this can cause security issues. - The security issues are eliminated by disabling the method
__wakeup()
through visibility changes. - Waking up the class will result in a fatal error.
- From this update the framework makes use of
- Inaccessible method calling is now handled with an error.
- You can access every public function through
the_seo_framework()
function object. - If, for any reason, a method has been removed, the call will not emit a fatal error, but instead will output a notice.
- As this is becoming a huge project in a rapid pace, it’s perfectly understandable not every developer is up-to-date with the latest changes.
- This will also make sure your site will stay accessible when, for example, an extension or plugin update causes an incompatibility within The SEO Framework.
- You can access every public function through
- When acquiring a class variable, a deprecation handler is loaded.
- Function
the_seo_framework_update_option()
, this allows you to update options remotely. - Function
the_seo_framework_options_page_slug()
, this allows you to hook into the SEO settings page. - Method
AutoDescription_Query::get_the_real_admin_ID()
, this always runs withinAutoDescription_Query::get_the_real_ID()
when in admin. - Method
AutoDescription_Sanitize::verify_seo_settings_nonce()
, returns true when SEO settings nonce has been verified. Always use this if you want to inject custom settings. - The debugger now shows Page and Paged Query variable output.
- The debugger now shows Globals
multipage
andnumpages
variable output. - CDATA array (JavaScript)
autodescriptionL10n
now contains a nonce string for AJAX requests, accessible through (JavaScript)autodescriptionL10n.nonce
or (JavaScript)autodescriptionL10n['nonce']
and (PHP)check_ajax_referer( 'autodescription-ajax-nonce', 'nonce' );
. - Function
the_seo_framework_class()
, this returns The SEO Framework’s cached class name so you can compare instances. - Method
AutoDescription_Core::gmt2date()
, converts GMT time/date to said format.- Expects
AutoDescription_Core::set_timezone()
to be run prior to output. This function will set the timezone of PHP from WordPress’ settings. - Note: Always use `AutoDescription_Core::reset_timezone()“ as other themes or plugins might interact with time to prevent conflicts or unexpected behavior.
- Expects
- Class overloading. Certain object actions are now handled in a correcting way to prevent insecure or deprecated API actions.
- Improved:
- Class contents
AutoDescription_Query
are now reworked to be much more effecient and predictable. - Methods within
AutoDescription_Query
have been re-evaluated whether they use the WordPress query cache. If that holds true, the query object cache has been omitted from the said method. - Reduced plugin memory usage by 5% on the front-end.
- Shortened the transient name for the LD+Json output. This ensures high post ID number transients are working correctly on old WordPress database versions.
- This plugin has once more been profiled with xDebug to ensure the highest performance and eliminate culprits, even without Opcode Caching.
- Method that alter the term data on request will no longer run if the term data has been updated to WordPress 4.4 standards. The affected methods are:
AutoDescription_TermData::get_term_filter()
AutoDescription_TermData::get_terms_filter()
AutoDescription_TermData::taxonomy_seo_save()
AutoDescription_TermData::term_meta_delete()
AutoDescription_Query::get_the_real_ID()
processing time has been significantly reduced within the admin area.- The theme doing it right transient has been changed into a permanent transient, this means it’s autoloaded with all other options. This transient acts like an option and is flushed on theme change.
- This transient is flushed on theme switch.
- Since this version, this transient is flushed on theme update as well.
- WordPress VIP coding standards, including:
- External pinging URLs are now cleaned prior to sending the request.
- Sitemaps query objects are now being sent through
WP_Query
, rather than get_posts().- Sitemaps post queries are now suppressing filters.
- Translation strings are sanitatized when needed.
- Included better validation of superglobals.
- Better PHP 5.3 compatibility has been introduces on URL parsing.
- Increased usage of the WordPress core caching system so themes and other plugins can benefit from earlier calls.
- This reduces memory usage and increases overal performance. Although not directly notable.
- Transient and Object cache key generation based on type request now run earlier and bypass the static cache for improved performance and reduced memory heap size.
- Method
AutoDescription_DoingItRight::init_columns_ajax()
now only runs on the applicable AJAX action, right before the tag is output. Instead ofadmin_init
. - Method
AutoDescription_DoingItRight::init_columns_ajax()
now adapts its capability check towards WordPress Core filters. - Class autoloading support. Because of this, one class filenames have been changed to ease the autoload flow. This is:
admininit.class.php
is nowadmin-init.class.php
. That’s it!- Note that autoloading, although now supported, is not implemented as it’s not benefactory in terms of performance.
- (JavaScript) The placeholder variables are no longer escaped multiple times. Instead they’re converted to
jQuery text()
so they can’t run code anymore. - The LD+JSon breadcrumbs now uses WordPress core cache to fetch the terms instead of a database query. Gaining 4x to 7x performance which also makes sure themes and widgets can use these findings.
- Method
AutoDescription_Core::generate_dismissible_notice()
has been modified:- It can now escape all input.
- It can now show an icon in front of it depending on the notice type.
- It has two new parameters:
(bool) $a11y
, default true. Settings this to false will prevent adding accessibility icons in front of the notice.(bool) $escape
, default true. Setting this to false will prevent escaping the output.
- Method
AutoDescription_Generate_Description::add_description_additions()
has changed:- The cache is now removed. This means the filter can now be freely used depending on the post parameters.
- This fixes a bug when using manual excerpts.
- This fixes potential bugs with the filter and upcoming extensions or alterations.
- It will no longer check for an post excerpt. This is now done in place where applicable.
- The cache is now removed. This means the filter can now be freely used depending on the post parameters.
- Class contents
- Changed:
- Variable ‘AutoDescription_Siteoptions::seo_settings_page_slug’ is now publicly accessible. Making it easier to add submenu items.
- All class
AutoDescription_Metaboxes
metabox output function parameters have been shifted by one to the right to conform to theadd_metabox()
function return arguments. The first parameter is now used for the (unavailable and unused) post object. The second must be an array. This change affects the following methods:AutoDescription_Metaboxes::title_metabox()
AutoDescription_Metaboxes::description_metabox()
AutoDescription_Metaboxes::homepage_metabox()
AutoDescription_Metaboxes::social_metabox()
AutoDescription_Metaboxes::knowledge_metabox()
AutoDescription_Metaboxes::schema_metabox()
AutoDescription_Metaboxes::robots_metabox()
AutoDescription_Metaboxes::webmaster_metabox()
AutoDescription_Metaboxes::sitemaps_metabox()
AutoDescription_Metaboxes::feed_metabox()
- All class
AutoDescription_Metaboxes
metabox output functions have been put into “views”. These view files are included upon calling them. The files that are attached can only be used within the plugin scope. This massively reduces the plugin memory overhead. - A few class
AutoDescription_Debug
output functions have been put into “views”, for the same reason as above. - Method
AutoDescription_TermData::get_term_data()
no longer returnsnull
on author request. - Method
AutoDescription_Query::get_the_real_ID()
no longer falls back toget_the_ID()
asget_queried_object_id()
covers that already.- Note: This plugin shouldn’t run within the loop on the front end. Nor should that function. It’s completely cached the first time it runs (and when The SEO Framework caching engine is enabled).
- Note: That function however does run within the loop in the admin area. Therefore it will directly return method
AutoDescription_Query::get_the_real_admin_ID()
when called in the admin area.
- Method
AutoDescription_Generate::get_separator()
‘s second parameter (whether to escape the output) now defaults to true instead of false. - Method
AutoDescription_Adminpages::make_checkbox()
now has gained an extra parameter to determine whether to escape the label and description prior to outputting. Defaults to true. - Method
AutoDescription_Generate::generate_home_page_description()
now has gained an extra parameter whether to escape the description. Defaults to true. - Method
AutoDescription_Generate_Url::get_relative_term_url()
now adds the home URL directory (if any) to the URL prior to making it relative. Preventing directory installation errors. - Method
AutoDescription_Admin_Init::the_counter_visualized()
has been renamed toAutoDescription_Admin_Init::wp_ajax_update_counter_type()
. Without deprecation as it’s marked private. - Filtering
pre_get_posts
for excluding search ID’s has been moved up by tenfold. From 999 to 9999. - All CSS class prefixes have been set to
tsf
, which were priorautodescription
, ‘ad’, ‘theseoframework’,seoframework
or none at all. - Method
AutoDescription_Admin_Init::is_menu_page()
has been slightly adjusted:- It no longer checks for page id’s on the first parameter, but only for page hooks.
- It now checks for page id’s on the second parameter.
- It has been moved to class
AutoDescription_Query
. So it’s nowAutoDescription_Query::is_menu_page()
.
- Theme “doing it wrong” title output is now always notified to the caches, even if it’s “doing it right” the next time.
- Fixed:
- Function
the_seo_framework_dot_version()
now works as intended. - Method
AutoDescription_Query::is_single()
first parameter can now be an array without crashing the site. - Deprecated functions from 2.6.1 and onwards had their version and replacement notification switched. This has been fixed.
- Try-hard hackers will now no longer cause otherwise inevitable fatal errors to pop up in your error log.
- Function
- Removed:
- Unused network admin methods. Network admin settings constants and filters are held intact for the future. The related changes are listed below.
- Method
AutoDescription_Adminpages::add_network_menu_link()
, without deprecation. - Method
AutoDescription_Adminpages::network_admin()
, without deprecation. - Method
AutoDescription_Adminpages::get_field_value_network()
, without deprecation. - Public var
AutoDescription_Adminpages::network_pagehook
, without deprecation.
- Method
- Method
AutoDescription_Render::favicon()
, as it was unused. Without deprecation notice, as it was marked private. - All deprecated class methods that have been deprecated prior to version 2.5.0 of The SEO Framework. These class methods include:
autodescription_get_option()
enqueue_javascript()
enqueue_css()
fetch_sitemap_transient_name()
delete_sitemap_transient_post()
autodescription_version()
scripts()
setup_transient_names_init()
- Method
AutoDescription_TermData::init_term_filters()
, without deprecation as it was marked private. - Method
AutoDescription_Core::in_array()
, as it is no longer of use. - An useless easter egg in order to clean up code.
- (JavaScript) method
autodescription.escapeTags()
as it’s no longer used internally. - PHP Compatibility functions that are also in WordPress core below version 3.9, this includes:
mb_substr
with its related function_mb_substr
.
- Unused network admin methods. Network admin settings constants and filters are held intact for the future. The related changes are listed below.
- Deprecated:
AutoDescription_Metaboxes::homepage_metabox_general()
, useAutoDescription_Metaboxes::homepage_metabox_general_tab()
instead.AutoDescription_Metaboxes::homepage_metabox_additions()
, useAutoDescription_Metaboxes::homepage_metabox_additions_tab()
instead.AutoDescription_Metaboxes::homepage_metabox_robots()
, useAutoDescription_Metaboxes::homepage_metabox_robots_tab()
instead.AutoDescription_Transients::delete_auto_description_blog_transient()
, useAutoDescription_Metaboxes::delete_auto_description_frontpage_transient()
instead.AutoDescription_Search::exclude_search_ids()
, useAutoDescription_Search::get_excludeded_search_ids()
instead.tsf_get_option()
, usethe_seo_framework_get_option()
instead.tsf_options_pagehook()
, usethe_seo_framework_options_pagehook()
instead.tsf_wp_version()
, useAutoDescription_Detect::wp_version()
instead.
- Action notes:
- Added:
the_seo_framework_upgraded
, Runs once after the plugin has finished upgrading. Only on WordPress 4.4 and later.
- Added:
- Filter notes:
- Added:
(string) the_seo_framework_term_options
, the WordPress 4.4+ metadata option key name.(string) the_seo_framework_user_options
, the User SEO metadata option key name.(string) the_seo_framework_ld_json_breadcrumb_image
, the breadcrumb image. Supplies three parameters.(string) the_seo_framework_ld_json_search_url
, the LD+JSON search URL without search query parameters.
- Changed:
(string) the_seo_framework_description_output
, first parameter now contains expected output.(string) the_seo_framework_ogdescription_output
, first parameter now contains expected output.(string) the_seo_framework_oglocale_output
, first parameter now contains expected output.(string) the_seo_framework_ogtitle_output
, first parameter now contains expected output.(string) the_seo_framework_ogtype_output
, first parameter now contains expected output.(string) the_seo_framework_ogimage_output
, first parameter now contains expected output.(string) the_seo_framework_ogsitename_output
, first parameter now contains expected output.(string) the_seo_framework_twittercard_output
, first parameter now contains expected output.(string) the_seo_framework_twittersite_output
, first parameter now contains expected output.(string) the_seo_framework_twittercreator_output
, first parameter now contains expected output.(string) the_seo_framework_twittertitle_output
, first parameter now contains expected output.(string) the_seo_framework_twitterdescription_output
, first parameter now contains expected output.(string) the_seo_framework_twitterimage_output
, first parameter now contains expected output.(string) the_seo_framework_facebookauthor_output
, first parameter now contains expected output.(string) the_seo_framework_facebookpublisher_output
, first parameter now contains expected output.(string) the_seo_framework_facebookappid_output
, first parameter now contains expected output.(string) the_seo_framework_publishedtime_output
, first parameter now contains expected output.(string) the_seo_framework_modifiedtime_output
, first parameter now contains expected output.
- Deprecated:
(bool) the_seo_framework_output_canonical
, use(string) the_seo_framework_rel_canonical_output
instead. Return empty to achieve the same results.
- Added:
- Constant notes:
- Added:
(string) THE_SEO_FRAMEWORK_DB_VERSION
(string) THE_SEO_FRAMEWORK_DIR_PATH_VIEWS
(string) THE_SEO_FRAMEWORK_TERM_OPTIONS
(string) THE_SEO_FRAMEWORK_USER_OPTIONS
- Added:
- Notes:
- The SEO Framework settings page now has the slug
theseoframework-settings
instead ofautodescription-settings
. Use provided functions and variables in theoptionsapi.php
file to determine this state. - Cleaned up code. A whole lot.
- The SEO Framework settings page now has the slug
Planned for future releases:
Some features or improvements didn’t make it in this update. The following changes are planned for future updates.
- Will Add:
- The sitemap will also flush when changing the Site URL in the General Settings of WordPress Core.
- A general metabox will be added, which will contain timestamp output settings, sitename settings and more.
- A new filter for initial SEO Settings metaboxes order.
- A notification that the robots.txt file can’t be output under very specific subdirectory circumstances and possibly added behavior.
- A notification that an actual robots.txt file has been found in the website’s root folder (and link to it).
- Author SEO will be placed into an extension. Basic functionality will be provided free of charge.
- Tabbed in-post metabox with social settings will be made available for extensions to use.
- Canonical URL SEO settings, like schemes (http/https) and more.
- SEO Bar settings (output) will be added.
- More title settings are planned within the on-page SEO settings.
- Will improve:
- The option merging functionality introduced in 2.6.0 will be transformed into the plugin upgrade functionality introduced in 2.7.0.
- The 2.7.0 way is a more convinient and faster method of upgrading data.
- The title example will show an active post.
- The option merging functionality introduced in 2.6.0 will be transformed into the plugin upgrade functionality introduced in 2.7.0.
- Will Change:
- The settings metaboxes order will be reset. This ensures that the General Settings are shown first after updating.
- Will Fix:
(string) the_seo_framework_site_options
will no longer negatively affect the JavaScript and CSS behavior.- Instead, the option propagates through JavaScript CDATA and additional classnames have been added to prevent CSS conflict.