Version Description
In this update, we addressed a few issues our amazing users helped investigate. With that, we implemented better bbPress title support, and fixed a bug regarding WooCommerce and term-ID collisions.
We also increased the entropy for generating object caching keys, addressed some translation and RTL errors, and added a few new filters.
Download this release
Release Info
Developer | Cybr |
Plugin | The SEO Framework |
Version | 4.0.6 |
Comparing to | |
See all releases |
Code changes from version 4.0.5 to 4.0.6
- autodescription.php +2 -2
- bootstrap/upgrade.php +4 -0
- inc/classes/admin-init.class.php +5 -3
- inc/classes/builders/scripts.class.php +2 -5
- inc/classes/builders/seobar-page.class.php +2 -2
- inc/classes/builders/seobar-term.class.php +2 -2
- inc/classes/builders/seobar.class.php +1 -1
- inc/classes/cache.class.php +9 -9
- inc/classes/core.class.php +13 -12
- inc/classes/debug.class.php +4 -1
- inc/classes/deprecated.class.php +2 -3
- inc/classes/detect.class.php +44 -19
- inc/classes/generate-description.class.php +25 -9
- inc/classes/generate-image.class.php +1 -2
- inc/classes/generate-title.class.php +6 -0
- inc/classes/interpreters/seobar.class.php +1 -1
- inc/classes/post-data.class.php +2 -4
- inc/classes/query.class.php +2 -0
- inc/compat/plugin-bbpress.php +196 -0
- inc/compat/plugin-woocommerce.php +0 -2
- inc/views/admin/metaboxes/robots-metabox.php +7 -1
- inc/views/admin/metaboxes/social-metabox.php +8 -6
- inc/views/admin/metaboxes/title-metabox.php +2 -2
- inc/views/admin/seo-settings-columns.php +1 -2
- inc/views/debug/output.php +3 -3
- inc/views/sitemap/xml-sitemap.php +2 -0
- language/autodescription.pot +161 -339
- lib/js/settings.js +5 -8
- lib/js/settings.min.js +1 -1
- lib/js/title.js +23 -5
- lib/js/title.min.js +1 -1
- readme.txt +11 -4
autodescription.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
* Plugin Name: The SEO Framework
|
4 |
* Plugin URI: https://theseoframework.com/
|
5 |
* Description: An automated, advanced, accessible, unbranded and extremely fast SEO solution for your WordPress website.
|
6 |
-
* Version: 4.0.
|
7 |
* Author: The SEO Framework Team
|
8 |
* Author URI: https://theseoframework.com/
|
9 |
* License: GPLv3
|
@@ -64,7 +64,7 @@ defined( 'ABSPATH' ) or die;
|
|
64 |
*
|
65 |
* @since 2.3.5
|
66 |
*/
|
67 |
-
define( 'THE_SEO_FRAMEWORK_VERSION', '4.0.
|
68 |
|
69 |
/**
|
70 |
* The plugin Database version.
|
3 |
* Plugin Name: The SEO Framework
|
4 |
* Plugin URI: https://theseoframework.com/
|
5 |
* Description: An automated, advanced, accessible, unbranded and extremely fast SEO solution for your WordPress website.
|
6 |
+
* Version: 4.0.6
|
7 |
* Author: The SEO Framework Team
|
8 |
* Author URI: https://theseoframework.com/
|
9 |
* License: GPLv3
|
64 |
*
|
65 |
* @since 2.3.5
|
66 |
*/
|
67 |
+
define( 'THE_SEO_FRAMEWORK_VERSION', '4.0.6' );
|
68 |
|
69 |
/**
|
70 |
* The plugin Database version.
|
bootstrap/upgrade.php
CHANGED
@@ -106,6 +106,7 @@ function _do_upgrade() {
|
|
106 |
}
|
107 |
|
108 |
// Check if upgrade is locked. Otherwise, lock it.
|
|
|
109 |
if ( \get_transient( 'tsf_upgrade_lock' ) ) return;
|
110 |
|
111 |
$timeout = 5 * MINUTE_IN_SECONDS;
|
@@ -240,6 +241,9 @@ function _prepare_upgrade_notice() {
|
|
240 |
* Outputs "your site has been upgraded" notification to applicable plugin users on upgrade.
|
241 |
*
|
242 |
* @since 3.0.6
|
|
|
|
|
|
|
243 |
*/
|
244 |
function _do_upgrade_notice() {
|
245 |
|
106 |
}
|
107 |
|
108 |
// Check if upgrade is locked. Otherwise, lock it.
|
109 |
+
// TODO send out an admin notice, that informs the user the upgrader is running in the background for X seconds?
|
110 |
if ( \get_transient( 'tsf_upgrade_lock' ) ) return;
|
111 |
|
112 |
$timeout = 5 * MINUTE_IN_SECONDS;
|
241 |
* Outputs "your site has been upgraded" notification to applicable plugin users on upgrade.
|
242 |
*
|
243 |
* @since 3.0.6
|
244 |
+
* @TODO Add browser cache flush notice? Or set a pragma/cache-control header?
|
245 |
+
* Users that remove query strings (thanks to YSlow) are to blame, though.
|
246 |
+
* @link <https://wordpress.org/support/topic/4-0-admin-interface-not-loading-correctly/>
|
247 |
*/
|
248 |
function _do_upgrade_notice() {
|
249 |
|
inc/classes/admin-init.class.php
CHANGED
@@ -365,7 +365,7 @@ class Admin_Init extends Init {
|
|
365 |
* for alerts, etc.
|
366 |
*
|
367 |
* @since 2.2.2
|
368 |
-
* @since 2.9.2
|
369 |
* @since 2.9.3 : 1. Query arguments work again (regression 2.9.2).
|
370 |
* 2. Now only accepts http and https protocols.
|
371 |
*
|
@@ -379,7 +379,9 @@ class Admin_Init extends Init {
|
|
379 |
if ( empty( $page ) )
|
380 |
return;
|
381 |
|
382 |
-
|
|
|
|
|
383 |
|
384 |
foreach ( $query_args as $key => $value ) {
|
385 |
if ( empty( $key ) || empty( $value ) )
|
@@ -397,7 +399,7 @@ class Admin_Init extends Init {
|
|
397 |
* 1. Change 302 to 500 if you wish to test headers.
|
398 |
* 2. Also force handle_admin_redirect_error() to run.
|
399 |
*/
|
400 |
-
\wp_safe_redirect( $target, 302 );
|
401 |
|
402 |
//* White screen of death for non-debugging users. Let's make it friendlier.
|
403 |
if ( $headers_sent ) {
|
365 |
* for alerts, etc.
|
366 |
*
|
367 |
* @since 2.2.2
|
368 |
+
* @since 2.9.2 Added user-friendly exception handling.
|
369 |
* @since 2.9.3 : 1. Query arguments work again (regression 2.9.2).
|
370 |
* 2. Now only accepts http and https protocols.
|
371 |
*
|
379 |
if ( empty( $page ) )
|
380 |
return;
|
381 |
|
382 |
+
// This can be empty... so $target will be empty. TODO test for $success and bail?
|
383 |
+
// Might cause security issues... we _must_ exit, always? Show warning?
|
384 |
+
$url = html_entity_decode( \menu_page_url( $page, false ) );
|
385 |
|
386 |
foreach ( $query_args as $key => $value ) {
|
387 |
if ( empty( $key ) || empty( $value ) )
|
399 |
* 1. Change 302 to 500 if you wish to test headers.
|
400 |
* 2. Also force handle_admin_redirect_error() to run.
|
401 |
*/
|
402 |
+
$success = \wp_safe_redirect( $target, 302 ); // phpcs:ignore, VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
|
403 |
|
404 |
//* White screen of death for non-debugging users. Let's make it friendlier.
|
405 |
if ( $headers_sent ) {
|
inc/classes/builders/scripts.class.php
CHANGED
@@ -250,11 +250,8 @@ final class Scripts {
|
|
250 |
public static function forward_known_script( $id, $type ) {
|
251 |
if ( ! ( static::get_status_of( $id, $type ) & static::REGISTERED ) ) {
|
252 |
foreach ( static::$scripts as $s ) {
|
253 |
-
if ( $s['id'] === $id )
|
254 |
-
|
255 |
-
static::forward_script( $s );
|
256 |
-
}
|
257 |
-
}
|
258 |
}
|
259 |
}
|
260 |
}
|
250 |
public static function forward_known_script( $id, $type ) {
|
251 |
if ( ! ( static::get_status_of( $id, $type ) & static::REGISTERED ) ) {
|
252 |
foreach ( static::$scripts as $s ) {
|
253 |
+
if ( $s['id'] === $id && $s['type'] === $type )
|
254 |
+
static::forward_script( $s );
|
|
|
|
|
|
|
255 |
}
|
256 |
}
|
257 |
}
|
inc/classes/builders/seobar-page.class.php
CHANGED
@@ -199,7 +199,7 @@ final class SeoBar_Page extends SeoBar {
|
|
199 |
];
|
200 |
|
201 |
// TODO instead of getting values from the options API, why don't we store the parameters and allow them to be modified?
|
202 |
-
// This way, we can implement AJAX SEO bar items...
|
203 |
$title_part = static::$tsf->get_filtered_raw_custom_field_title( $title_args, false );
|
204 |
|
205 |
if ( strlen( $title_part ) ) {
|
@@ -421,7 +421,7 @@ final class SeoBar_Page extends SeoBar {
|
|
421 |
];
|
422 |
|
423 |
// TODO instead of getting values from the options API, why don't we store the parameters and allow them to be modified?
|
424 |
-
// This way, we can implement AJAX SEO bar items...
|
425 |
$desc = static::$tsf->get_description_from_custom_field( $desc_args, false );
|
426 |
|
427 |
if ( strlen( $desc ) ) {
|
199 |
];
|
200 |
|
201 |
// TODO instead of getting values from the options API, why don't we store the parameters and allow them to be modified?
|
202 |
+
// This way, we can implement real-time live-edit AJAX SEO bar items...
|
203 |
$title_part = static::$tsf->get_filtered_raw_custom_field_title( $title_args, false );
|
204 |
|
205 |
if ( strlen( $title_part ) ) {
|
421 |
];
|
422 |
|
423 |
// TODO instead of getting values from the options API, why don't we store the parameters and allow them to be modified?
|
424 |
+
// This way, we can implement real-time live-edit AJAX SEO bar items...
|
425 |
$desc = static::$tsf->get_description_from_custom_field( $desc_args, false );
|
426 |
|
427 |
if ( strlen( $desc ) ) {
|
inc/classes/builders/seobar-term.class.php
CHANGED
@@ -215,7 +215,7 @@ final class SeoBar_Term extends SeoBar {
|
|
215 |
];
|
216 |
|
217 |
// TODO instead of getting values from the options API, why don't we store the parameters and allow them to be modified?
|
218 |
-
// This way, we can implement AJAX SEO bar items...
|
219 |
$title_part = static::$tsf->get_filtered_raw_custom_field_title( $title_args, false );
|
220 |
|
221 |
if ( strlen( $title_part ) ) {
|
@@ -410,7 +410,7 @@ final class SeoBar_Term extends SeoBar {
|
|
410 |
];
|
411 |
|
412 |
// TODO instead of getting values from the options API, why don't we store the parameters and allow them to be modified?
|
413 |
-
// This way, we can implement AJAX SEO bar items...
|
414 |
$desc = static::$tsf->get_description_from_custom_field( $desc_args, false );
|
415 |
|
416 |
if ( strlen( $desc ) ) {
|
215 |
];
|
216 |
|
217 |
// TODO instead of getting values from the options API, why don't we store the parameters and allow them to be modified?
|
218 |
+
// This way, we can implement real-time live-edit AJAX SEO bar items...
|
219 |
$title_part = static::$tsf->get_filtered_raw_custom_field_title( $title_args, false );
|
220 |
|
221 |
if ( strlen( $title_part ) ) {
|
410 |
];
|
411 |
|
412 |
// TODO instead of getting values from the options API, why don't we store the parameters and allow them to be modified?
|
413 |
+
// This way, we can implement real-time live-edit AJAX SEO bar items...
|
414 |
$desc = static::$tsf->get_description_from_custom_field( $desc_args, false );
|
415 |
|
416 |
if ( strlen( $desc ) ) {
|
inc/classes/builders/seobar.class.php
CHANGED
@@ -36,7 +36,7 @@ defined( 'THE_SEO_FRAMEWORK_PRESENT' ) or die;
|
|
36 |
* @access private
|
37 |
* Use \The_SEO_Framework\Interpreters\SeoBar::generate_bar() instead.
|
38 |
* @internal
|
39 |
-
* @abstract
|
40 |
* @see \The_SEO_Framework\Interpreters\SeoBar
|
41 |
*/
|
42 |
abstract class SeoBar {
|
36 |
* @access private
|
37 |
* Use \The_SEO_Framework\Interpreters\SeoBar::generate_bar() instead.
|
38 |
* @internal
|
39 |
+
* @abstract Implements test_{$*}, see property $tests and method `_run_test()` for what * may be.
|
40 |
* @see \The_SEO_Framework\Interpreters\SeoBar
|
41 |
*/
|
42 |
abstract class SeoBar {
|
inc/classes/cache.class.php
CHANGED
@@ -600,9 +600,8 @@ class Cache extends Site_Options {
|
|
600 |
break;
|
601 |
endswitch;
|
602 |
} elseif ( $this->is_search() ) {
|
603 |
-
//* Remove spaces
|
604 |
-
|
605 |
-
$query = \esc_sql( substr( str_replace( ' ', '', \get_search_query( true ) ), 0, 10 ) );
|
606 |
|
607 |
//* Temporarily disable caches to prevent database spam.
|
608 |
$this->the_seo_framework_use_transients = false;
|
@@ -708,6 +707,7 @@ class Cache extends Site_Options {
|
|
708 |
* Generates Cache key for taxonomical archives.
|
709 |
*
|
710 |
* @since 2.6.0
|
|
|
711 |
*
|
712 |
* @param int $page_id The taxonomy or page ID.
|
713 |
* @param string $taxonomy The taxonomy name.
|
@@ -721,8 +721,8 @@ class Cache extends Site_Options {
|
|
721 |
$taxonomy_name = explode( '_', $taxonomy );
|
722 |
if ( is_array( $taxonomy_name ) ) {
|
723 |
foreach ( $taxonomy_name as $name ) {
|
724 |
-
if (
|
725 |
-
$the_id .=
|
726 |
} else {
|
727 |
$the_id = $name . '_';
|
728 |
}
|
@@ -731,14 +731,14 @@ class Cache extends Site_Options {
|
|
731 |
}
|
732 |
|
733 |
if ( ! $the_id ) {
|
734 |
-
if (
|
735 |
-
$the_id =
|
736 |
} else {
|
737 |
-
$the_id =
|
738 |
}
|
739 |
}
|
740 |
|
741 |
-
$the_id = strtolower( $the_id );
|
742 |
|
743 |
//* Put it all together.
|
744 |
return rtrim( $the_id, '_' ) . '_' . $page_id;
|
600 |
break;
|
601 |
endswitch;
|
602 |
} elseif ( $this->is_search() ) {
|
603 |
+
//* Remove spaces, jumble with md5, Limit to 12 chars.
|
604 |
+
$query = \esc_sql( substr( md5( str_replace( ' ', '', \get_search_query( true ) ) ), 0, 12 ) );
|
|
|
605 |
|
606 |
//* Temporarily disable caches to prevent database spam.
|
607 |
$this->the_seo_framework_use_transients = false;
|
707 |
* Generates Cache key for taxonomical archives.
|
708 |
*
|
709 |
* @since 2.6.0
|
710 |
+
* @since 4.0.6 No longer uses mb encoding functions, speeding up this method.
|
711 |
*
|
712 |
* @param int $page_id The taxonomy or page ID.
|
713 |
* @param string $taxonomy The taxonomy name.
|
721 |
$taxonomy_name = explode( '_', $taxonomy );
|
722 |
if ( is_array( $taxonomy_name ) ) {
|
723 |
foreach ( $taxonomy_name as $name ) {
|
724 |
+
if ( strlen( $name ) >= 3 ) {
|
725 |
+
$the_id .= substr( $name, 0, 3 ) . '_';
|
726 |
} else {
|
727 |
$the_id = $name . '_';
|
728 |
}
|
731 |
}
|
732 |
|
733 |
if ( ! $the_id ) {
|
734 |
+
if ( strlen( $taxonomy ) >= 6 ) {
|
735 |
+
$the_id = substr( $taxonomy, 0, 6 );
|
736 |
} else {
|
737 |
+
$the_id = $taxonomy;
|
738 |
}
|
739 |
}
|
740 |
|
741 |
+
$the_id = strtolower( \esc_sql( $the_id ) );
|
742 |
|
743 |
//* Put it all together.
|
744 |
return rtrim( $the_id, '_' ) . '_' . $page_id;
|
inc/classes/core.class.php
CHANGED
@@ -221,16 +221,16 @@ class Core {
|
|
221 |
);
|
222 |
}
|
223 |
|
224 |
-
$tsf_links['about'] = sprintf(
|
225 |
-
'<a href="%s" rel="noreferrer noopener" target="_blank">%s</a>',
|
226 |
-
'https://theseoframework.com/about-us/',
|
227 |
-
\esc_html_x( 'About', 'About us', 'autodescription' )
|
228 |
-
);
|
229 |
$tsf_links['tsfem'] = sprintf(
|
230 |
'<a href="%s" rel="noreferrer noopener" target="_blank">%s</a>',
|
231 |
'https://theseoframework.com/extensions/',
|
232 |
\esc_html_x( 'Extensions', 'Plugin extensions', 'autodescription' )
|
233 |
);
|
|
|
|
|
|
|
|
|
|
|
234 |
|
235 |
return array_merge( $tsf_links, $links );
|
236 |
}
|
@@ -794,11 +794,10 @@ class Core {
|
|
794 |
*/
|
795 |
public function convert_markdown( $text, $convert = [], $args = [] ) {
|
796 |
|
797 |
-
preprocess
|
798 |
-
|
799 |
-
|
800 |
-
|
801 |
-
}
|
802 |
|
803 |
// You need 3 chars to make a markdown: *m*
|
804 |
if ( strlen( $text ) < 3 )
|
@@ -880,9 +879,11 @@ class Core {
|
|
880 |
case 'h3':
|
881 |
case 'h2':
|
882 |
case 'h1':
|
883 |
-
$amount = filter_var( $type, FILTER_SANITIZE_NUMBER_INT );
|
884 |
//* Considers word non-boundary. @TODO consider removing this?
|
885 |
-
$expression = sprintf(
|
|
|
|
|
|
|
886 |
|
887 |
$count = preg_match_all( $expression, $text, $matches, PREG_PATTERN_ORDER );
|
888 |
|
221 |
);
|
222 |
}
|
223 |
|
|
|
|
|
|
|
|
|
|
|
224 |
$tsf_links['tsfem'] = sprintf(
|
225 |
'<a href="%s" rel="noreferrer noopener" target="_blank">%s</a>',
|
226 |
'https://theseoframework.com/extensions/',
|
227 |
\esc_html_x( 'Extensions', 'Plugin extensions', 'autodescription' )
|
228 |
);
|
229 |
+
$tsf_links['pricing'] = sprintf(
|
230 |
+
'<a href="%s" rel="noreferrer noopener" target="_blank">%s</a>',
|
231 |
+
'https://theseoframework.com/pricing/',
|
232 |
+
\esc_html_x( 'Pricing', 'Plugin pricing', 'autodescription' )
|
233 |
+
);
|
234 |
|
235 |
return array_merge( $tsf_links, $links );
|
236 |
}
|
794 |
*/
|
795 |
public function convert_markdown( $text, $convert = [], $args = [] ) {
|
796 |
|
797 |
+
// preprocess
|
798 |
+
$text = str_replace( "\r\n", "\n", $text );
|
799 |
+
$text = str_replace( "\t", ' ', $text );
|
800 |
+
$text = trim( $text );
|
|
|
801 |
|
802 |
// You need 3 chars to make a markdown: *m*
|
803 |
if ( strlen( $text ) < 3 )
|
879 |
case 'h3':
|
880 |
case 'h2':
|
881 |
case 'h1':
|
|
|
882 |
//* Considers word non-boundary. @TODO consider removing this?
|
883 |
+
$expression = sprintf(
|
884 |
+
'/(?:\={%1$d})\B([^\={\%1$s}]+)\B(?:\={%1$d})/',
|
885 |
+
filter_var( $type, FILTER_SANITIZE_NUMBER_INT )
|
886 |
+
);
|
887 |
|
888 |
$count = preg_match_all( $expression, $text, $matches, PREG_PATTERN_ORDER );
|
889 |
|
inc/classes/debug.class.php
CHANGED
@@ -233,7 +233,6 @@ final class Debug {
|
|
233 |
* @since 2.8.0 1. Now escapes all parameters.
|
234 |
* 2. Removed check for gettext.
|
235 |
* @access private
|
236 |
-
* @todo Escape translation string.
|
237 |
*
|
238 |
* @param string $p_or_m The Property or Method.
|
239 |
* @param string $message A message explaining what has been done incorrectly.
|
@@ -583,6 +582,7 @@ final class Debug {
|
|
583 |
*
|
584 |
* @since 2.6.6
|
585 |
* @since 4.0.0 Cleaned up global callers; only use TSF methods.
|
|
|
586 |
*
|
587 |
* @param string $cache_version 'yup' or 'nope'
|
588 |
* @return string Wrapped Query State debug output.
|
@@ -638,10 +638,13 @@ final class Debug {
|
|
638 |
$is_singular_archive = $tsf->is_singular_archive();
|
639 |
$is_term_meta_capable = $tsf->is_term_meta_capable();
|
640 |
$is_post_type_supported = $tsf->is_post_type_supported();
|
|
|
641 |
$get_post_type = \get_post_type();
|
642 |
$get_post_type_real_ID = $tsf->get_post_type_real_ID();
|
643 |
$admin_post_type = $tsf->get_admin_post_type();
|
644 |
$current_taxonomy = $tsf->get_current_taxonomy();
|
|
|
|
|
645 |
$is_post_type_archive = \is_post_type_archive();
|
646 |
$is_protected = $tsf->is_protected( $page_id );
|
647 |
// phpcs:enable, WordPress.NamingConventions.ValidVariableName.VariableNotSnakeCase -- Not this file's issue.
|
233 |
* @since 2.8.0 1. Now escapes all parameters.
|
234 |
* 2. Removed check for gettext.
|
235 |
* @access private
|
|
|
236 |
*
|
237 |
* @param string $p_or_m The Property or Method.
|
238 |
* @param string $message A message explaining what has been done incorrectly.
|
582 |
*
|
583 |
* @since 2.6.6
|
584 |
* @since 4.0.0 Cleaned up global callers; only use TSF methods.
|
585 |
+
* @since 4.1.0 Added more debugging variables added since 4.0.0.
|
586 |
*
|
587 |
* @param string $cache_version 'yup' or 'nope'
|
588 |
* @return string Wrapped Query State debug output.
|
638 |
$is_singular_archive = $tsf->is_singular_archive();
|
639 |
$is_term_meta_capable = $tsf->is_term_meta_capable();
|
640 |
$is_post_type_supported = $tsf->is_post_type_supported();
|
641 |
+
$is_taxonomy_supported = $tsf->is_taxonomy_supported();
|
642 |
$get_post_type = \get_post_type();
|
643 |
$get_post_type_real_ID = $tsf->get_post_type_real_ID();
|
644 |
$admin_post_type = $tsf->get_admin_post_type();
|
645 |
$current_taxonomy = $tsf->get_current_taxonomy();
|
646 |
+
$is_taxonomy_disabled = $tsf->is_taxonomy_disabled();
|
647 |
+
$is_taxonomy_public = $tsf->is_taxonomy_public();
|
648 |
$is_post_type_archive = \is_post_type_archive();
|
649 |
$is_protected = $tsf->is_protected( $page_id );
|
650 |
// phpcs:enable, WordPress.NamingConventions.ValidVariableName.VariableNotSnakeCase -- Not this file's issue.
|
inc/classes/deprecated.class.php
CHANGED
@@ -153,7 +153,7 @@ final class Deprecated {
|
|
153 |
public function get_seo_bar( $column, $post_id, $tax_id ) {
|
154 |
|
155 |
$tsf = \the_seo_framework();
|
156 |
-
$tsf->_deprecated_function( 'the_seo_framework()->
|
157 |
|
158 |
$type = \get_post_type( $post_id );
|
159 |
|
@@ -553,8 +553,7 @@ final class Deprecated {
|
|
553 |
* Returns image URL suitable for Schema items.
|
554 |
*
|
555 |
* These are images that are strictly assigned to the Post or Page, fallbacks are omitted.
|
556 |
-
* Themes should
|
557 |
-
* compliment these.
|
558 |
* If that's not even true, then I don't know what happens. But then you're
|
559 |
* in a grey area... @TODO make images optional for Schema?
|
560 |
*
|
153 |
public function get_seo_bar( $column, $post_id, $tax_id ) {
|
154 |
|
155 |
$tsf = \the_seo_framework();
|
156 |
+
$tsf->_deprecated_function( 'the_seo_framework()->get_seo_bar()', '4.0.0', 'the_seo_framework()->get_generated_seo_bar()' );
|
157 |
|
158 |
$type = \get_post_type( $post_id );
|
159 |
|
553 |
* Returns image URL suitable for Schema items.
|
554 |
*
|
555 |
* These are images that are strictly assigned to the Post or Page, fallbacks are omitted.
|
556 |
+
* Themes should complement these. If not, then Open Graph should at least complement these.
|
|
|
557 |
* If that's not even true, then I don't know what happens. But then you're
|
558 |
* in a grey area... @TODO make images optional for Schema?
|
559 |
*
|
inc/classes/detect.class.php
CHANGED
@@ -143,6 +143,7 @@ class Detect extends Render {
|
|
143 |
* @since 1.3.0
|
144 |
* @since 2.8.0 : 1. Can now check for globals.
|
145 |
* 2. Switched detection order from FAST to SLOW.
|
|
|
146 |
*
|
147 |
* @param array $plugins Array of array for constants, classes and / or functions to check for plugin existence.
|
148 |
* @return boolean True if plugin exists or false if plugin constant, class or function not detected.
|
@@ -178,7 +179,7 @@ class Detect extends Render {
|
|
178 |
//* Check for classes
|
179 |
if ( isset( $plugins['classes'] ) ) {
|
180 |
foreach ( $plugins['classes'] as $name ) {
|
181 |
-
if ( class_exists( $name ) ) {
|
182 |
return true;
|
183 |
}
|
184 |
}
|
@@ -239,16 +240,29 @@ class Detect extends Render {
|
|
239 |
* All parameters must match and return true.
|
240 |
*
|
241 |
* @since 2.5.2
|
|
|
|
|
|
|
|
|
242 |
*
|
243 |
* @param array $plugins Array of array for constants, classes and / or functions to check for plugin existence.
|
244 |
* @return bool True if ALL functions classes and constants exists or false if plugin constant, class or function not detected.
|
245 |
*/
|
246 |
public function detect_plugin_multi( array $plugins ) {
|
247 |
|
248 |
-
//* Check for
|
249 |
-
if ( isset( $plugins['
|
250 |
-
foreach ( $plugins['
|
251 |
-
if ( !
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
252 |
return false;
|
253 |
}
|
254 |
}
|
@@ -263,10 +277,10 @@ class Detect extends Render {
|
|
263 |
}
|
264 |
}
|
265 |
|
266 |
-
//* Check for
|
267 |
-
if ( isset( $plugins['
|
268 |
-
foreach ( $plugins['
|
269 |
-
if ( !
|
270 |
return false;
|
271 |
}
|
272 |
}
|
@@ -532,8 +546,8 @@ class Detect extends Render {
|
|
532 |
* - Beaver Builder by Fastline Media
|
533 |
*
|
534 |
* @since 4.0.0
|
|
|
535 |
* @staticvar bool $detected
|
536 |
-
* @TODO add filter?
|
537 |
*
|
538 |
* @return bool
|
539 |
*/
|
@@ -541,15 +555,26 @@ class Detect extends Render {
|
|
541 |
|
542 |
static $detected = null;
|
543 |
|
544 |
-
|
545 |
-
|
546 |
-
|
547 |
-
|
548 |
-
|
549 |
-
|
550 |
-
|
551 |
-
|
552 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
553 |
}
|
554 |
|
555 |
/**
|
143 |
* @since 1.3.0
|
144 |
* @since 2.8.0 : 1. Can now check for globals.
|
145 |
* 2. Switched detection order from FAST to SLOW.
|
146 |
+
* @since 4.0.6 Can no longer autoload classes.
|
147 |
*
|
148 |
* @param array $plugins Array of array for constants, classes and / or functions to check for plugin existence.
|
149 |
* @return boolean True if plugin exists or false if plugin constant, class or function not detected.
|
179 |
//* Check for classes
|
180 |
if ( isset( $plugins['classes'] ) ) {
|
181 |
foreach ( $plugins['classes'] as $name ) {
|
182 |
+
if ( class_exists( $name, false ) ) {
|
183 |
return true;
|
184 |
}
|
185 |
}
|
240 |
* All parameters must match and return true.
|
241 |
*
|
242 |
* @since 2.5.2
|
243 |
+
* @since 4.0.6 : 1. Can now check for globals.
|
244 |
+
* 2. Switched detection order from FAST to SLOW.
|
245 |
+
* 3. Can no longer autoload classes.
|
246 |
+
* This method is only used by can_i_use(), and is only effective in the Ultimate Member compat file...
|
247 |
*
|
248 |
* @param array $plugins Array of array for constants, classes and / or functions to check for plugin existence.
|
249 |
* @return bool True if ALL functions classes and constants exists or false if plugin constant, class or function not detected.
|
250 |
*/
|
251 |
public function detect_plugin_multi( array $plugins ) {
|
252 |
|
253 |
+
//* Check for globals
|
254 |
+
if ( isset( $plugins['globals'] ) ) {
|
255 |
+
foreach ( $plugins['globals'] as $name ) {
|
256 |
+
if ( ! isset( $GLOBALS[ $name ] ) ) {
|
257 |
+
return false;
|
258 |
+
}
|
259 |
+
}
|
260 |
+
}
|
261 |
+
|
262 |
+
//* Check for constants
|
263 |
+
if ( isset( $plugins['constants'] ) ) {
|
264 |
+
foreach ( $plugins['constants'] as $name ) {
|
265 |
+
if ( ! defined( $name ) ) {
|
266 |
return false;
|
267 |
}
|
268 |
}
|
277 |
}
|
278 |
}
|
279 |
|
280 |
+
//* Check for classes
|
281 |
+
if ( isset( $plugins['classes'] ) ) {
|
282 |
+
foreach ( $plugins['classes'] as $name ) {
|
283 |
+
if ( ! class_exists( $name, false ) ) {
|
284 |
return false;
|
285 |
}
|
286 |
}
|
546 |
* - Beaver Builder by Fastline Media
|
547 |
*
|
548 |
* @since 4.0.0
|
549 |
+
* @since 4.0.6 The output is now filterable.
|
550 |
* @staticvar bool $detected
|
|
|
551 |
*
|
552 |
* @return bool
|
553 |
*/
|
555 |
|
556 |
static $detected = null;
|
557 |
|
558 |
+
if ( isset( $detected ) ) return $detected;
|
559 |
+
|
560 |
+
/**
|
561 |
+
* @since 4.0.6
|
562 |
+
* @param bool $detected Whether an active page builder is detected.
|
563 |
+
* @NOTE not to be confused with `the_seo_framework_detect_page_builder`, which tests
|
564 |
+
* the page builder status for each post individually.
|
565 |
+
*/
|
566 |
+
return $detected = (bool) \apply_filters(
|
567 |
+
'the_seo_framework_page_builder_active',
|
568 |
+
$this->detect_plugin( [
|
569 |
+
'constants' => [
|
570 |
+
'ELEMENTOR_VERSION',
|
571 |
+
'ET_BUILDER_VERSION',
|
572 |
+
'WPB_VC_VERSION',
|
573 |
+
'SITEORIGIN_PANELS_VERSION',
|
574 |
+
'FL_BUILDER_VERSION',
|
575 |
+
],
|
576 |
+
] )
|
577 |
+
);
|
578 |
}
|
579 |
|
580 |
/**
|
inc/classes/generate-description.class.php
CHANGED
@@ -390,6 +390,12 @@ class Generate_Description extends Generate {
|
|
390 |
$desc = $this->get_post_meta_item( '_genesis_description' ) ?: '';
|
391 |
} elseif ( $this->is_term_meta_capable() ) {
|
392 |
$desc = $this->get_term_meta_item( 'description' ) ?: '';
|
|
|
|
|
|
|
|
|
|
|
|
|
393 |
}
|
394 |
// phpcs:enable, WordPress.WhiteSpace.PrecisionAlignment
|
395 |
|
@@ -624,10 +630,10 @@ class Generate_Description extends Generate {
|
|
624 |
return '';
|
625 |
|
626 |
if ( is_null( $term ) ) {
|
627 |
-
$
|
628 |
-
$term
|
629 |
} else {
|
630 |
-
$
|
631 |
}
|
632 |
|
633 |
/**
|
@@ -642,9 +648,7 @@ class Generate_Description extends Generate {
|
|
642 |
|
643 |
$excerpt = '';
|
644 |
|
645 |
-
if (
|
646 |
-
$excerpt = ! empty( $term->description ) ? $this->s_description_raw( $term->description ) : '';
|
647 |
-
} else {
|
648 |
if ( $this->is_category() || $this->is_tag() || $this->is_tax() ) {
|
649 |
// WordPress DOES NOT allow HTML in term descriptions, not even if you're a super-administrator.
|
650 |
// See https://wpvulndb.com/vulnerabilities/9445. We won't parse HTMl tags unless WordPress adds native support.
|
@@ -652,11 +656,23 @@ class Generate_Description extends Generate {
|
|
652 |
} elseif ( $this->is_author() ) {
|
653 |
$excerpt = $this->s_excerpt_raw( \get_the_author_meta( 'description', (int) \get_query_var( 'author' ) ) );
|
654 |
} elseif ( \is_post_type_archive() ) {
|
655 |
-
|
656 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
657 |
} else {
|
658 |
-
|
|
|
|
|
|
|
|
|
659 |
}
|
|
|
|
|
660 |
}
|
661 |
|
662 |
return $excerpt;
|
390 |
$desc = $this->get_post_meta_item( '_genesis_description' ) ?: '';
|
391 |
} elseif ( $this->is_term_meta_capable() ) {
|
392 |
$desc = $this->get_term_meta_item( 'description' ) ?: '';
|
393 |
+
} elseif ( \is_post_type_archive() ) {
|
394 |
+
/**
|
395 |
+
* @since 4.0.6
|
396 |
+
* @param string $desc The post type archive description.
|
397 |
+
*/
|
398 |
+
$desc = (string) \apply_filters( 'the_seo_framework_pta_description', '' );
|
399 |
}
|
400 |
// phpcs:enable, WordPress.WhiteSpace.PrecisionAlignment
|
401 |
|
630 |
return '';
|
631 |
|
632 |
if ( is_null( $term ) ) {
|
633 |
+
$in_the_loop = true;
|
634 |
+
$term = \get_queried_object();
|
635 |
} else {
|
636 |
+
$in_the_loop = false;
|
637 |
}
|
638 |
|
639 |
/**
|
648 |
|
649 |
$excerpt = '';
|
650 |
|
651 |
+
if ( $in_the_loop ) {
|
|
|
|
|
652 |
if ( $this->is_category() || $this->is_tag() || $this->is_tax() ) {
|
653 |
// WordPress DOES NOT allow HTML in term descriptions, not even if you're a super-administrator.
|
654 |
// See https://wpvulndb.com/vulnerabilities/9445. We won't parse HTMl tags unless WordPress adds native support.
|
656 |
} elseif ( $this->is_author() ) {
|
657 |
$excerpt = $this->s_excerpt_raw( \get_the_author_meta( 'description', (int) \get_query_var( 'author' ) ) );
|
658 |
} elseif ( \is_post_type_archive() ) {
|
659 |
+
/**
|
660 |
+
* @TODO can we even obtain anything useful ourselves?
|
661 |
+
*
|
662 |
+
* @since 4.0.6
|
663 |
+
* @param string $excerpt The archive description excerpt.
|
664 |
+
* @param mixed $term The queried object.
|
665 |
+
*/
|
666 |
+
$excerpt = (string) \apply_filters( 'the_seo_framework_pta_description_excerpt', '', $term );
|
667 |
} else {
|
668 |
+
/**
|
669 |
+
* @since 4.0.6
|
670 |
+
* @param string $excerpt The fallback archive description excerpt.
|
671 |
+
*/
|
672 |
+
$excerpt = (string) \apply_filters( 'the_seo_framework_fallback_archive_description_excerpt', '' );
|
673 |
}
|
674 |
+
} else {
|
675 |
+
$excerpt = ! empty( $term->description ) ? $this->s_description_raw( $term->description ) : '';
|
676 |
}
|
677 |
|
678 |
return $excerpt;
|
inc/classes/generate-image.class.php
CHANGED
@@ -310,7 +310,7 @@ class Generate_Image extends Generate_Url {
|
|
310 |
* boolean multi: Whether multiple images may be returned,
|
311 |
* array cbs: An array of image generation callbacks, in order of most important to least.
|
312 |
* When 'multi' (or $single input) parameter is "false", it will use the first found.
|
313 |
-
* array fallback: An array of image
|
314 |
* Only one image is obtained from the fallback, and only if the regular cbs don't
|
315 |
* return any image.
|
316 |
* }
|
@@ -417,7 +417,6 @@ class Generate_Image extends Generate_Url {
|
|
417 |
$params = $this->get_image_generation_params( $args, $context );
|
418 |
$single = $single || ! $params['multi'];
|
419 |
|
420 |
-
// TODO s_image_details() here? The cbs may be discarded, and then we won't obtain any fallbacks...
|
421 |
$details = $this->process_image_cbs( $params['cbs'], $args, $params['size'], $single )
|
422 |
?: $this->process_image_cbs( $params['fallback'], $args, $params['size'], true );
|
423 |
|
310 |
* boolean multi: Whether multiple images may be returned,
|
311 |
* array cbs: An array of image generation callbacks, in order of most important to least.
|
312 |
* When 'multi' (or $single input) parameter is "false", it will use the first found.
|
313 |
+
* array fallback: An array of image generation callbacks, in order of most important to least,
|
314 |
* Only one image is obtained from the fallback, and only if the regular cbs don't
|
315 |
* return any image.
|
316 |
* }
|
417 |
$params = $this->get_image_generation_params( $args, $context );
|
418 |
$single = $single || ! $params['multi'];
|
419 |
|
|
|
420 |
$details = $this->process_image_cbs( $params['cbs'], $args, $params['size'], $single )
|
421 |
?: $this->process_image_cbs( $params['fallback'], $args, $params['size'], true );
|
422 |
|
inc/classes/generate-title.class.php
CHANGED
@@ -512,6 +512,12 @@ class Generate_Title extends Generate_Description {
|
|
512 |
$title = $this->get_post_meta_item( '_genesis_title' ) ?: '';
|
513 |
} elseif ( $this->is_term_meta_capable() ) {
|
514 |
$title = $this->get_term_meta_item( 'doctitle' ) ?: '';
|
|
|
|
|
|
|
|
|
|
|
|
|
515 |
}
|
516 |
// phpcs:enable, WordPress.WhiteSpace.PrecisionAlignment
|
517 |
|
512 |
$title = $this->get_post_meta_item( '_genesis_title' ) ?: '';
|
513 |
} elseif ( $this->is_term_meta_capable() ) {
|
514 |
$title = $this->get_term_meta_item( 'doctitle' ) ?: '';
|
515 |
+
} elseif ( \is_post_type_archive() ) {
|
516 |
+
/**
|
517 |
+
* @since 4.0.6
|
518 |
+
* @param string $title The post type archive title.
|
519 |
+
*/
|
520 |
+
$title = (string) \apply_filters( 'the_seo_framework_pta_title', '' );
|
521 |
}
|
522 |
// phpcs:enable, WordPress.WhiteSpace.PrecisionAlignment
|
523 |
|
inc/classes/interpreters/seobar.class.php
CHANGED
@@ -29,7 +29,7 @@ defined( 'THE_SEO_FRAMEWORK_PRESENT' ) or die;
|
|
29 |
* Interprets the SEO Bar into an HTML item.
|
30 |
*
|
31 |
* @since 4.0.0
|
32 |
-
*
|
33 |
*
|
34 |
* @access public
|
35 |
* Note that you can't instance this class. Only static methods and properties are accessible.
|
29 |
* Interprets the SEO Bar into an HTML item.
|
30 |
*
|
31 |
* @since 4.0.0
|
32 |
+
* @see \the_seo_framework()->get_generated_seo_bar( $args ) for easy access.
|
33 |
*
|
34 |
* @access public
|
35 |
* Note that you can't instance this class. Only static methods and properties are accessible.
|
inc/classes/post-data.class.php
CHANGED
@@ -162,7 +162,7 @@ class Post_Data extends Detect {
|
|
162 |
* @param \WP_Post $post Post object.
|
163 |
*/
|
164 |
return (array) \apply_filters_ref_array(
|
165 |
-
'the_seo_framework_inpost_seo_save_defaults', // TODO rename to the_seo_framework_post_meta_defaults
|
166 |
[
|
167 |
$this->get_unfiltered_post_meta_defaults(),
|
168 |
$post_id,
|
@@ -576,9 +576,7 @@ class Post_Data extends Detect {
|
|
576 |
* Fetches Post content.
|
577 |
*
|
578 |
* @since 2.6.0
|
579 |
-
* @since 3.1.0
|
580 |
-
* 2. No longer used internally.
|
581 |
-
* @todo deprecate, unused.
|
582 |
*
|
583 |
* @param int $id The post ID.
|
584 |
* @return string The post content.
|
162 |
* @param \WP_Post $post Post object.
|
163 |
*/
|
164 |
return (array) \apply_filters_ref_array(
|
165 |
+
'the_seo_framework_inpost_seo_save_defaults', // TODO rename to the_seo_framework_post_meta_defaults. 4.1.0?
|
166 |
[
|
167 |
$this->get_unfiltered_post_meta_defaults(),
|
168 |
$post_id,
|
576 |
* Fetches Post content.
|
577 |
*
|
578 |
* @since 2.6.0
|
579 |
+
* @since 3.1.0 No longer applies WordPress' default filters.
|
|
|
|
|
580 |
*
|
581 |
* @param int $id The post ID.
|
582 |
* @return string The post content.
|
inc/classes/query.class.php
CHANGED
@@ -369,6 +369,7 @@ class Query extends Core {
|
|
369 |
* @since 4.0.5 1. The output is now filterable.
|
370 |
* 2. Added caching.
|
371 |
* 3. Now has a first parameter `$post`.
|
|
|
372 |
*
|
373 |
* @param int|WP_Post|null $post (Optional) Post ID or post object.
|
374 |
* @return bool
|
@@ -379,6 +380,7 @@ class Query extends Core {
|
|
379 |
$post = \get_post( $post );
|
380 |
$id = $post ? $post->ID : 0;
|
381 |
} else {
|
|
|
382 |
$id = $this->get_the_real_ID();
|
383 |
}
|
384 |
|
369 |
* @since 4.0.5 1. The output is now filterable.
|
370 |
* 2. Added caching.
|
371 |
* 3. Now has a first parameter `$post`.
|
372 |
+
* @since 4.0.6 Added a short-circuit on current-requests for `is_singular()`.
|
373 |
*
|
374 |
* @param int|WP_Post|null $post (Optional) Post ID or post object.
|
375 |
* @return bool
|
380 |
$post = \get_post( $post );
|
381 |
$id = $post ? $post->ID : 0;
|
382 |
} else {
|
383 |
+
if ( ! \is_singular() ) return false;
|
384 |
$id = $this->get_the_real_ID();
|
385 |
}
|
386 |
|
inc/compat/plugin-bbpress.php
CHANGED
@@ -15,6 +15,202 @@ defined( 'THE_SEO_FRAMEWORK_PRESENT' ) and $_this = \the_seo_framework_class() a
|
|
15 |
*/
|
16 |
\add_filter( 'bbp_title', [ $this, 'get_document_title' ], 99, 3 );
|
17 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
18 |
\add_filter( 'the_seo_framework_seo_column_keys_order', __NAMESPACE__ . '\\_bbpress_filter_order_keys' );
|
19 |
/**
|
20 |
* Filters the order keys for The SEO Bar.
|
15 |
*/
|
16 |
\add_filter( 'bbp_title', [ $this, 'get_document_title' ], 99, 3 );
|
17 |
|
18 |
+
\add_filter( 'the_seo_framework_title_from_generation', __NAMESPACE__ . '\\_bbpress_filter_title', 10, 2 );
|
19 |
+
/**
|
20 |
+
* Override's The SEO Framework's auto-generated title with bbPress's on bbPress queries.
|
21 |
+
*
|
22 |
+
* Still waiting for an API to get the proper title from bbPress (e.g. get raw 'Forum edit: %s'), instead of them formulating
|
23 |
+
* a complete title for us.
|
24 |
+
*
|
25 |
+
* We're going to trust Automattic/bbPress that they'll deprecate all functions called here, instead of removing them,
|
26 |
+
* might they desire to add/improve new functionality.
|
27 |
+
*
|
28 |
+
* @since 4.0.6
|
29 |
+
* @source bbp_title()
|
30 |
+
* @NOTE Do NOT call `bbp_title()` or apply filter `bbptitle` here, it'll cause an infinite loop.
|
31 |
+
*
|
32 |
+
* @param string $title The title.
|
33 |
+
* @param array|null $args The query arguments. Contains 'id' and 'taxonomy'.
|
34 |
+
* Is null when query is autodetermined.
|
35 |
+
* @return string The corrected bbPress title on bbPress pages.
|
36 |
+
*/
|
37 |
+
function _bbpress_filter_title( $title, $args ) {
|
38 |
+
|
39 |
+
if ( null !== $args || ! \is_bbpress() ) return $title;
|
40 |
+
|
41 |
+
// phpcs:disable, Squiz.Commenting.BlockComment, Generic.WhiteSpace.ScopeIndent, WordPress.WP.I18n, Generic.Formatting.MultipleStatementAlignment -- Not my code.
|
42 |
+
|
43 |
+
// Title array
|
44 |
+
$new_title = [];
|
45 |
+
|
46 |
+
/** Archives **************************************************************/
|
47 |
+
|
48 |
+
// Forum Archive
|
49 |
+
if ( \bbp_is_forum_archive() ) {
|
50 |
+
$new_title['text'] = \bbp_get_forum_archive_title();
|
51 |
+
|
52 |
+
// Topic Archive
|
53 |
+
} elseif ( \bbp_is_topic_archive() ) {
|
54 |
+
$new_title['text'] = \bbp_get_topic_archive_title();
|
55 |
+
|
56 |
+
/** Edit ******************************************************************/
|
57 |
+
|
58 |
+
// Forum edit page
|
59 |
+
} elseif ( \bbp_is_forum_edit() ) {
|
60 |
+
$new_title['text'] = \bbp_get_forum_title();
|
61 |
+
$new_title['format'] = \esc_attr__( 'Forum Edit: %s', 'bbpress' );
|
62 |
+
|
63 |
+
// Topic edit page
|
64 |
+
} elseif ( \bbp_is_topic_edit() ) {
|
65 |
+
$new_title['text'] = \bbp_get_topic_title();
|
66 |
+
$new_title['format'] = \esc_attr__( 'Topic Edit: %s', 'bbpress' );
|
67 |
+
|
68 |
+
// Reply edit page
|
69 |
+
} elseif ( \bbp_is_reply_edit() ) {
|
70 |
+
$new_title['text'] = \bbp_get_reply_title();
|
71 |
+
$new_title['format'] = \esc_attr__( 'Reply Edit: %s', 'bbpress' );
|
72 |
+
|
73 |
+
// Topic tag edit page
|
74 |
+
} elseif ( \bbp_is_topic_tag_edit() ) {
|
75 |
+
$new_title['text'] = \bbp_get_topic_tag_name();
|
76 |
+
$new_title['format'] = \esc_attr__( 'Topic Tag Edit: %s', 'bbpress' );
|
77 |
+
|
78 |
+
/** Singles ***************************************************************/
|
79 |
+
|
80 |
+
// Forum page
|
81 |
+
} elseif ( \bbp_is_single_forum() ) {
|
82 |
+
$new_title['text'] = \bbp_get_forum_title();
|
83 |
+
$new_title['format'] = \esc_attr__( 'Forum: %s', 'bbpress' );
|
84 |
+
|
85 |
+
// Topic page
|
86 |
+
} elseif ( \bbp_is_single_topic() ) {
|
87 |
+
$new_title['text'] = \bbp_get_topic_title();
|
88 |
+
$new_title['format'] = \esc_attr__( 'Topic: %s', 'bbpress' );
|
89 |
+
|
90 |
+
// Replies
|
91 |
+
} elseif ( \bbp_is_single_reply() ) {
|
92 |
+
$new_title['text'] = \bbp_get_reply_title();
|
93 |
+
|
94 |
+
// Topic tag page
|
95 |
+
} elseif ( \bbp_is_topic_tag() || \get_query_var( 'bbp_topic_tag' ) ) {
|
96 |
+
$new_title['text'] = \bbp_get_topic_tag_name();
|
97 |
+
$new_title['format'] = \esc_attr__( 'Topic Tag: %s', 'bbpress' );
|
98 |
+
|
99 |
+
/** Users *****************************************************************/
|
100 |
+
|
101 |
+
// Profile page
|
102 |
+
} elseif ( \bbp_is_single_user() ) {
|
103 |
+
|
104 |
+
// Is user viewing their own profile?
|
105 |
+
$is_user_home = \bbp_is_user_home();
|
106 |
+
|
107 |
+
// User topics created
|
108 |
+
if ( \bbp_is_single_user_topics() ) {
|
109 |
+
if ( true === $is_user_home ) {
|
110 |
+
$new_title['text'] = \esc_attr__( 'Your Topics', 'bbpress' );
|
111 |
+
} else {
|
112 |
+
$new_title['text'] = \get_userdata( \bbp_get_user_id() )->display_name;
|
113 |
+
/* translators: user's display name */
|
114 |
+
$new_title['format'] = \esc_attr__( "%s's Topics", 'bbpress' );
|
115 |
+
}
|
116 |
+
|
117 |
+
// User replies created
|
118 |
+
} elseif ( \bbp_is_single_user_replies() ) {
|
119 |
+
if ( true === $is_user_home ) {
|
120 |
+
$new_title['text'] = esc_attr__( 'Your Replies', 'bbpress' );
|
121 |
+
} else {
|
122 |
+
$new_title['text'] = \get_userdata( \bbp_get_user_id() )->display_name;
|
123 |
+
/* translators: user's display name */
|
124 |
+
$new_title['format'] = \esc_attr__( "%s's Replies", 'bbpress' );
|
125 |
+
}
|
126 |
+
|
127 |
+
// User favorites
|
128 |
+
} elseif ( \bbp_is_favorites() ) {
|
129 |
+
if ( true === $is_user_home ) {
|
130 |
+
$new_title['text'] = \esc_attr__( 'Your Favorites', 'bbpress' );
|
131 |
+
} else {
|
132 |
+
$new_title['text'] = \get_userdata( \bbp_get_user_id() )->display_name;
|
133 |
+
/* translators: user's display name */
|
134 |
+
$new_title['format'] = \esc_attr__( "%s's Favorites", 'bbpress' );
|
135 |
+
}
|
136 |
+
|
137 |
+
// User subscriptions
|
138 |
+
} elseif ( \bbp_is_subscriptions() ) {
|
139 |
+
if ( true === $is_user_home ) {
|
140 |
+
$new_title['text'] = \esc_attr__( 'Your Subscriptions', 'bbpress' );
|
141 |
+
} else {
|
142 |
+
$new_title['text'] = \get_userdata( \bbp_get_user_id() )->display_name;
|
143 |
+
/* translators: user's display name */
|
144 |
+
$new_title['format'] = \esc_attr__( "%s's Subscriptions", 'bbpress' );
|
145 |
+
}
|
146 |
+
|
147 |
+
// User "home"
|
148 |
+
} else {
|
149 |
+
if ( true === $is_user_home ) {
|
150 |
+
$new_title['text'] = \esc_attr__( 'Your Profile', 'bbpress' );
|
151 |
+
} else {
|
152 |
+
$new_title['text'] = \get_userdata( \bbp_get_user_id() )->display_name;
|
153 |
+
/* translators: user's display name */
|
154 |
+
$new_title['format'] = \esc_attr__( "%s's Profile", 'bbpress' );
|
155 |
+
}
|
156 |
+
}
|
157 |
+
|
158 |
+
// Profile edit page
|
159 |
+
} elseif ( \bbp_is_single_user_edit() ) {
|
160 |
+
|
161 |
+
// Current user
|
162 |
+
if ( \bbp_is_user_home_edit() ) {
|
163 |
+
$new_title['text'] = \esc_attr__( 'Edit Your Profile', 'bbpress' );
|
164 |
+
|
165 |
+
// Other user
|
166 |
+
} else {
|
167 |
+
$new_title['text'] = \get_userdata( \bbp_get_user_id() )->display_name;
|
168 |
+
$new_title['format'] = \esc_attr__( "Edit %s's Profile", 'bbpress' );
|
169 |
+
}
|
170 |
+
|
171 |
+
/** Views *****************************************************************/
|
172 |
+
|
173 |
+
// Views
|
174 |
+
} elseif ( \bbp_is_single_view() ) {
|
175 |
+
$new_title['text'] = \bbp_get_view_title();
|
176 |
+
$new_title['format'] = \esc_attr__( 'View: %s', 'bbpress' );
|
177 |
+
|
178 |
+
/** Search ****************************************************************/
|
179 |
+
|
180 |
+
// Search
|
181 |
+
} elseif ( \bbp_is_search() ) {
|
182 |
+
$new_title['text'] = \bbp_get_search_title();
|
183 |
+
}
|
184 |
+
|
185 |
+
// This filter is deprecated. Use 'bbp_before_title_parse_args' instead.
|
186 |
+
$new_title = \apply_filters( 'bbp_raw_title_array', $new_title );
|
187 |
+
|
188 |
+
// Set title array defaults
|
189 |
+
$new_title = \bbp_parse_args(
|
190 |
+
$new_title,
|
191 |
+
[
|
192 |
+
'text' => $title,
|
193 |
+
'format' => '%s',
|
194 |
+
],
|
195 |
+
'title'
|
196 |
+
);
|
197 |
+
|
198 |
+
// Get the formatted raw title
|
199 |
+
$new_title = sprintf( $new_title['format'], $new_title['text'] );
|
200 |
+
|
201 |
+
// Filter the raw title.
|
202 |
+
$new_title = \apply_filters( 'bbp_raw_title', $new_title, $sep = '»', $seplocation = '' );
|
203 |
+
|
204 |
+
// Compare new title with original title
|
205 |
+
if ( $new_title === $title ) {
|
206 |
+
return $title;
|
207 |
+
}
|
208 |
+
|
209 |
+
// phpcs:enable, Squiz.Commenting.BlockComment, Generic.WhiteSpace.ScopeIndent, WordPress.WP.I18n, Generic.Formatting.MultipleStatementAlignment -- Not my code.
|
210 |
+
|
211 |
+
return $new_title;
|
212 |
+
}
|
213 |
+
|
214 |
\add_filter( 'the_seo_framework_seo_column_keys_order', __NAMESPACE__ . '\\_bbpress_filter_order_keys' );
|
215 |
/**
|
216 |
* Filters the order keys for The SEO Bar.
|
inc/compat/plugin-woocommerce.php
CHANGED
@@ -8,8 +8,6 @@ namespace The_SEO_Framework;
|
|
8 |
|
9 |
defined( 'THE_SEO_FRAMEWORK_PRESENT' ) and $_this = \the_seo_framework_class() and $this instanceof $_this or die;
|
10 |
|
11 |
-
// @TODO Move everything WC related over to here.
|
12 |
-
|
13 |
\add_action( 'woocommerce_init', __NAMESPACE__ . '\\_init_wc_compat' );
|
14 |
/**
|
15 |
* Initializes WooCommerce compatibility.
|
8 |
|
9 |
defined( 'THE_SEO_FRAMEWORK_PRESENT' ) and $_this = \the_seo_framework_class() and $this instanceof $_this or die;
|
10 |
|
|
|
|
|
11 |
\add_action( 'woocommerce_init', __NAMESPACE__ . '\\_init_wc_compat' );
|
12 |
/**
|
13 |
* Initializes WooCommerce compatibility.
|
inc/views/admin/metaboxes/robots-metabox.php
CHANGED
@@ -15,16 +15,22 @@ $instance = $this->get_view_instance( 'the_seo_framework_robots_metabox', $insta
|
|
15 |
|
16 |
switch ( $instance ) :
|
17 |
case 'the_seo_framework_robots_metabox_main':
|
|
|
|
|
|
|
18 |
//* Robots types
|
19 |
$types = [
|
|
|
20 |
'category' => __( 'Category archives', 'autodescription' ),
|
21 |
'tag' => __( 'Tag archives', 'autodescription' ),
|
22 |
'author' => __( 'Author pages', 'autodescription' ),
|
23 |
'date' => __( 'Date archives', 'autodescription' ),
|
24 |
'search' => __( 'Search pages', 'autodescription' ),
|
|
|
25 |
'site' => _x( 'the entire site', '...for the entire site', 'autodescription' ),
|
26 |
];
|
27 |
|
|
|
28 |
$post_types = $this->get_rewritable_post_types();
|
29 |
|
30 |
//* Robots i18n
|
@@ -229,7 +235,7 @@ switch ( $instance ) :
|
|
229 |
$_video_snippet_types['number'][ $_n ] = sprintf( _n( '%d second', '%d seconds', $_n, 'autodescription' ), $_n );
|
230 |
}
|
231 |
$video_preview_options = '';
|
232 |
-
$_current
|
233 |
foreach ( $_video_snippet_types as $_type => $_values ) {
|
234 |
$_label = 'default' === $_type
|
235 |
? __( 'Standard directive', 'autodescription' )
|
15 |
|
16 |
switch ( $instance ) :
|
17 |
case 'the_seo_framework_robots_metabox_main':
|
18 |
+
// Tackle the plurality issue with https://github.com/sybrew/the-seo-framework/issues/20 ?
|
19 |
+
// Or should we tacking it when we add _all_ term type specifics (like SEO exclusion) support?
|
20 |
+
|
21 |
//* Robots types
|
22 |
$types = [
|
23 |
+
// TODO These ARE plural. https://github.com/sybrew/the-seo-framework/issues/508#issuecomment-597654089
|
24 |
'category' => __( 'Category archives', 'autodescription' ),
|
25 |
'tag' => __( 'Tag archives', 'autodescription' ),
|
26 |
'author' => __( 'Author pages', 'autodescription' ),
|
27 |
'date' => __( 'Date archives', 'autodescription' ),
|
28 |
'search' => __( 'Search pages', 'autodescription' ),
|
29 |
+
// TODO This IS NOT plural. https://github.com/sybrew/the-seo-framework/issues/508#issuecomment-597654089
|
30 |
'site' => _x( 'the entire site', '...for the entire site', 'autodescription' ),
|
31 |
];
|
32 |
|
33 |
+
// TODO This IS plural. https://github.com/sybrew/the-seo-framework/issues/508#issuecomment-597654089
|
34 |
$post_types = $this->get_rewritable_post_types();
|
35 |
|
36 |
//* Robots i18n
|
235 |
$_video_snippet_types['number'][ $_n ] = sprintf( _n( '%d second', '%d seconds', $_n, 'autodescription' ), $_n );
|
236 |
}
|
237 |
$video_preview_options = '';
|
238 |
+
$_current = $this->get_option( 'max_video_preview' );
|
239 |
foreach ( $_video_snippet_types as $_type => $_values ) {
|
240 |
$_label = 'default' === $_type
|
241 |
? __( 'Standard directive', 'autodescription' )
|
inc/views/admin/metaboxes/social-metabox.php
CHANGED
@@ -154,7 +154,7 @@ switch ( $instance ) :
|
|
154 |
?>
|
155 |
<p>
|
156 |
<label for="<?php $this->field_id( 'theme_color' ); ?>">
|
157 |
-
<strong><?php esc_html_e( 'Theme
|
158 |
</label>
|
159 |
</p>
|
160 |
<p>
|
@@ -283,9 +283,8 @@ switch ( $instance ) :
|
|
283 |
echo $this->code_wrap( $name ); // phpcs:ignore, WordPress.Security.EscapeOutput
|
284 |
echo ' ';
|
285 |
$this->make_info(
|
286 |
-
|
287 |
-
|
288 |
-
true
|
289 |
);
|
290 |
?>
|
291 |
</span>
|
@@ -299,8 +298,11 @@ switch ( $instance ) :
|
|
299 |
|
300 |
<hr>
|
301 |
|
|
|
302 |
<?php
|
303 |
-
|
|
|
|
|
304 |
?>
|
305 |
|
306 |
<p>
|
@@ -351,7 +353,7 @@ switch ( $instance ) :
|
|
351 |
$this->make_checkbox(
|
352 |
'oembed_remove_author',
|
353 |
__( 'Remove author name?', 'autodescription' ),
|
354 |
-
__(
|
355 |
true
|
356 |
),
|
357 |
true
|
154 |
?>
|
155 |
<p>
|
156 |
<label for="<?php $this->field_id( 'theme_color' ); ?>">
|
157 |
+
<strong><?php esc_html_e( 'Theme Color', 'autodescription' ); ?></strong>
|
158 |
</label>
|
159 |
</p>
|
160 |
<p>
|
283 |
echo $this->code_wrap( $name ); // phpcs:ignore, WordPress.Security.EscapeOutput
|
284 |
echo ' ';
|
285 |
$this->make_info(
|
286 |
+
__( 'Learn more about this card.', 'autodescription' ),
|
287 |
+
'https://dev.twitter.com/cards/types/' . $name
|
|
|
288 |
);
|
289 |
?>
|
290 |
</span>
|
298 |
|
299 |
<hr>
|
300 |
|
301 |
+
<h4><?php esc_html_e( 'Card and Content Attribution', 'autodescription' ); ?></h4>
|
302 |
<?php
|
303 |
+
/* source: https://developer.twitter.com/en/docs/tweets/optimize-with-cards/guides/getting-started#attribution */
|
304 |
+
$this->description( __( 'Twitter claims users will be able to follow and view the profiles of attributed accounts directly from the card when these fields are filled in.', 'autodescription' ) );
|
305 |
+
$this->description( __( 'However, for now, these fields seem to have no discernible effect.', 'autodescription' ) );
|
306 |
?>
|
307 |
|
308 |
<p>
|
353 |
$this->make_checkbox(
|
354 |
'oembed_remove_author',
|
355 |
__( 'Remove author name?', 'autodescription' ),
|
356 |
+
__( "Discord shows the page author's name above the sharing embed. Check this option if you find this undesirable.", 'autodescription' ),
|
357 |
true
|
358 |
),
|
359 |
true
|
inc/views/admin/metaboxes/title-metabox.php
CHANGED
@@ -99,8 +99,8 @@ switch ( $instance ) :
|
|
99 |
?>
|
100 |
<h4><?php esc_html_e( 'Automated Title Settings', 'autodescription' ); ?></h4>
|
101 |
<?php
|
102 |
-
$this->description( 'A title is generated for every page.', 'autodescription' );
|
103 |
-
$this->description( 'Some titles may have HTML tags inserted by the author for styling.', 'autodescription' );
|
104 |
|
105 |
$info = $this->make_info(
|
106 |
sprintf(
|
99 |
?>
|
100 |
<h4><?php esc_html_e( 'Automated Title Settings', 'autodescription' ); ?></h4>
|
101 |
<?php
|
102 |
+
$this->description( __( 'A title is generated for every page.', 'autodescription' ) );
|
103 |
+
$this->description( __( 'Some titles may have HTML tags inserted by the author for styling.', 'autodescription' ) );
|
104 |
|
105 |
$info = $this->make_info(
|
106 |
sprintf(
|
inc/views/admin/seo-settings-columns.php
CHANGED
@@ -25,8 +25,7 @@ defined( 'THE_SEO_FRAMEWORK_PRESENT' ) and $_this = the_seo_framework_class() an
|
|
25 |
\do_action( 'the_seo_framework_before_siteadmin_metaboxes_side', $this->seo_settings_page_hook );
|
26 |
|
27 |
/**
|
28 |
-
* @TODO fill this in
|
29 |
-
* @priority low 2.9.0
|
30 |
*/
|
31 |
|
32 |
\do_action( 'the_seo_framework_after_siteadmin_metaboxes_side', $this->seo_settings_page_hook );
|
25 |
\do_action( 'the_seo_framework_before_siteadmin_metaboxes_side', $this->seo_settings_page_hook );
|
26 |
|
27 |
/**
|
28 |
+
* @TODO fill this in...?
|
|
|
29 |
*/
|
30 |
|
31 |
\do_action( 'the_seo_framework_after_siteadmin_metaboxes_side', $this->seo_settings_page_hook );
|
inc/views/debug/output.php
CHANGED
@@ -25,8 +25,8 @@ $cache_key = $this->generate_cache_key( $id, $taxonomy );
|
|
25 |
|
26 |
if ( is_admin() ) {
|
27 |
$bstyle = \is_rtl()
|
28 |
-
? 'direction:ltr;color:#444;font-family:Georgio,sans-serif;font-size:14px;clear:both;float:left;position:relative;width:calc( 100% - 200px );min-height:700px;padding:0;margin:20px 180px 40px 20px;overflow:hidden;border:1px solid #ccc;border-radius:3px;line-height:
|
29 |
-
: 'direction:ltr;color:#444;font-family:Georgio,sans-serif;font-size:14px;clear:both;float:left;position:relative;width:calc( 100% - 200px );min-height:700px;padding:0;margin:20px 20px 40px 180px;overflow:hidden;border:1px solid #ccc;border-radius:3px;line-height:
|
30 |
?>
|
31 |
<div style="<?php echo $bstyle; ?>">
|
32 |
<h3 style="font-size:14px;padding:0 12px;margin:0;line-height:39px;border-bottom:2px solid #aaa;position:absolute;z-index:9002;width:100%;right:0;left:0;top:0;background:#fff;border-radius:3px 3px 0 0;height:39px;">
|
@@ -53,7 +53,7 @@ if ( is_admin() ) {
|
|
53 |
} else {
|
54 |
?>
|
55 |
<style type="text/css">.wp-ui-notification{color:#fff;background-color:#d54e21}.code.highlight{font-family:Consolas,Monaco,monospace;font-size:14px;}.theseoframework-debug h3{font-size:18px;margin:18px 0}</style>
|
56 |
-
<div class="theseoframework-debug" style="direction:ltr;color:#444;font-family:Georgio,sans-serif;font-size:14px;clear:both;float:left;position:relative;width:calc( 100% - 80px );min-height:700px;padding:0;margin:40px;overflow:hidden;border:1px solid #ccc;border-radius:3px;line-height:18px">
|
57 |
<h3 style="font-size:14px;padding:0 12px;margin:0;line-height:39px;border-bottom:2px solid #aaa;position:absolute;z-index:9002;width:100%;right:0;left:0;top:0;background:#fff;border-radius:3px 3px 0 0;height:39px">
|
58 |
SEO Debug Information
|
59 |
<?php
|
25 |
|
26 |
if ( is_admin() ) {
|
27 |
$bstyle = \is_rtl()
|
28 |
+
? 'direction:ltr;color:#444;font-family:Georgio,sans-serif;font-size:14px;clear:both;float:left;position:relative;width:calc( 100% - 200px );min-height:700px;padding:0;margin:20px 180px 40px 20px;overflow:hidden;border:1px solid #ccc;border-radius:3px;line-height:18pxfont-feature-settings:normal;font-variant:normal'
|
29 |
+
: 'direction:ltr;color:#444;font-family:Georgio,sans-serif;font-size:14px;clear:both;float:left;position:relative;width:calc( 100% - 200px );min-height:700px;padding:0;margin:20px 20px 40px 180px;overflow:hidden;border:1px solid #ccc;border-radius:3px;line-height:18pxfont-feature-settings:normal;font-variant:normal';
|
30 |
?>
|
31 |
<div style="<?php echo $bstyle; ?>">
|
32 |
<h3 style="font-size:14px;padding:0 12px;margin:0;line-height:39px;border-bottom:2px solid #aaa;position:absolute;z-index:9002;width:100%;right:0;left:0;top:0;background:#fff;border-radius:3px 3px 0 0;height:39px;">
|
53 |
} else {
|
54 |
?>
|
55 |
<style type="text/css">.wp-ui-notification{color:#fff;background-color:#d54e21}.code.highlight{font-family:Consolas,Monaco,monospace;font-size:14px;}.theseoframework-debug h3{font-size:18px;margin:18px 0}</style>
|
56 |
+
<div class="theseoframework-debug" style="direction:ltr;color:#444;font-family:Georgio,sans-serif;font-size:14px;clear:both;float:left;position:relative;width:calc( 100% - 80px );min-height:700px;padding:0;margin:40px;overflow:hidden;border:1px solid #ccc;border-radius:3px;line-height:18px;font-feature-settings:normal;font-variant:normal">
|
57 |
<h3 style="font-size:14px;padding:0 12px;margin:0;line-height:39px;border-bottom:2px solid #aaa;position:absolute;z-index:9002;width:100%;right:0;left:0;top:0;background:#fff;border-radius:3px 3px 0 0;height:39px">
|
58 |
SEO Debug Information
|
59 |
<?php
|
inc/views/sitemap/xml-sitemap.php
CHANGED
@@ -58,4 +58,6 @@ if ( $this->the_seo_framework_debug ) {
|
|
58 |
echo "\n" . '<!-- System estimated peak usage: ' . number_format( memory_get_peak_usage( true ) / 1024 / 1024, 3 ) . ' MB -->';
|
59 |
echo "\n" . '<!-- Freed memory prior to generation: ' . number_format( $this->clean_up_globals_for_sitemap( true ) / 1024, 3 ) . ' kB -->';
|
60 |
echo "\n" . '<!-- Sitemap generation time: ' . number_format( microtime( true ) - $timer_start, 6 ) . ' seconds -->';
|
|
|
|
|
61 |
}
|
58 |
echo "\n" . '<!-- System estimated peak usage: ' . number_format( memory_get_peak_usage( true ) / 1024 / 1024, 3 ) . ' MB -->';
|
59 |
echo "\n" . '<!-- Freed memory prior to generation: ' . number_format( $this->clean_up_globals_for_sitemap( true ) / 1024, 3 ) . ' kB -->';
|
60 |
echo "\n" . '<!-- Sitemap generation time: ' . number_format( microtime( true ) - $timer_start, 6 ) . ' seconds -->';
|
61 |
+
echo "\n" . '<!-- Sitemap caching enabled: ' . ( $this->get_option( 'cache_sitemap' ) ? 'yes' : 'no' ) . ' -->';
|
62 |
+
echo "\n" . '<!-- Sitemap transient key: ' . \esc_html( $this->get_sitemap_transient_name() ) . ' -->';
|
63 |
}
|
language/autodescription.pot
CHANGED
@@ -1,46 +1,63 @@
|
|
1 |
-
# Copyright (C) 2020 The SEO Framework
|
2 |
-
# This file is distributed under the same license as the The SEO Framework
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
-
"Project-Id-Version: The SEO Framework 4.0.
|
6 |
-
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/
|
7 |
-
"
|
|
|
8 |
"MIME-Version: 1.0\n"
|
9 |
"Content-Type: text/plain; charset=UTF-8\n"
|
10 |
"Content-Transfer-Encoding: 8bit\n"
|
11 |
-
"
|
12 |
-
"
|
13 |
-
"
|
|
|
14 |
|
15 |
-
#.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16 |
|
17 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
18 |
msgid "Thank you for updating The SEO Framework! Your website has been upgraded successfully to use The SEO Framework at database version `%s`."
|
19 |
msgstr ""
|
20 |
|
21 |
-
#: bootstrap/upgrade.php:
|
22 |
msgid "Thank you for installing The SEO Framework! Your website is now optimized for search and social sharing, automatically. We hope you enjoy our free plugin. Good luck with your site!"
|
23 |
msgstr ""
|
24 |
|
25 |
#. translators: %s = Link, markdown.
|
26 |
-
|
27 |
-
#: bootstrap/upgrade.php:275
|
28 |
msgid "The SEO Framework only identifies itself rarely during plugin upgrades. We'd like to use this opportunity to highlight our [plugin setup guide](%s)."
|
29 |
msgstr ""
|
30 |
|
31 |
-
#: bootstrap/upgrade.php:
|
32 |
msgid "Twitter Photo Cards have been deprecated. Your site now uses Summary Cards when applicable."
|
33 |
msgstr ""
|
34 |
|
35 |
-
#: bootstrap/upgrade.php:
|
36 |
msgid "The previous sitemap timestamp settings have been converted into new global timestamp settings."
|
37 |
msgstr ""
|
38 |
|
39 |
-
#: bootstrap/upgrade.php:
|
40 |
msgid "A cronjob is now used to ping search engines, and it alerts them to changes in your sitemap."
|
41 |
msgstr ""
|
42 |
|
43 |
-
#: bootstrap/upgrade.php:
|
44 |
msgid "The positions in the \"Meta Title Additions Location\" setting for the homepage have been reversed, left to right, but the output has not been changed. If you must downgrade for some reason, remember to switch the location back again."
|
45 |
msgstr ""
|
46 |
|
@@ -127,15 +144,10 @@ msgid "Good."
|
|
127 |
msgstr ""
|
128 |
|
129 |
#. translators: %s = Redirect URL markdown
|
130 |
-
|
131 |
-
#: inc/classes/admin-init.class.php:435
|
132 |
msgid "There has been an error redirecting. Refresh the page or follow [this link](%s)."
|
133 |
msgstr ""
|
134 |
|
135 |
-
#: inc/classes/admin-init.class.php:640 inc/classes/admin-init.class.php:701
|
136 |
-
msgid "Image could not be processed."
|
137 |
-
msgstr ""
|
138 |
-
|
139 |
#: inc/classes/admin-pages.class.php:62
|
140 |
msgid "SEO Settings"
|
141 |
msgstr ""
|
@@ -189,7 +201,6 @@ msgid "Click to change the counter type"
|
|
189 |
msgstr ""
|
190 |
|
191 |
#. translators: %s = number
|
192 |
-
|
193 |
#: inc/classes/admin-pages.class.php:1158
|
194 |
msgid "Characters Used: %s"
|
195 |
msgstr ""
|
@@ -204,7 +215,6 @@ msgid "The SEO Settings may take precedence over these settings."
|
|
204 |
msgstr ""
|
205 |
|
206 |
#. translators: %s = Post Type label
|
207 |
-
|
208 |
#: inc/classes/bridges/postsettings.class.php:86
|
209 |
msgid "%s SEO Settings"
|
210 |
msgstr ""
|
@@ -217,25 +227,11 @@ msgstr ""
|
|
217 |
msgid "Are you sure you want to reset all SEO settings to their defaults?"
|
218 |
msgstr ""
|
219 |
|
220 |
-
|
221 |
-
#: inc/classes/bridges/scripts.class.php:487
|
222 |
-
#: inc/classes/generate-title.class.php:1179
|
223 |
-
msgid "Private: %s"
|
224 |
-
msgstr ""
|
225 |
-
|
226 |
-
#: inc/classes/bridges/scripts.class.php:420
|
227 |
-
#: inc/classes/bridges/scripts.class.php:489
|
228 |
-
#: inc/classes/generate-title.class.php:1164
|
229 |
-
msgid "Protected: %s"
|
230 |
-
msgstr ""
|
231 |
-
|
232 |
-
#. translators: Taxonomy term archive title. 1: Taxonomy singular name, 2:
|
233 |
-
#. Current taxonomy term
|
234 |
#. translators: 1 = 'Assessment(s)', 2 = A list of assessments.
|
235 |
-
|
236 |
#: inc/classes/bridges/scripts.class.php:541
|
237 |
-
#: inc/classes/generate-title.class.php:
|
238 |
-
#: inc/classes/generate-title.class.php:
|
239 |
#: inc/classes/interpreters/seobar.class.php:342
|
240 |
msgid "%1$s: %2$s"
|
241 |
msgstr ""
|
@@ -280,25 +276,21 @@ msgid "Select Logo"
|
|
280 |
msgstr ""
|
281 |
|
282 |
#. translators: %s = term name
|
283 |
-
|
284 |
#: inc/classes/bridges/scripts.class.php:897
|
285 |
msgid "Select Primary %s"
|
286 |
msgstr ""
|
287 |
|
288 |
#. translators: %s = term name
|
289 |
-
|
290 |
#: inc/classes/bridges/scripts.class.php:902
|
291 |
msgid "Make primary %s"
|
292 |
msgstr ""
|
293 |
|
294 |
#. translators: %s = term name
|
295 |
-
|
296 |
#: inc/classes/bridges/scripts.class.php:904
|
297 |
msgid "Primary %s"
|
298 |
msgstr ""
|
299 |
|
300 |
#. translators: Pixel counter. 1: number (value), 2: number (guideline)
|
301 |
-
|
302 |
#: inc/classes/bridges/scripts.class.php:999
|
303 |
msgid "%1$d out of %2$d pixels are used."
|
304 |
msgstr ""
|
@@ -346,9 +338,7 @@ msgstr ""
|
|
346 |
msgid "Feed Settings"
|
347 |
msgstr ""
|
348 |
|
349 |
-
#. translators: 1 = An assessment, 2 = Disclaimer, e.g. "take it with a grain
|
350 |
-
#. of salt"
|
351 |
-
|
352 |
#: inc/classes/builders/seobar-page.class.php:149
|
353 |
#: inc/classes/builders/seobar-page.class.php:364
|
354 |
#: inc/classes/builders/seobar-term.class.php:164
|
@@ -369,7 +359,6 @@ msgid "No title could be fetched."
|
|
369 |
msgstr ""
|
370 |
|
371 |
#. translators: %s = "Untitled"
|
372 |
-
|
373 |
#: inc/classes/builders/seobar-page.class.php:156
|
374 |
#: inc/classes/builders/seobar-term.class.php:171
|
375 |
msgid "No title could be fetched, \"%s\" is used instead."
|
@@ -501,7 +490,6 @@ msgid "It's built using the excerpt field."
|
|
501 |
msgstr ""
|
502 |
|
503 |
#. translators: %s = list of duplicated words
|
504 |
-
|
505 |
#: inc/classes/builders/seobar-page.class.php:378
|
506 |
#: inc/classes/builders/seobar-term.class.php:366
|
507 |
msgid "Found duplicated words: %s"
|
@@ -567,7 +555,6 @@ msgid "The description inputted at the Edit Page screen is used."
|
|
567 |
msgstr ""
|
568 |
|
569 |
#. translators: 1: Word found, 2: Occurrences
|
570 |
-
|
571 |
#: inc/classes/builders/seobar-page.class.php:493
|
572 |
#: inc/classes/builders/seobar-term.class.php:463
|
573 |
msgid "“%1$s” is used %2$d times."
|
@@ -651,10 +638,12 @@ msgstr ""
|
|
651 |
#: inc/classes/builders/seobar-page.class.php:605
|
652 |
#: inc/classes/builders/seobar-term.class.php:560
|
653 |
#: inc/classes/builders/seobar-term.class.php:569
|
654 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:
|
655 |
#: inc/views/edit/seo-settings-singular.php:196
|
656 |
-
#: inc/views/edit/seo-settings-tt.php:60
|
657 |
-
#: inc/views/list/
|
|
|
|
|
658 |
msgid "Indexing"
|
659 |
msgstr ""
|
660 |
|
@@ -723,7 +712,7 @@ msgstr ""
|
|
723 |
#: inc/classes/builders/seobar-page.class.php:759
|
724 |
#: inc/classes/builders/seobar-term.class.php:709
|
725 |
#: inc/classes/builders/seobar-term.class.php:718
|
726 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:
|
727 |
#: inc/views/list/quick-term.php:26
|
728 |
msgid "Following"
|
729 |
msgstr ""
|
@@ -781,10 +770,12 @@ msgstr ""
|
|
781 |
#: inc/classes/builders/seobar-page.class.php:890
|
782 |
#: inc/classes/builders/seobar-term.class.php:829
|
783 |
#: inc/classes/builders/seobar-term.class.php:838
|
784 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:
|
785 |
#: inc/views/edit/seo-settings-singular.php:212
|
786 |
-
#: inc/views/edit/seo-settings-tt.php:86
|
787 |
-
#: inc/views/list/
|
|
|
|
|
788 |
msgid "Archiving"
|
789 |
msgstr ""
|
790 |
|
@@ -974,7 +965,6 @@ msgid "Term redirects visitors."
|
|
974 |
msgstr ""
|
975 |
|
976 |
#. translators: %s = timestamp
|
977 |
-
|
978 |
#: inc/classes/builders/sitemap-base.class.php:73
|
979 |
msgid "Sitemap is generated on %s"
|
980 |
msgstr ""
|
@@ -984,13 +974,13 @@ msgid "Settings"
|
|
984 |
msgstr ""
|
985 |
|
986 |
#: inc/classes/core.class.php:227
|
987 |
-
msgctxt "
|
988 |
-
msgid "
|
989 |
msgstr ""
|
990 |
|
991 |
#: inc/classes/core.class.php:232
|
992 |
-
msgctxt "Plugin
|
993 |
-
msgid "
|
994 |
msgstr ""
|
995 |
|
996 |
#: inc/classes/core.class.php:265
|
@@ -1010,33 +1000,27 @@ msgctxt "Extension Manager is a product name; do not translate it."
|
|
1010 |
msgid "Get Extension Manager"
|
1011 |
msgstr ""
|
1012 |
|
1013 |
-
#. translators: 1: Function name, 2: 'Deprecated', 3: Plugin Version
|
1014 |
-
#. notification, 4: Replacement function
|
1015 |
-
|
1016 |
#: inc/classes/debug.class.php:150
|
1017 |
msgid "%1$s is %2$s since version %3$s of The SEO Framework! Use %4$s instead."
|
1018 |
msgstr ""
|
1019 |
|
1020 |
-
#: inc/classes/debug.class.php:152
|
|
|
1021 |
msgid "deprecated"
|
1022 |
msgstr ""
|
1023 |
|
1024 |
-
#. translators: 1: Function name, 2: 'Deprecated', 3: Plugin Version
|
1025 |
-
#. notification
|
1026 |
-
|
1027 |
#: inc/classes/debug.class.php:161
|
1028 |
msgid "%1$s is %2$s since version %3$s of The SEO Framework with no alternative available."
|
1029 |
msgstr ""
|
1030 |
|
1031 |
#. translators: %s = Version number
|
1032 |
-
|
1033 |
#: inc/classes/debug.class.php:212
|
1034 |
msgid "(This message was added in version %s of The SEO Framework.)"
|
1035 |
msgstr ""
|
1036 |
|
1037 |
-
#. translators: 1: Function name, 2: 'Incorrectly', 3: Error message 4: Plugin
|
1038 |
-
#. Version notification
|
1039 |
-
|
1040 |
#: inc/classes/debug.class.php:216
|
1041 |
msgid "%1$s was called %2$s. %3$s %4$s"
|
1042 |
msgstr ""
|
@@ -1046,8 +1030,7 @@ msgid "incorrectly"
|
|
1046 |
msgstr ""
|
1047 |
|
1048 |
#. translators: 1: Method or Property name, 2: Message
|
1049 |
-
|
1050 |
-
#: inc/classes/debug.class.php:267
|
1051 |
msgid "%1$s is not accessible. %2$s"
|
1052 |
msgstr ""
|
1053 |
|
@@ -1057,159 +1040,30 @@ msgid "Source"
|
|
1057 |
msgstr ""
|
1058 |
|
1059 |
#. translators: %s = Blog page title. Front-end output.
|
1060 |
-
|
1061 |
-
#: inc/classes/generate-description.class.php:705
|
1062 |
msgid "Latest posts: %s"
|
1063 |
msgstr ""
|
1064 |
|
1065 |
-
#: inc/classes/generate-description.class.php:
|
1066 |
msgctxt "Placement. e.g. Post Title \"on\" Blog Name"
|
1067 |
msgid "on"
|
1068 |
msgstr ""
|
1069 |
|
1070 |
#. translators: 1: Title, 2: on, 3: Blogname
|
1071 |
#. translators: 1: Option label, 2: [?] option info note, 3: Optional warning
|
1072 |
-
|
1073 |
-
#: inc/classes/generate-description.class.php:718
|
1074 |
#: inc/views/admin/metaboxes/homepage-metabox.php:434
|
1075 |
#: inc/views/admin/metaboxes/homepage-metabox.php:450
|
1076 |
#: inc/views/admin/metaboxes/homepage-metabox.php:466
|
1077 |
msgid "%1$s %2$s %3$s"
|
1078 |
msgstr ""
|
1079 |
|
1080 |
-
#. translators: Category archive title. 1: Category name
|
1081 |
-
|
1082 |
-
#: inc/classes/generate-title.class.php:758
|
1083 |
-
#: inc/classes/generate-title.class.php:783
|
1084 |
-
msgid "Category: %s"
|
1085 |
-
msgstr ""
|
1086 |
-
|
1087 |
-
#. translators: Tag archive title. 1: Tag name
|
1088 |
-
|
1089 |
-
#: inc/classes/generate-title.class.php:762
|
1090 |
-
#: inc/classes/generate-title.class.php:787
|
1091 |
-
msgid "Tag: %s"
|
1092 |
-
msgstr ""
|
1093 |
-
|
1094 |
-
#. translators: Author archive title. 1: Author name
|
1095 |
-
|
1096 |
-
#: inc/classes/generate-title.class.php:775
|
1097 |
-
#: inc/classes/generate-title.class.php:791
|
1098 |
-
msgid "Author: %s"
|
1099 |
-
msgstr ""
|
1100 |
-
|
1101 |
-
#: inc/classes/generate-title.class.php:777
|
1102 |
-
#: inc/classes/generate-title.class.php:839
|
1103 |
-
msgid "Archives"
|
1104 |
-
msgstr ""
|
1105 |
-
|
1106 |
-
#: inc/classes/generate-title.class.php:794
|
1107 |
-
msgctxt "yearly archives date format"
|
1108 |
-
msgid "Y"
|
1109 |
-
msgstr ""
|
1110 |
-
|
1111 |
-
#. translators: Yearly archive title. 1: Year
|
1112 |
-
|
1113 |
-
#: inc/classes/generate-title.class.php:796
|
1114 |
-
msgid "Year: %s"
|
1115 |
-
msgstr ""
|
1116 |
-
|
1117 |
-
#: inc/classes/generate-title.class.php:798
|
1118 |
-
msgctxt "monthly archives date format"
|
1119 |
-
msgid "F Y"
|
1120 |
-
msgstr ""
|
1121 |
-
|
1122 |
-
#. translators: Monthly archive title. 1: Month name and year
|
1123 |
-
|
1124 |
-
#: inc/classes/generate-title.class.php:800
|
1125 |
-
msgid "Month: %s"
|
1126 |
-
msgstr ""
|
1127 |
-
|
1128 |
-
#: inc/classes/generate-title.class.php:802
|
1129 |
-
msgctxt "daily archives date format"
|
1130 |
-
msgid "F j, Y"
|
1131 |
-
msgstr ""
|
1132 |
-
|
1133 |
-
#. translators: Daily archive title. 1: Date
|
1134 |
-
|
1135 |
-
#: inc/classes/generate-title.class.php:804
|
1136 |
-
msgid "Day: %s"
|
1137 |
-
msgstr ""
|
1138 |
-
|
1139 |
-
#: inc/classes/generate-title.class.php:808
|
1140 |
-
msgctxt "post format archive title"
|
1141 |
-
msgid "Asides"
|
1142 |
-
msgstr ""
|
1143 |
-
|
1144 |
-
#: inc/classes/generate-title.class.php:810
|
1145 |
-
msgctxt "post format archive title"
|
1146 |
-
msgid "Galleries"
|
1147 |
-
msgstr ""
|
1148 |
-
|
1149 |
-
#: inc/classes/generate-title.class.php:812
|
1150 |
-
msgctxt "post format archive title"
|
1151 |
-
msgid "Images"
|
1152 |
-
msgstr ""
|
1153 |
-
|
1154 |
-
#: inc/classes/generate-title.class.php:814
|
1155 |
-
msgctxt "post format archive title"
|
1156 |
-
msgid "Videos"
|
1157 |
-
msgstr ""
|
1158 |
-
|
1159 |
-
#: inc/classes/generate-title.class.php:816
|
1160 |
-
msgctxt "post format archive title"
|
1161 |
-
msgid "Quotes"
|
1162 |
-
msgstr ""
|
1163 |
-
|
1164 |
-
#: inc/classes/generate-title.class.php:818
|
1165 |
-
msgctxt "post format archive title"
|
1166 |
-
msgid "Links"
|
1167 |
-
msgstr ""
|
1168 |
-
|
1169 |
-
#: inc/classes/generate-title.class.php:820
|
1170 |
-
msgctxt "post format archive title"
|
1171 |
-
msgid "Statuses"
|
1172 |
-
msgstr ""
|
1173 |
-
|
1174 |
-
#: inc/classes/generate-title.class.php:822
|
1175 |
-
msgctxt "post format archive title"
|
1176 |
-
msgid "Audio"
|
1177 |
-
msgstr ""
|
1178 |
-
|
1179 |
-
#: inc/classes/generate-title.class.php:824
|
1180 |
-
msgctxt "post format archive title"
|
1181 |
-
msgid "Chats"
|
1182 |
-
msgstr ""
|
1183 |
-
|
1184 |
-
#. translators: Post type archive title. 1: Post type name
|
1185 |
-
|
1186 |
-
#: inc/classes/generate-title.class.php:829
|
1187 |
-
msgid "Archives: %s"
|
1188 |
-
msgstr ""
|
1189 |
-
|
1190 |
-
#: inc/classes/generate-title.class.php:986
|
1191 |
-
msgid "Untitled"
|
1192 |
-
msgstr ""
|
1193 |
-
|
1194 |
-
#. translators: %s: search phrase
|
1195 |
-
|
1196 |
-
#: inc/classes/generate-title.class.php:998
|
1197 |
-
msgid "Search Results for “%s”"
|
1198 |
-
msgstr ""
|
1199 |
-
|
1200 |
-
#: inc/classes/generate-title.class.php:1113
|
1201 |
-
msgid "Page %s"
|
1202 |
-
msgstr ""
|
1203 |
-
|
1204 |
#. translators: 1 = SEO Bar type title, 2 = Status reason. 3 = Assessments
|
1205 |
-
|
1206 |
#: inc/classes/interpreters/seobar.class.php:292
|
1207 |
msgid "%1$s: %2$s %3$s"
|
1208 |
msgstr ""
|
1209 |
|
1210 |
-
#. translators: 1 = Assessment number (mind the %d (D)), 2 = Assessment
|
1211 |
-
#. explanation
|
1212 |
-
|
1213 |
#: inc/classes/interpreters/seobar.class.php:340
|
1214 |
msgid "%1$d: %2$s"
|
1215 |
msgstr ""
|
@@ -1314,7 +1168,6 @@ msgid "If this site publishes podcasts, enable this option. Otherwise, leave it
|
|
1314 |
msgstr ""
|
1315 |
|
1316 |
#. translators: %s = Reading Settings URL. Links are in Markdown!
|
1317 |
-
|
1318 |
#: inc/views/admin/metaboxes/feed-metabox.php:48
|
1319 |
msgid "Note: The feed is already converted into an excerpt through the [Reading Settings](%s)."
|
1320 |
msgstr ""
|
@@ -1511,7 +1364,6 @@ msgid "Preferred canonical URL scheme:"
|
|
1511 |
msgstr ""
|
1512 |
|
1513 |
#. translators: %s = HTTP or HTTPS
|
1514 |
-
|
1515 |
#: inc/views/admin/metaboxes/general-metabox.php:302
|
1516 |
msgid "Detect automatically (%s)"
|
1517 |
msgstr ""
|
@@ -1529,19 +1381,16 @@ msgid "It's recommended to turn these options on for better SEO consistency and
|
|
1529 |
msgstr ""
|
1530 |
|
1531 |
#. translators: the backticks are Markdown! Preserve them as-is!
|
1532 |
-
|
1533 |
#: inc/views/admin/metaboxes/general-metabox.php:325
|
1534 |
msgid "Add `rel` link tags to posts and pages?"
|
1535 |
msgstr ""
|
1536 |
|
1537 |
#. translators: the backticks are Markdown! Preserve them as-is!
|
1538 |
-
|
1539 |
#: inc/views/admin/metaboxes/general-metabox.php:336
|
1540 |
msgid "Add `rel` link tags to archives?"
|
1541 |
msgstr ""
|
1542 |
|
1543 |
#. translators: the backticks are Markdown! Preserve them as-is!
|
1544 |
-
|
1545 |
#: inc/views/admin/metaboxes/general-metabox.php:347
|
1546 |
msgid "Add `rel` link tags to the homepage?"
|
1547 |
msgstr ""
|
@@ -1571,7 +1420,7 @@ msgid "This outputs the complete date including hours, minutes, and timezone."
|
|
1571 |
msgstr ""
|
1572 |
|
1573 |
#: inc/views/admin/metaboxes/general-metabox.php:420
|
1574 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:
|
1575 |
msgid "Post Type Settings"
|
1576 |
msgstr ""
|
1577 |
|
@@ -1592,7 +1441,7 @@ msgid "Disabling SEO allows search engines to crawl the post type without restri
|
|
1592 |
msgstr ""
|
1593 |
|
1594 |
#: inc/views/admin/metaboxes/general-metabox.php:431
|
1595 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:
|
1596 |
msgid "These settings are applied to the post type pages and their terms. When terms are shared between post types, all their post types should be checked for this to have an effect."
|
1597 |
msgstr ""
|
1598 |
|
@@ -1605,7 +1454,7 @@ msgid "These settings will take precedence over the settings set within the home
|
|
1605 |
msgstr ""
|
1606 |
|
1607 |
#: inc/views/admin/metaboxes/homepage-metabox.php:32
|
1608 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:
|
1609 |
#: inc/views/admin/metaboxes/sitemaps-metabox.php:20
|
1610 |
#: inc/views/admin/metaboxes/social-metabox.php:20
|
1611 |
#: inc/views/admin/metaboxes/title-metabox.php:57
|
@@ -1650,7 +1499,6 @@ msgid "Note: The title placeholder is fetched from the Page SEO Settings on the
|
|
1650 |
msgstr ""
|
1651 |
|
1652 |
#. translators: %s = Homepage URL markdown
|
1653 |
-
|
1654 |
#: inc/views/admin/metaboxes/homepage-metabox.php:127
|
1655 |
#: inc/views/admin/metaboxes/homepage-metabox.php:177
|
1656 |
msgid "A plugin has been detected that suggests to maintain this option on the [homepage](%s)."
|
@@ -1745,7 +1593,6 @@ msgid "Overwritten by page settings"
|
|
1745 |
msgstr ""
|
1746 |
|
1747 |
#. translators: the backticks are Markdown! Preserve them as-is!
|
1748 |
-
|
1749 |
#: inc/views/admin/metaboxes/homepage-metabox.php:437
|
1750 |
msgid "Apply `noindex` to the homepage?"
|
1751 |
msgstr ""
|
@@ -1755,7 +1602,6 @@ msgid "This tells search engines not to show this page in their search results."
|
|
1755 |
msgstr ""
|
1756 |
|
1757 |
#. translators: the backticks are Markdown! Preserve them as-is!
|
1758 |
-
|
1759 |
#: inc/views/admin/metaboxes/homepage-metabox.php:453
|
1760 |
msgid "Apply `nofollow` to the homepage?"
|
1761 |
msgstr ""
|
@@ -1765,7 +1611,6 @@ msgid "This tells search engines not to follow links on this page."
|
|
1765 |
msgstr ""
|
1766 |
|
1767 |
#. translators: the backticks are Markdown! Preserve them as-is!
|
1768 |
-
|
1769 |
#: inc/views/admin/metaboxes/homepage-metabox.php:469
|
1770 |
msgid "Apply `noarchive` to the homepage?"
|
1771 |
msgstr ""
|
@@ -1780,7 +1625,6 @@ msgid "Warning: No public site should ever apply \"noindex\" or \"nofollow\" to
|
|
1780 |
msgstr ""
|
1781 |
|
1782 |
#. translators: %s = Homepage URL markdown
|
1783 |
-
|
1784 |
#: inc/views/admin/metaboxes/homepage-metabox.php:511
|
1785 |
msgid "Note: These options may be overwritten by the [page settings](%s)."
|
1786 |
msgstr ""
|
@@ -1794,187 +1638,181 @@ msgid "If your homepage is paginated and outputs content that's also found elsew
|
|
1794 |
msgstr ""
|
1795 |
|
1796 |
#. translators: the backticks are Markdown! Preserve them as-is!
|
1797 |
-
|
1798 |
#: inc/views/admin/metaboxes/homepage-metabox.php:533
|
1799 |
msgid "Apply `noindex` to every second or later page on the homepage?"
|
1800 |
msgstr ""
|
1801 |
|
1802 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:
|
1803 |
msgid "Category archives"
|
1804 |
msgstr ""
|
1805 |
|
1806 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:
|
1807 |
msgid "Tag archives"
|
1808 |
msgstr ""
|
1809 |
|
1810 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:
|
1811 |
msgid "Author pages"
|
1812 |
msgstr ""
|
1813 |
|
1814 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:
|
1815 |
msgid "Date archives"
|
1816 |
msgstr ""
|
1817 |
|
1818 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:
|
1819 |
msgid "Search pages"
|
1820 |
msgstr ""
|
1821 |
|
1822 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:
|
1823 |
msgctxt "...for the entire site"
|
1824 |
msgid "the entire site"
|
1825 |
msgstr ""
|
1826 |
|
1827 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:
|
1828 |
msgid "These options most likely prevent indexing of the selected archives and pages. If you enable this, the selected archives or pages will urge to be removed from search engine results pages."
|
1829 |
msgstr ""
|
1830 |
|
1831 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:
|
1832 |
msgid "These options most likely prevent links from being followed on the selected archives and pages. If you enable this, the selected archives or pages in-page links will gain no SEO value, including your internal links."
|
1833 |
msgstr ""
|
1834 |
|
1835 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:
|
1836 |
msgid "These options most likely prevent caching of the selected archives and pages. If you enable this, bots are urged not create a cached copy of the selected archives or pages."
|
1837 |
msgstr ""
|
1838 |
|
1839 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:
|
1840 |
msgid "Advanced Query Protection"
|
1841 |
msgstr ""
|
1842 |
|
1843 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:
|
1844 |
msgid "Some URL queries can cause WordPress to show faux archives. When search engines spot these, they will crawl and index them, which may cause a drop in ranking. Advanced query protection will prevent robots from indexing these archives."
|
1845 |
msgstr ""
|
1846 |
|
1847 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:
|
1848 |
msgid "Enable advanced query protection?"
|
1849 |
msgstr ""
|
1850 |
|
1851 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:
|
1852 |
msgid "Paginated Archive Settings"
|
1853 |
msgstr ""
|
1854 |
|
1855 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:
|
1856 |
msgid "Indexing the second or later page of any archive might cause duplication errors. Search engines look down upon them; therefore, it's recommended to disable indexing of those pages."
|
1857 |
msgstr ""
|
1858 |
|
1859 |
#. translators: the backticks are Markdown! Preserve them as-is!
|
1860 |
-
|
1861 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:112
|
1862 |
msgid "Apply `noindex` to every second or later archive page?"
|
1863 |
msgstr ""
|
1864 |
|
1865 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:
|
1866 |
msgid "Copyright Directive Settings"
|
1867 |
msgstr ""
|
1868 |
|
1869 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:
|
1870 |
msgid "Some search engines allow you to control copyright directives on the content they aggregate. It's best to allow some content to be taken by these aggregators, as that can improve contextualized exposure via snippets and previews. When left unspecified, regional regulations may apply. It is up to the aggregator to honor these requests."
|
1871 |
msgstr ""
|
1872 |
|
1873 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:
|
1874 |
msgid "Specify aggregator copyright compliance directives?"
|
1875 |
msgstr ""
|
1876 |
|
1877 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:
|
1878 |
msgid "Unlimited"
|
1879 |
msgstr ""
|
1880 |
|
1881 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:
|
1882 |
msgctxt "quanity: zero"
|
1883 |
msgid "None, disallow snippet"
|
1884 |
msgstr ""
|
1885 |
|
1886 |
#. translators: %d = number
|
1887 |
-
|
1888 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:143
|
1889 |
msgid "%d character"
|
1890 |
msgid_plural "%d characters"
|
1891 |
msgstr[0] ""
|
1892 |
msgstr[1] ""
|
1893 |
|
1894 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:
|
1895 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:
|
1896 |
msgid "Standard directive"
|
1897 |
msgstr ""
|
1898 |
|
1899 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:
|
1900 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:
|
1901 |
msgid "Granular directive"
|
1902 |
msgstr ""
|
1903 |
|
1904 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:
|
1905 |
msgid "Maximum text snippet length"
|
1906 |
msgstr ""
|
1907 |
|
1908 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:
|
1909 |
msgid "This may limit the text snippet length for all pages on this site."
|
1910 |
msgstr ""
|
1911 |
|
1912 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:
|
1913 |
msgid "This directive also imposes a limit on meta descriptions and structured data, which unintentionally restricts the amount of information you can share. Therefore, it's best to use at least a 320 character limit."
|
1914 |
msgstr ""
|
1915 |
|
1916 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:
|
1917 |
msgctxt "quanity: zero"
|
1918 |
msgid "None, disallow preview"
|
1919 |
msgstr ""
|
1920 |
|
1921 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:
|
1922 |
msgid "Thumbnail or standard size"
|
1923 |
msgstr ""
|
1924 |
|
1925 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:
|
1926 |
msgid "Large or full size"
|
1927 |
msgstr ""
|
1928 |
|
1929 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:
|
1930 |
msgid "Maximum image preview size"
|
1931 |
msgstr ""
|
1932 |
|
1933 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:
|
1934 |
msgid "This may limit the image preview size for all images from this site."
|
1935 |
msgstr ""
|
1936 |
|
1937 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:
|
1938 |
msgid "Full video preview"
|
1939 |
msgstr ""
|
1940 |
|
1941 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:
|
1942 |
msgctxt "quanity: zero"
|
1943 |
msgid "None, still image only"
|
1944 |
msgstr ""
|
1945 |
|
1946 |
#. translators: %d = number
|
1947 |
-
|
1948 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:229
|
1949 |
msgid "%d second"
|
1950 |
msgid_plural "%d seconds"
|
1951 |
msgstr[0] ""
|
1952 |
msgstr[1] ""
|
1953 |
|
1954 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:
|
1955 |
msgid "Maximum video preview length"
|
1956 |
msgstr ""
|
1957 |
|
1958 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:
|
1959 |
msgid "This may limit the video preview length for all videos on this site."
|
1960 |
msgstr ""
|
1961 |
|
1962 |
-
#. translators: 1 = noindex/nofollow/noarchive, 2 = Post, Post type, Category
|
1963 |
-
|
1964 |
-
|
1965 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:277
|
1966 |
msgid "Apply %1$s to %2$s?"
|
1967 |
msgstr ""
|
1968 |
|
1969 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:
|
1970 |
msgid "Robots Settings"
|
1971 |
msgstr ""
|
1972 |
|
1973 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:
|
1974 |
msgid "Warning: No public site should ever enable this option."
|
1975 |
msgstr ""
|
1976 |
|
1977 |
-
#: inc/views/admin/metaboxes/robots-metabox.php:
|
1978 |
msgid "Warning: No site should enable these options for Posts and Pages."
|
1979 |
msgstr ""
|
1980 |
|
@@ -2163,7 +2001,6 @@ msgid "These settings do not affect sharing behavior with the social networks."
|
|
2163 |
msgstr ""
|
2164 |
|
2165 |
#. translators: %s = Learn more URL. Markdown!
|
2166 |
-
|
2167 |
#: inc/views/admin/metaboxes/schema-metabox.php:289
|
2168 |
msgid "These settings are marked for removal. When you clear a field, it will be hidden forever. [Learn more](%s)."
|
2169 |
msgstr ""
|
@@ -2245,9 +2082,7 @@ msgstr ""
|
|
2245 |
msgid "Note: You're using the plain permalink structure; so, no robots.txt file can be generated."
|
2246 |
msgstr ""
|
2247 |
|
2248 |
-
#. translators: 1 = Link to settings, Markdown. 2 = example input, also
|
2249 |
-
#. markdown! Preserve the Markdown as-is!
|
2250 |
-
|
2251 |
#: inc/views/admin/metaboxes/sitemaps-metabox.php:158
|
2252 |
msgid "Change your [Permalink Settings](%1$s). Recommended structure: `%2$s`."
|
2253 |
msgstr ""
|
@@ -2285,7 +2120,6 @@ msgid "The modified time suggests to search engines where to look for content ch
|
|
2285 |
msgstr ""
|
2286 |
|
2287 |
#. translators: the backticks are Markdown! Preserve them as-is!
|
2288 |
-
|
2289 |
#: inc/views/admin/metaboxes/sitemaps-metabox.php:216
|
2290 |
msgid "Add `<lastmod>` to the sitemap?"
|
2291 |
msgstr ""
|
@@ -2299,7 +2133,6 @@ msgid "The priority index suggests to search engines which pages are deemed more
|
|
2299 |
msgstr ""
|
2300 |
|
2301 |
#. translators: the backticks are Markdown! Preserve them as-is!
|
2302 |
-
|
2303 |
#: inc/views/admin/metaboxes/sitemaps-metabox.php:238
|
2304 |
msgid "Add `<priority>` to the sitemap?"
|
2305 |
msgstr ""
|
@@ -2329,7 +2162,6 @@ msgid "Notify Search Engines"
|
|
2329 |
msgstr ""
|
2330 |
|
2331 |
#. translators: %s = Google
|
2332 |
-
|
2333 |
#: inc/views/admin/metaboxes/sitemaps-metabox.php:285
|
2334 |
msgid "Notify %s about sitemap changes?"
|
2335 |
msgstr ""
|
@@ -2459,7 +2291,7 @@ msgid "Discord styles embeds with the theme color. The theme color can also affe
|
|
2459 |
msgstr ""
|
2460 |
|
2461 |
#: inc/views/admin/metaboxes/social-metabox.php:157
|
2462 |
-
msgid "Theme
|
2463 |
msgstr ""
|
2464 |
|
2465 |
#: inc/views/admin/metaboxes/social-metabox.php:165
|
@@ -2516,7 +2348,7 @@ msgid "Your Facebook profile."
|
|
2516 |
msgstr ""
|
2517 |
|
2518 |
#: inc/views/admin/metaboxes/social-metabox.php:242
|
2519 |
-
#: inc/views/admin/metaboxes/social-metabox.php:
|
2520 |
msgid "Authors can override this option on their profile page."
|
2521 |
msgstr ""
|
2522 |
|
@@ -2541,60 +2373,70 @@ msgstr ""
|
|
2541 |
msgid "The Twitter Card type may have the image highlighted, either small at the side or large above."
|
2542 |
msgstr ""
|
2543 |
|
2544 |
-
#: inc/views/admin/metaboxes/social-metabox.php:
|
2545 |
-
msgid "
|
|
|
|
|
|
|
|
|
2546 |
msgstr ""
|
2547 |
|
2548 |
-
#: inc/views/admin/metaboxes/social-metabox.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2549 |
msgid "Website Twitter Profile"
|
2550 |
msgstr ""
|
2551 |
|
2552 |
-
#: inc/views/admin/metaboxes/social-metabox.php:
|
2553 |
-
#: inc/views/admin/metaboxes/social-metabox.php:
|
2554 |
msgid "Find your @username."
|
2555 |
msgstr ""
|
2556 |
|
2557 |
-
#: inc/views/admin/metaboxes/social-metabox.php:
|
2558 |
msgid "Twitter Author Fallback Profile"
|
2559 |
msgstr ""
|
2560 |
|
2561 |
-
#: inc/views/admin/metaboxes/social-metabox.php:
|
2562 |
msgid "oEmbed Settings"
|
2563 |
msgstr ""
|
2564 |
|
2565 |
-
#: inc/views/admin/metaboxes/social-metabox.php:
|
2566 |
msgid "Some social sharing services and clients, like WordPress and Discord, obtain the linked page information via oEmbed."
|
2567 |
msgstr ""
|
2568 |
|
2569 |
-
#: inc/views/admin/metaboxes/social-metabox.php:
|
2570 |
msgid "Remove author name?"
|
2571 |
msgstr ""
|
2572 |
|
2573 |
-
#: inc/views/admin/metaboxes/social-metabox.php:
|
2574 |
-
msgid "Discord shows the page author name above the sharing embed. Check this
|
2575 |
msgstr ""
|
2576 |
|
2577 |
-
#: inc/views/admin/metaboxes/social-metabox.php:
|
2578 |
msgid "Posts"
|
2579 |
msgstr ""
|
2580 |
|
2581 |
-
#: inc/views/admin/metaboxes/social-metabox.php:
|
2582 |
msgid "Post Date Settings"
|
2583 |
msgstr ""
|
2584 |
|
2585 |
-
#: inc/views/admin/metaboxes/social-metabox.php:
|
2586 |
msgid "Some social sites output the shared post's publishing and modified data in the sharing snippet."
|
2587 |
msgstr ""
|
2588 |
|
2589 |
#. translators: the backticks are Markdown! Preserve them as-is!
|
2590 |
-
|
2591 |
-
#: inc/views/admin/metaboxes/social-metabox.php:378
|
2592 |
msgid "Add `article:published_time` to posts?"
|
2593 |
msgstr ""
|
2594 |
|
2595 |
#. translators: the backticks are Markdown! Preserve them as-is!
|
2596 |
-
|
2597 |
-
#: inc/views/admin/metaboxes/social-metabox.php:388
|
2598 |
msgid "Add `article:modified_time` to posts?"
|
2599 |
msgstr ""
|
2600 |
|
@@ -2619,8 +2461,15 @@ msgstr ""
|
|
2619 |
msgid "Prefixes"
|
2620 |
msgstr ""
|
2621 |
|
2622 |
-
|
|
|
|
|
2623 |
|
|
|
|
|
|
|
|
|
|
|
2624 |
#: inc/views/admin/metaboxes/title-metabox.php:108
|
2625 |
msgid "This strips HTML tags, like %s, from the title."
|
2626 |
msgstr ""
|
@@ -2665,10 +2514,6 @@ msgstr ""
|
|
2665 |
msgid "Note: Only use this option if you are aware of its SEO effects."
|
2666 |
msgstr ""
|
2667 |
|
2668 |
-
#: inc/views/admin/metaboxes/title-metabox.php:207
|
2669 |
-
msgid "Category"
|
2670 |
-
msgstr ""
|
2671 |
-
|
2672 |
#: inc/views/admin/metaboxes/title-metabox.php:226
|
2673 |
msgid "Example Category"
|
2674 |
msgstr ""
|
@@ -2722,7 +2567,6 @@ msgid "Get the Yandex verification code."
|
|
2722 |
msgstr ""
|
2723 |
|
2724 |
#. translators: literal translation from '百度搜索资源平台'-Code
|
2725 |
-
|
2726 |
#: inc/views/admin/metaboxes/webmaster-metabox.php:57
|
2727 |
msgid "Baidu Search Resource Platform Code"
|
2728 |
msgstr ""
|
@@ -2786,13 +2630,15 @@ msgid "Use this when you want to rearrange the title parts manually."
|
|
2786 |
msgstr ""
|
2787 |
|
2788 |
#: inc/views/edit/seo-settings-singular.php:204
|
2789 |
-
#: inc/views/edit/seo-settings-tt.php:73
|
|
|
2790 |
#: inc/views/list/quick-post.php:26
|
2791 |
msgid "Link following"
|
2792 |
msgstr ""
|
2793 |
|
2794 |
#: inc/views/edit/seo-settings-singular.php:222
|
2795 |
-
#: inc/views/edit/seo-settings-tt.php:279
|
|
|
2796 |
#: inc/views/list/quick-term.php:57
|
2797 |
msgid "Canonical URL"
|
2798 |
msgstr ""
|
@@ -2811,9 +2657,9 @@ msgid "Note: A non-default selection will overwrite the global homepage settings
|
|
2811 |
msgstr ""
|
2812 |
|
2813 |
#. translators: %s = default option value
|
2814 |
-
|
2815 |
#: inc/views/edit/seo-settings-singular.php:289
|
2816 |
-
#: inc/views/edit/seo-settings-tt.php:316
|
|
|
2817 |
#: inc/views/list/quick-term.php:74
|
2818 |
msgid "Default (%s)"
|
2819 |
msgstr ""
|
@@ -2831,7 +2677,8 @@ msgid "Exclude this page from all archive queries on this site."
|
|
2831 |
msgstr ""
|
2832 |
|
2833 |
#: inc/views/edit/seo-settings-singular.php:347
|
2834 |
-
#: inc/views/edit/seo-settings-tt.php:332
|
|
|
2835 |
#: inc/views/list/quick-term.php:87
|
2836 |
msgid "301 Redirect URL"
|
2837 |
msgstr ""
|
@@ -2861,8 +2708,10 @@ msgstr ""
|
|
2861 |
msgid "Social SEO Settings"
|
2862 |
msgstr ""
|
2863 |
|
2864 |
-
#: inc/views/edit/seo-settings-tt.php:272
|
2865 |
-
#: inc/views/list/
|
|
|
|
|
2866 |
msgid "Visibility SEO Settings"
|
2867 |
msgstr ""
|
2868 |
|
@@ -2870,10 +2719,6 @@ msgstr ""
|
|
2870 |
msgid "These directives may urge robots not to display, follow links on, or create a cached copy of this term."
|
2871 |
msgstr ""
|
2872 |
|
2873 |
-
#: inc/views/list/bulk-post.php:67
|
2874 |
-
msgid "— No Change —"
|
2875 |
-
msgstr ""
|
2876 |
-
|
2877 |
#: inc/views/list/bulk-post.php:68
|
2878 |
msgid "Default (unknown)"
|
2879 |
msgstr ""
|
@@ -2900,13 +2745,11 @@ msgid "XML Sitemap"
|
|
2900 |
msgstr ""
|
2901 |
|
2902 |
#. translators: URLs are in Markdown. Don't forget to localize the URLs.
|
2903 |
-
|
2904 |
#: inc/views/sitemap/xsl-stylesheet.php:244
|
2905 |
msgid "This is a generated XML Sitemap, meant to be consumed by search engines like [Google](https://www.google.com/) or [Bing](https://www.bing.com/)."
|
2906 |
msgstr ""
|
2907 |
|
2908 |
#. translators: URLs are in Markdown. Don't localize this URL.
|
2909 |
-
|
2910 |
#: inc/views/sitemap/xsl-stylesheet.php:264
|
2911 |
msgid "You can find more information on XML sitemaps at [sitemaps.org](https://www.sitemaps.org/)."
|
2912 |
msgstr ""
|
@@ -2924,13 +2767,11 @@ msgid "Priority"
|
|
2924 |
msgstr ""
|
2925 |
|
2926 |
#. translators: URLs are in Markdown.
|
2927 |
-
|
2928 |
#: inc/views/sitemap/xsl-stylesheet.php:366
|
2929 |
msgid "Generated by [The SEO Framework](https://theseoframework.com/)"
|
2930 |
msgstr ""
|
2931 |
|
2932 |
#. translators: %s = term name
|
2933 |
-
|
2934 |
#: inc/views/templates/inpost/primary-term-selector.php:28
|
2935 |
msgid "The buttons below are for primary %s selection."
|
2936 |
msgstr ""
|
@@ -2938,22 +2779,3 @@ msgstr ""
|
|
2938 |
#: inc/views/templates/settings/settings.php:14
|
2939 |
msgid "This post type is disabled, so this option won't work."
|
2940 |
msgstr ""
|
2941 |
-
#. Plugin Name of the plugin/theme
|
2942 |
-
msgid "The SEO Framework"
|
2943 |
-
msgstr ""
|
2944 |
-
|
2945 |
-
#. Plugin URI of the plugin/theme
|
2946 |
-
msgid "https://theseoframework.com/"
|
2947 |
-
msgstr ""
|
2948 |
-
|
2949 |
-
#. Description of the plugin/theme
|
2950 |
-
msgid "An automated, advanced, accessible, unbranded and extremely fast SEO solution for your WordPress website."
|
2951 |
-
msgstr ""
|
2952 |
-
|
2953 |
-
#. Author of the plugin/theme
|
2954 |
-
msgid "The SEO Framework Team"
|
2955 |
-
msgstr ""
|
2956 |
-
|
2957 |
-
#. Author URI of the plugin/theme
|
2958 |
-
msgid "https://theseoframework.com/"
|
2959 |
-
msgstr ""
|
1 |
+
# Copyright (C) 2020 The SEO Framework Team
|
2 |
+
# This file is distributed under the same license as the The SEO Framework plugin.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
+
"Project-Id-Version: The SEO Framework 4.0.6\n"
|
6 |
+
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/trunk\n"
|
7 |
+
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
8 |
+
"Language-Team: LANGUAGE <LL@li.org>\n"
|
9 |
"MIME-Version: 1.0\n"
|
10 |
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
12 |
+
"POT-Creation-Date: 2020-04-28T14:51:39+02:00\n"
|
13 |
+
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
14 |
+
"X-Generator: WP-CLI 2.4.0\n"
|
15 |
+
"X-Domain: autodescription\n"
|
16 |
|
17 |
+
#. Plugin Name of the plugin
|
18 |
+
msgid "The SEO Framework"
|
19 |
+
msgstr ""
|
20 |
+
|
21 |
+
#. Plugin URI of the plugin
|
22 |
+
#. Author URI of the plugin
|
23 |
+
msgid "https://theseoframework.com/"
|
24 |
+
msgstr ""
|
25 |
|
26 |
+
#. Description of the plugin
|
27 |
+
msgid "An automated, advanced, accessible, unbranded and extremely fast SEO solution for your WordPress website."
|
28 |
+
msgstr ""
|
29 |
+
|
30 |
+
#. Author of the plugin
|
31 |
+
msgid "The SEO Framework Team"
|
32 |
+
msgstr ""
|
33 |
+
|
34 |
+
#. translators: %s = Version number, surrounded in markdown-backticks.
|
35 |
+
#: bootstrap/upgrade.php:259
|
36 |
msgid "Thank you for updating The SEO Framework! Your website has been upgraded successfully to use The SEO Framework at database version `%s`."
|
37 |
msgstr ""
|
38 |
|
39 |
+
#: bootstrap/upgrade.php:270
|
40 |
msgid "Thank you for installing The SEO Framework! Your website is now optimized for search and social sharing, automatically. We hope you enjoy our free plugin. Good luck with your site!"
|
41 |
msgstr ""
|
42 |
|
43 |
#. translators: %s = Link, markdown.
|
44 |
+
#: bootstrap/upgrade.php:279
|
|
|
45 |
msgid "The SEO Framework only identifies itself rarely during plugin upgrades. We'd like to use this opportunity to highlight our [plugin setup guide](%s)."
|
46 |
msgstr ""
|
47 |
|
48 |
+
#: bootstrap/upgrade.php:425
|
49 |
msgid "Twitter Photo Cards have been deprecated. Your site now uses Summary Cards when applicable."
|
50 |
msgstr ""
|
51 |
|
52 |
+
#: bootstrap/upgrade.php:455
|
53 |
msgid "The previous sitemap timestamp settings have been converted into new global timestamp settings."
|
54 |
msgstr ""
|
55 |
|
56 |
+
#: bootstrap/upgrade.php:578
|
57 |
msgid "A cronjob is now used to ping search engines, and it alerts them to changes in your sitemap."
|
58 |
msgstr ""
|
59 |
|
60 |
+
#: bootstrap/upgrade.php:593
|
61 |
msgid "The positions in the \"Meta Title Additions Location\" setting for the homepage have been reversed, left to right, but the output has not been changed. If you must downgrade for some reason, remember to switch the location back again."
|
62 |
msgstr ""
|
63 |
|
144 |
msgstr ""
|
145 |
|
146 |
#. translators: %s = Redirect URL markdown
|
147 |
+
#: inc/classes/admin-init.class.php:437
|
|
|
148 |
msgid "There has been an error redirecting. Refresh the page or follow [this link](%s)."
|
149 |
msgstr ""
|
150 |
|
|
|
|
|
|
|
|
|
151 |
#: inc/classes/admin-pages.class.php:62
|
152 |
msgid "SEO Settings"
|
153 |
msgstr ""
|
201 |
msgstr ""
|
202 |
|
203 |
#. translators: %s = number
|
|
|
204 |
#: inc/classes/admin-pages.class.php:1158
|
205 |
msgid "Characters Used: %s"
|
206 |
msgstr ""
|
215 |
msgstr ""
|
216 |
|
217 |
#. translators: %s = Post Type label
|
|
|
218 |
#: inc/classes/bridges/postsettings.class.php:86
|
219 |
msgid "%s SEO Settings"
|
220 |
msgstr ""
|
227 |
msgid "Are you sure you want to reset all SEO settings to their defaults?"
|
228 |
msgstr ""
|
229 |
|
230 |
+
#. translators: Taxonomy term archive title. 1: Taxonomy singular name, 2: Current taxonomy term
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
231 |
#. translators: 1 = 'Assessment(s)', 2 = A list of assessments.
|
|
|
232 |
#: inc/classes/bridges/scripts.class.php:541
|
233 |
+
#: inc/classes/generate-title.class.php:775
|
234 |
+
#: inc/classes/generate-title.class.php:842
|
235 |
#: inc/classes/interpreters/seobar.class.php:342
|
236 |
msgid "%1$s: %2$s"
|
237 |
msgstr ""
|
276 |
msgstr ""
|
277 |
|
278 |
#. translators: %s = term name
|
|
|
279 |
#: inc/classes/bridges/scripts.class.php:897
|
280 |
msgid "Select Primary %s"
|
281 |
msgstr ""
|
282 |
|
283 |
#. translators: %s = term name
|
|
|
284 |
#: inc/classes/bridges/scripts.class.php:902
|
285 |
msgid "Make primary %s"
|
286 |
msgstr ""
|
287 |
|
288 |
#. translators: %s = term name
|
|
|
289 |
#: inc/classes/bridges/scripts.class.php:904
|
290 |
msgid "Primary %s"
|
291 |
msgstr ""
|
292 |
|
293 |
#. translators: Pixel counter. 1: number (value), 2: number (guideline)
|
|
|
294 |
#: inc/classes/bridges/scripts.class.php:999
|
295 |
msgid "%1$d out of %2$d pixels are used."
|
296 |
msgstr ""
|
338 |
msgid "Feed Settings"
|
339 |
msgstr ""
|
340 |
|
341 |
+
#. translators: 1 = An assessment, 2 = Disclaimer, e.g. "take it with a grain of salt"
|
|
|
|
|
342 |
#: inc/classes/builders/seobar-page.class.php:149
|
343 |
#: inc/classes/builders/seobar-page.class.php:364
|
344 |
#: inc/classes/builders/seobar-term.class.php:164
|
359 |
msgstr ""
|
360 |
|
361 |
#. translators: %s = "Untitled"
|
|
|
362 |
#: inc/classes/builders/seobar-page.class.php:156
|
363 |
#: inc/classes/builders/seobar-term.class.php:171
|
364 |
msgid "No title could be fetched, \"%s\" is used instead."
|
490 |
msgstr ""
|
491 |
|
492 |
#. translators: %s = list of duplicated words
|
|
|
493 |
#: inc/classes/builders/seobar-page.class.php:378
|
494 |
#: inc/classes/builders/seobar-term.class.php:366
|
495 |
msgid "Found duplicated words: %s"
|
555 |
msgstr ""
|
556 |
|
557 |
#. translators: 1: Word found, 2: Occurrences
|
|
|
558 |
#: inc/classes/builders/seobar-page.class.php:493
|
559 |
#: inc/classes/builders/seobar-term.class.php:463
|
560 |
msgid "“%1$s” is used %2$d times."
|
638 |
#: inc/classes/builders/seobar-page.class.php:605
|
639 |
#: inc/classes/builders/seobar-term.class.php:560
|
640 |
#: inc/classes/builders/seobar-term.class.php:569
|
641 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:60
|
642 |
#: inc/views/edit/seo-settings-singular.php:196
|
643 |
+
#: inc/views/edit/seo-settings-tt.php:60
|
644 |
+
#: inc/views/list/bulk-post.php:19
|
645 |
+
#: inc/views/list/quick-post.php:19
|
646 |
+
#: inc/views/list/quick-term.php:19
|
647 |
msgid "Indexing"
|
648 |
msgstr ""
|
649 |
|
712 |
#: inc/classes/builders/seobar-page.class.php:759
|
713 |
#: inc/classes/builders/seobar-term.class.php:709
|
714 |
#: inc/classes/builders/seobar-term.class.php:718
|
715 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:66
|
716 |
#: inc/views/list/quick-term.php:26
|
717 |
msgid "Following"
|
718 |
msgstr ""
|
770 |
#: inc/classes/builders/seobar-page.class.php:890
|
771 |
#: inc/classes/builders/seobar-term.class.php:829
|
772 |
#: inc/classes/builders/seobar-term.class.php:838
|
773 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:72
|
774 |
#: inc/views/edit/seo-settings-singular.php:212
|
775 |
+
#: inc/views/edit/seo-settings-tt.php:86
|
776 |
+
#: inc/views/list/bulk-post.php:33
|
777 |
+
#: inc/views/list/quick-post.php:33
|
778 |
+
#: inc/views/list/quick-term.php:33
|
779 |
msgid "Archiving"
|
780 |
msgstr ""
|
781 |
|
965 |
msgstr ""
|
966 |
|
967 |
#. translators: %s = timestamp
|
|
|
968 |
#: inc/classes/builders/sitemap-base.class.php:73
|
969 |
msgid "Sitemap is generated on %s"
|
970 |
msgstr ""
|
974 |
msgstr ""
|
975 |
|
976 |
#: inc/classes/core.class.php:227
|
977 |
+
msgctxt "Plugin extensions"
|
978 |
+
msgid "Extensions"
|
979 |
msgstr ""
|
980 |
|
981 |
#: inc/classes/core.class.php:232
|
982 |
+
msgctxt "Plugin pricing"
|
983 |
+
msgid "Pricing"
|
984 |
msgstr ""
|
985 |
|
986 |
#: inc/classes/core.class.php:265
|
1000 |
msgid "Get Extension Manager"
|
1001 |
msgstr ""
|
1002 |
|
1003 |
+
#. translators: 1: Function name, 2: 'Deprecated', 3: Plugin Version notification, 4: Replacement function
|
|
|
|
|
1004 |
#: inc/classes/debug.class.php:150
|
1005 |
msgid "%1$s is %2$s since version %3$s of The SEO Framework! Use %4$s instead."
|
1006 |
msgstr ""
|
1007 |
|
1008 |
+
#: inc/classes/debug.class.php:152
|
1009 |
+
#: inc/classes/debug.class.php:163
|
1010 |
msgid "deprecated"
|
1011 |
msgstr ""
|
1012 |
|
1013 |
+
#. translators: 1: Function name, 2: 'Deprecated', 3: Plugin Version notification
|
|
|
|
|
1014 |
#: inc/classes/debug.class.php:161
|
1015 |
msgid "%1$s is %2$s since version %3$s of The SEO Framework with no alternative available."
|
1016 |
msgstr ""
|
1017 |
|
1018 |
#. translators: %s = Version number
|
|
|
1019 |
#: inc/classes/debug.class.php:212
|
1020 |
msgid "(This message was added in version %s of The SEO Framework.)"
|
1021 |
msgstr ""
|
1022 |
|
1023 |
+
#. translators: 1: Function name, 2: 'Incorrectly', 3: Error message 4: Plugin Version notification
|
|
|
|
|
1024 |
#: inc/classes/debug.class.php:216
|
1025 |
msgid "%1$s was called %2$s. %3$s %4$s"
|
1026 |
msgstr ""
|
1030 |
msgstr ""
|
1031 |
|
1032 |
#. translators: 1: Method or Property name, 2: Message
|
1033 |
+
#: inc/classes/debug.class.php:266
|
|
|
1034 |
msgid "%1$s is not accessible. %2$s"
|
1035 |
msgstr ""
|
1036 |
|
1040 |
msgstr ""
|
1041 |
|
1042 |
#. translators: %s = Blog page title. Front-end output.
|
1043 |
+
#: inc/classes/generate-description.class.php:721
|
|
|
1044 |
msgid "Latest posts: %s"
|
1045 |
msgstr ""
|
1046 |
|
1047 |
+
#: inc/classes/generate-description.class.php:730
|
1048 |
msgctxt "Placement. e.g. Post Title \"on\" Blog Name"
|
1049 |
msgid "on"
|
1050 |
msgstr ""
|
1051 |
|
1052 |
#. translators: 1: Title, 2: on, 3: Blogname
|
1053 |
#. translators: 1: Option label, 2: [?] option info note, 3: Optional warning
|
1054 |
+
#: inc/classes/generate-description.class.php:734
|
|
|
1055 |
#: inc/views/admin/metaboxes/homepage-metabox.php:434
|
1056 |
#: inc/views/admin/metaboxes/homepage-metabox.php:450
|
1057 |
#: inc/views/admin/metaboxes/homepage-metabox.php:466
|
1058 |
msgid "%1$s %2$s %3$s"
|
1059 |
msgstr ""
|
1060 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1061 |
#. translators: 1 = SEO Bar type title, 2 = Status reason. 3 = Assessments
|
|
|
1062 |
#: inc/classes/interpreters/seobar.class.php:292
|
1063 |
msgid "%1$s: %2$s %3$s"
|
1064 |
msgstr ""
|
1065 |
|
1066 |
+
#. translators: 1 = Assessment number (mind the %d (D)), 2 = Assessment explanation
|
|
|
|
|
1067 |
#: inc/classes/interpreters/seobar.class.php:340
|
1068 |
msgid "%1$d: %2$s"
|
1069 |
msgstr ""
|
1168 |
msgstr ""
|
1169 |
|
1170 |
#. translators: %s = Reading Settings URL. Links are in Markdown!
|
|
|
1171 |
#: inc/views/admin/metaboxes/feed-metabox.php:48
|
1172 |
msgid "Note: The feed is already converted into an excerpt through the [Reading Settings](%s)."
|
1173 |
msgstr ""
|
1364 |
msgstr ""
|
1365 |
|
1366 |
#. translators: %s = HTTP or HTTPS
|
|
|
1367 |
#: inc/views/admin/metaboxes/general-metabox.php:302
|
1368 |
msgid "Detect automatically (%s)"
|
1369 |
msgstr ""
|
1381 |
msgstr ""
|
1382 |
|
1383 |
#. translators: the backticks are Markdown! Preserve them as-is!
|
|
|
1384 |
#: inc/views/admin/metaboxes/general-metabox.php:325
|
1385 |
msgid "Add `rel` link tags to posts and pages?"
|
1386 |
msgstr ""
|
1387 |
|
1388 |
#. translators: the backticks are Markdown! Preserve them as-is!
|
|
|
1389 |
#: inc/views/admin/metaboxes/general-metabox.php:336
|
1390 |
msgid "Add `rel` link tags to archives?"
|
1391 |
msgstr ""
|
1392 |
|
1393 |
#. translators: the backticks are Markdown! Preserve them as-is!
|
|
|
1394 |
#: inc/views/admin/metaboxes/general-metabox.php:347
|
1395 |
msgid "Add `rel` link tags to the homepage?"
|
1396 |
msgstr ""
|
1420 |
msgstr ""
|
1421 |
|
1422 |
#: inc/views/admin/metaboxes/general-metabox.php:420
|
1423 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:325
|
1424 |
msgid "Post Type Settings"
|
1425 |
msgstr ""
|
1426 |
|
1441 |
msgstr ""
|
1442 |
|
1443 |
#: inc/views/admin/metaboxes/general-metabox.php:431
|
1444 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:327
|
1445 |
msgid "These settings are applied to the post type pages and their terms. When terms are shared between post types, all their post types should be checked for this to have an effect."
|
1446 |
msgstr ""
|
1447 |
|
1454 |
msgstr ""
|
1455 |
|
1456 |
#: inc/views/admin/metaboxes/homepage-metabox.php:32
|
1457 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:54
|
1458 |
#: inc/views/admin/metaboxes/sitemaps-metabox.php:20
|
1459 |
#: inc/views/admin/metaboxes/social-metabox.php:20
|
1460 |
#: inc/views/admin/metaboxes/title-metabox.php:57
|
1499 |
msgstr ""
|
1500 |
|
1501 |
#. translators: %s = Homepage URL markdown
|
|
|
1502 |
#: inc/views/admin/metaboxes/homepage-metabox.php:127
|
1503 |
#: inc/views/admin/metaboxes/homepage-metabox.php:177
|
1504 |
msgid "A plugin has been detected that suggests to maintain this option on the [homepage](%s)."
|
1593 |
msgstr ""
|
1594 |
|
1595 |
#. translators: the backticks are Markdown! Preserve them as-is!
|
|
|
1596 |
#: inc/views/admin/metaboxes/homepage-metabox.php:437
|
1597 |
msgid "Apply `noindex` to the homepage?"
|
1598 |
msgstr ""
|
1602 |
msgstr ""
|
1603 |
|
1604 |
#. translators: the backticks are Markdown! Preserve them as-is!
|
|
|
1605 |
#: inc/views/admin/metaboxes/homepage-metabox.php:453
|
1606 |
msgid "Apply `nofollow` to the homepage?"
|
1607 |
msgstr ""
|
1611 |
msgstr ""
|
1612 |
|
1613 |
#. translators: the backticks are Markdown! Preserve them as-is!
|
|
|
1614 |
#: inc/views/admin/metaboxes/homepage-metabox.php:469
|
1615 |
msgid "Apply `noarchive` to the homepage?"
|
1616 |
msgstr ""
|
1625 |
msgstr ""
|
1626 |
|
1627 |
#. translators: %s = Homepage URL markdown
|
|
|
1628 |
#: inc/views/admin/metaboxes/homepage-metabox.php:511
|
1629 |
msgid "Note: These options may be overwritten by the [page settings](%s)."
|
1630 |
msgstr ""
|
1638 |
msgstr ""
|
1639 |
|
1640 |
#. translators: the backticks are Markdown! Preserve them as-is!
|
|
|
1641 |
#: inc/views/admin/metaboxes/homepage-metabox.php:533
|
1642 |
msgid "Apply `noindex` to every second or later page on the homepage?"
|
1643 |
msgstr ""
|
1644 |
|
1645 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:24
|
1646 |
msgid "Category archives"
|
1647 |
msgstr ""
|
1648 |
|
1649 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:25
|
1650 |
msgid "Tag archives"
|
1651 |
msgstr ""
|
1652 |
|
1653 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:26
|
1654 |
msgid "Author pages"
|
1655 |
msgstr ""
|
1656 |
|
1657 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:27
|
1658 |
msgid "Date archives"
|
1659 |
msgstr ""
|
1660 |
|
1661 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:28
|
1662 |
msgid "Search pages"
|
1663 |
msgstr ""
|
1664 |
|
1665 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:30
|
1666 |
msgctxt "...for the entire site"
|
1667 |
msgid "the entire site"
|
1668 |
msgstr ""
|
1669 |
|
1670 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:40
|
1671 |
msgid "These options most likely prevent indexing of the selected archives and pages. If you enable this, the selected archives or pages will urge to be removed from search engine results pages."
|
1672 |
msgstr ""
|
1673 |
|
1674 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:44
|
1675 |
msgid "These options most likely prevent links from being followed on the selected archives and pages. If you enable this, the selected archives or pages in-page links will gain no SEO value, including your internal links."
|
1676 |
msgstr ""
|
1677 |
|
1678 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:48
|
1679 |
msgid "These options most likely prevent caching of the selected archives and pages. If you enable this, bots are urged not create a cached copy of the selected archives or pages."
|
1680 |
msgstr ""
|
1681 |
|
1682 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:93
|
1683 |
msgid "Advanced Query Protection"
|
1684 |
msgstr ""
|
1685 |
|
1686 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:95
|
1687 |
msgid "Some URL queries can cause WordPress to show faux archives. When search engines spot these, they will crawl and index them, which may cause a drop in ranking. Advanced query protection will prevent robots from indexing these archives."
|
1688 |
msgstr ""
|
1689 |
|
1690 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:100
|
1691 |
msgid "Enable advanced query protection?"
|
1692 |
msgstr ""
|
1693 |
|
1694 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:109
|
1695 |
msgid "Paginated Archive Settings"
|
1696 |
msgstr ""
|
1697 |
|
1698 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:111
|
1699 |
msgid "Indexing the second or later page of any archive might cause duplication errors. Search engines look down upon them; therefore, it's recommended to disable indexing of those pages."
|
1700 |
msgstr ""
|
1701 |
|
1702 |
#. translators: the backticks are Markdown! Preserve them as-is!
|
1703 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:118
|
|
|
1704 |
msgid "Apply `noindex` to every second or later archive page?"
|
1705 |
msgstr ""
|
1706 |
|
1707 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:129
|
1708 |
msgid "Copyright Directive Settings"
|
1709 |
msgstr ""
|
1710 |
|
1711 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:131
|
1712 |
msgid "Some search engines allow you to control copyright directives on the content they aggregate. It's best to allow some content to be taken by these aggregators, as that can improve contextualized exposure via snippets and previews. When left unspecified, regional regulations may apply. It is up to the aggregator to honor these requests."
|
1713 |
msgstr ""
|
1714 |
|
1715 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:136
|
1716 |
msgid "Specify aggregator copyright compliance directives?"
|
1717 |
msgstr ""
|
1718 |
|
1719 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:144
|
1720 |
msgid "Unlimited"
|
1721 |
msgstr ""
|
1722 |
|
1723 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:145
|
1724 |
msgctxt "quanity: zero"
|
1725 |
msgid "None, disallow snippet"
|
1726 |
msgstr ""
|
1727 |
|
1728 |
#. translators: %d = number
|
1729 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:149
|
|
|
1730 |
msgid "%d character"
|
1731 |
msgid_plural "%d characters"
|
1732 |
msgstr[0] ""
|
1733 |
msgstr[1] ""
|
1734 |
|
1735 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:155
|
1736 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:241
|
1737 |
msgid "Standard directive"
|
1738 |
msgstr ""
|
1739 |
|
1740 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:156
|
1741 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:242
|
1742 |
msgid "Granular directive"
|
1743 |
msgstr ""
|
1744 |
|
1745 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:179
|
1746 |
msgid "Maximum text snippet length"
|
1747 |
msgstr ""
|
1748 |
|
1749 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:183
|
1750 |
msgid "This may limit the text snippet length for all pages on this site."
|
1751 |
msgstr ""
|
1752 |
|
1753 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:187
|
1754 |
msgid "This directive also imposes a limit on meta descriptions and structured data, which unintentionally restricts the amount of information you can share. Therefore, it's best to use at least a 320 character limit."
|
1755 |
msgstr ""
|
1756 |
|
1757 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:196
|
1758 |
msgctxt "quanity: zero"
|
1759 |
msgid "None, disallow preview"
|
1760 |
msgstr ""
|
1761 |
|
1762 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:197
|
1763 |
msgid "Thumbnail or standard size"
|
1764 |
msgstr ""
|
1765 |
|
1766 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:198
|
1767 |
msgid "Large or full size"
|
1768 |
msgstr ""
|
1769 |
|
1770 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:216
|
1771 |
msgid "Maximum image preview size"
|
1772 |
msgstr ""
|
1773 |
|
1774 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:220
|
1775 |
msgid "This may limit the image preview size for all images from this site."
|
1776 |
msgstr ""
|
1777 |
|
1778 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:230
|
1779 |
msgid "Full video preview"
|
1780 |
msgstr ""
|
1781 |
|
1782 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:231
|
1783 |
msgctxt "quanity: zero"
|
1784 |
msgid "None, still image only"
|
1785 |
msgstr ""
|
1786 |
|
1787 |
#. translators: %d = number
|
1788 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:235
|
|
|
1789 |
msgid "%d second"
|
1790 |
msgid_plural "%d seconds"
|
1791 |
msgstr[0] ""
|
1792 |
msgstr[1] ""
|
1793 |
|
1794 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:264
|
1795 |
msgid "Maximum video preview length"
|
1796 |
msgstr ""
|
1797 |
|
1798 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:268
|
1799 |
msgid "This may limit the video preview length for all videos on this site."
|
1800 |
msgstr ""
|
1801 |
|
1802 |
+
#. translators: 1 = noindex/nofollow/noarchive, 2 = Post, Post type, Category archives, the entire site, etc.
|
1803 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:283
|
|
|
|
|
1804 |
msgid "Apply %1$s to %2$s?"
|
1805 |
msgstr ""
|
1806 |
|
1807 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:288
|
1808 |
msgid "Robots Settings"
|
1809 |
msgstr ""
|
1810 |
|
1811 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:313
|
1812 |
msgid "Warning: No public site should ever enable this option."
|
1813 |
msgstr ""
|
1814 |
|
1815 |
+
#: inc/views/admin/metaboxes/robots-metabox.php:332
|
1816 |
msgid "Warning: No site should enable these options for Posts and Pages."
|
1817 |
msgstr ""
|
1818 |
|
2001 |
msgstr ""
|
2002 |
|
2003 |
#. translators: %s = Learn more URL. Markdown!
|
|
|
2004 |
#: inc/views/admin/metaboxes/schema-metabox.php:289
|
2005 |
msgid "These settings are marked for removal. When you clear a field, it will be hidden forever. [Learn more](%s)."
|
2006 |
msgstr ""
|
2082 |
msgid "Note: You're using the plain permalink structure; so, no robots.txt file can be generated."
|
2083 |
msgstr ""
|
2084 |
|
2085 |
+
#. translators: 1 = Link to settings, Markdown. 2 = example input, also markdown! Preserve the Markdown as-is!
|
|
|
|
|
2086 |
#: inc/views/admin/metaboxes/sitemaps-metabox.php:158
|
2087 |
msgid "Change your [Permalink Settings](%1$s). Recommended structure: `%2$s`."
|
2088 |
msgstr ""
|
2120 |
msgstr ""
|
2121 |
|
2122 |
#. translators: the backticks are Markdown! Preserve them as-is!
|
|
|
2123 |
#: inc/views/admin/metaboxes/sitemaps-metabox.php:216
|
2124 |
msgid "Add `<lastmod>` to the sitemap?"
|
2125 |
msgstr ""
|
2133 |
msgstr ""
|
2134 |
|
2135 |
#. translators: the backticks are Markdown! Preserve them as-is!
|
|
|
2136 |
#: inc/views/admin/metaboxes/sitemaps-metabox.php:238
|
2137 |
msgid "Add `<priority>` to the sitemap?"
|
2138 |
msgstr ""
|
2162 |
msgstr ""
|
2163 |
|
2164 |
#. translators: %s = Google
|
|
|
2165 |
#: inc/views/admin/metaboxes/sitemaps-metabox.php:285
|
2166 |
msgid "Notify %s about sitemap changes?"
|
2167 |
msgstr ""
|
2291 |
msgstr ""
|
2292 |
|
2293 |
#: inc/views/admin/metaboxes/social-metabox.php:157
|
2294 |
+
msgid "Theme Color"
|
2295 |
msgstr ""
|
2296 |
|
2297 |
#: inc/views/admin/metaboxes/social-metabox.php:165
|
2348 |
msgstr ""
|
2349 |
|
2350 |
#: inc/views/admin/metaboxes/social-metabox.php:242
|
2351 |
+
#: inc/views/admin/metaboxes/social-metabox.php:336
|
2352 |
msgid "Authors can override this option on their profile page."
|
2353 |
msgstr ""
|
2354 |
|
2373 |
msgid "The Twitter Card type may have the image highlighted, either small at the side or large above."
|
2374 |
msgstr ""
|
2375 |
|
2376 |
+
#: inc/views/admin/metaboxes/social-metabox.php:286
|
2377 |
+
msgid "Learn more about this card."
|
2378 |
+
msgstr ""
|
2379 |
+
|
2380 |
+
#: inc/views/admin/metaboxes/social-metabox.php:301
|
2381 |
+
msgid "Card and Content Attribution"
|
2382 |
msgstr ""
|
2383 |
|
2384 |
+
#: inc/views/admin/metaboxes/social-metabox.php:304
|
2385 |
+
msgid "Twitter claims users will be able to follow and view the profiles of attributed accounts directly from the card when these fields are filled in."
|
2386 |
+
msgstr ""
|
2387 |
+
|
2388 |
+
#: inc/views/admin/metaboxes/social-metabox.php:305
|
2389 |
+
msgid "However, for now, these fields seem to have no discernible effect."
|
2390 |
+
msgstr ""
|
2391 |
+
|
2392 |
+
#: inc/views/admin/metaboxes/social-metabox.php:310
|
2393 |
msgid "Website Twitter Profile"
|
2394 |
msgstr ""
|
2395 |
|
2396 |
+
#: inc/views/admin/metaboxes/social-metabox.php:314
|
2397 |
+
#: inc/views/admin/metaboxes/social-metabox.php:330
|
2398 |
msgid "Find your @username."
|
2399 |
msgstr ""
|
2400 |
|
2401 |
+
#: inc/views/admin/metaboxes/social-metabox.php:326
|
2402 |
msgid "Twitter Author Fallback Profile"
|
2403 |
msgstr ""
|
2404 |
|
2405 |
+
#: inc/views/admin/metaboxes/social-metabox.php:345
|
2406 |
msgid "oEmbed Settings"
|
2407 |
msgstr ""
|
2408 |
|
2409 |
+
#: inc/views/admin/metaboxes/social-metabox.php:347
|
2410 |
msgid "Some social sharing services and clients, like WordPress and Discord, obtain the linked page information via oEmbed."
|
2411 |
msgstr ""
|
2412 |
|
2413 |
+
#: inc/views/admin/metaboxes/social-metabox.php:355
|
2414 |
msgid "Remove author name?"
|
2415 |
msgstr ""
|
2416 |
|
2417 |
+
#: inc/views/admin/metaboxes/social-metabox.php:356
|
2418 |
+
msgid "Discord shows the page author's name above the sharing embed. Check this option if you find this undesirable."
|
2419 |
msgstr ""
|
2420 |
|
2421 |
+
#: inc/views/admin/metaboxes/social-metabox.php:364
|
2422 |
msgid "Posts"
|
2423 |
msgstr ""
|
2424 |
|
2425 |
+
#: inc/views/admin/metaboxes/social-metabox.php:367
|
2426 |
msgid "Post Date Settings"
|
2427 |
msgstr ""
|
2428 |
|
2429 |
+
#: inc/views/admin/metaboxes/social-metabox.php:369
|
2430 |
msgid "Some social sites output the shared post's publishing and modified data in the sharing snippet."
|
2431 |
msgstr ""
|
2432 |
|
2433 |
#. translators: the backticks are Markdown! Preserve them as-is!
|
2434 |
+
#: inc/views/admin/metaboxes/social-metabox.php:380
|
|
|
2435 |
msgid "Add `article:published_time` to posts?"
|
2436 |
msgstr ""
|
2437 |
|
2438 |
#. translators: the backticks are Markdown! Preserve them as-is!
|
2439 |
+
#: inc/views/admin/metaboxes/social-metabox.php:390
|
|
|
2440 |
msgid "Add `article:modified_time` to posts?"
|
2441 |
msgstr ""
|
2442 |
|
2461 |
msgid "Prefixes"
|
2462 |
msgstr ""
|
2463 |
|
2464 |
+
#: inc/views/admin/metaboxes/title-metabox.php:102
|
2465 |
+
msgid "A title is generated for every page."
|
2466 |
+
msgstr ""
|
2467 |
|
2468 |
+
#: inc/views/admin/metaboxes/title-metabox.php:103
|
2469 |
+
msgid "Some titles may have HTML tags inserted by the author for styling."
|
2470 |
+
msgstr ""
|
2471 |
+
|
2472 |
+
#. translators: %s = HTML tag example
|
2473 |
#: inc/views/admin/metaboxes/title-metabox.php:108
|
2474 |
msgid "This strips HTML tags, like %s, from the title."
|
2475 |
msgstr ""
|
2514 |
msgid "Note: Only use this option if you are aware of its SEO effects."
|
2515 |
msgstr ""
|
2516 |
|
|
|
|
|
|
|
|
|
2517 |
#: inc/views/admin/metaboxes/title-metabox.php:226
|
2518 |
msgid "Example Category"
|
2519 |
msgstr ""
|
2567 |
msgstr ""
|
2568 |
|
2569 |
#. translators: literal translation from '百度搜索资源平台'-Code
|
|
|
2570 |
#: inc/views/admin/metaboxes/webmaster-metabox.php:57
|
2571 |
msgid "Baidu Search Resource Platform Code"
|
2572 |
msgstr ""
|
2630 |
msgstr ""
|
2631 |
|
2632 |
#: inc/views/edit/seo-settings-singular.php:204
|
2633 |
+
#: inc/views/edit/seo-settings-tt.php:73
|
2634 |
+
#: inc/views/list/bulk-post.php:26
|
2635 |
#: inc/views/list/quick-post.php:26
|
2636 |
msgid "Link following"
|
2637 |
msgstr ""
|
2638 |
|
2639 |
#: inc/views/edit/seo-settings-singular.php:222
|
2640 |
+
#: inc/views/edit/seo-settings-tt.php:279
|
2641 |
+
#: inc/views/list/quick-post.php:57
|
2642 |
#: inc/views/list/quick-term.php:57
|
2643 |
msgid "Canonical URL"
|
2644 |
msgstr ""
|
2657 |
msgstr ""
|
2658 |
|
2659 |
#. translators: %s = default option value
|
|
|
2660 |
#: inc/views/edit/seo-settings-singular.php:289
|
2661 |
+
#: inc/views/edit/seo-settings-tt.php:316
|
2662 |
+
#: inc/views/list/quick-post.php:74
|
2663 |
#: inc/views/list/quick-term.php:74
|
2664 |
msgid "Default (%s)"
|
2665 |
msgstr ""
|
2677 |
msgstr ""
|
2678 |
|
2679 |
#: inc/views/edit/seo-settings-singular.php:347
|
2680 |
+
#: inc/views/edit/seo-settings-tt.php:332
|
2681 |
+
#: inc/views/list/quick-post.php:87
|
2682 |
#: inc/views/list/quick-term.php:87
|
2683 |
msgid "301 Redirect URL"
|
2684 |
msgstr ""
|
2708 |
msgid "Social SEO Settings"
|
2709 |
msgstr ""
|
2710 |
|
2711 |
+
#: inc/views/edit/seo-settings-tt.php:272
|
2712 |
+
#: inc/views/list/bulk-post.php:54
|
2713 |
+
#: inc/views/list/quick-post.php:54
|
2714 |
+
#: inc/views/list/quick-term.php:54
|
2715 |
msgid "Visibility SEO Settings"
|
2716 |
msgstr ""
|
2717 |
|
2719 |
msgid "These directives may urge robots not to display, follow links on, or create a cached copy of this term."
|
2720 |
msgstr ""
|
2721 |
|
|
|
|
|
|
|
|
|
2722 |
#: inc/views/list/bulk-post.php:68
|
2723 |
msgid "Default (unknown)"
|
2724 |
msgstr ""
|
2745 |
msgstr ""
|
2746 |
|
2747 |
#. translators: URLs are in Markdown. Don't forget to localize the URLs.
|
|
|
2748 |
#: inc/views/sitemap/xsl-stylesheet.php:244
|
2749 |
msgid "This is a generated XML Sitemap, meant to be consumed by search engines like [Google](https://www.google.com/) or [Bing](https://www.bing.com/)."
|
2750 |
msgstr ""
|
2751 |
|
2752 |
#. translators: URLs are in Markdown. Don't localize this URL.
|
|
|
2753 |
#: inc/views/sitemap/xsl-stylesheet.php:264
|
2754 |
msgid "You can find more information on XML sitemaps at [sitemaps.org](https://www.sitemaps.org/)."
|
2755 |
msgstr ""
|
2767 |
msgstr ""
|
2768 |
|
2769 |
#. translators: URLs are in Markdown.
|
|
|
2770 |
#: inc/views/sitemap/xsl-stylesheet.php:366
|
2771 |
msgid "Generated by [The SEO Framework](https://theseoframework.com/)"
|
2772 |
msgstr ""
|
2773 |
|
2774 |
#. translators: %s = term name
|
|
|
2775 |
#: inc/views/templates/inpost/primary-term-selector.php:28
|
2776 |
msgid "The buttons below are for primary %s selection."
|
2777 |
msgstr ""
|
2779 |
#: inc/views/templates/settings/settings.php:14
|
2780 |
msgid "This post type is disabled, so this option won't work."
|
2781 |
msgstr ""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
lib/js/settings.js
CHANGED
@@ -318,6 +318,9 @@ window.tsfSettings = function( $ ) {
|
|
318 |
/**
|
319 |
* Updates the hover additions placement.
|
320 |
*
|
|
|
|
|
|
|
321 |
* @function
|
322 |
* @return {undefined}
|
323 |
*/
|
@@ -325,14 +328,8 @@ window.tsfSettings = function( $ ) {
|
|
325 |
let oldPlacement = tsfTitle.getState( 'additionPlacement' ),
|
326 |
placement = 'after';
|
327 |
|
328 |
-
if ( tsf.
|
329 |
-
|
330 |
-
placement = 'before';
|
331 |
-
}
|
332 |
-
} else {
|
333 |
-
if ( 'left' === $( '#tsf-home-title-location input:checked' ).val() ) {
|
334 |
-
placement = 'before';
|
335 |
-
}
|
336 |
}
|
337 |
|
338 |
if ( placement !== oldPlacement ) {
|
318 |
/**
|
319 |
* Updates the hover additions placement.
|
320 |
*
|
321 |
+
* @since 4.0.0
|
322 |
+
* @since 4.0.6 No longer changes behavior depending on RTL-status.
|
323 |
+
*
|
324 |
* @function
|
325 |
* @return {undefined}
|
326 |
*/
|
328 |
let oldPlacement = tsfTitle.getState( 'additionPlacement' ),
|
329 |
placement = 'after';
|
330 |
|
331 |
+
if ( 'left' === $( '#tsf-home-title-location input:checked' ).val() ) {
|
332 |
+
placement = 'before';
|
|
|
|
|
|
|
|
|
|
|
|
|
333 |
}
|
334 |
|
335 |
if ( placement !== oldPlacement ) {
|
lib/js/settings.min.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
'use strict';window.tsfSettings=function(a){const b="undefined"!=typeof tsfSettingsL10n&&tsfSettingsL10n,c=()=>{const b=b=>{a(b.target).is(":checked")?(a(".tsf-pixel-counter-wrap").show(),tsfC.triggerCounterUpdate()):a(".tsf-pixel-counter-wrap").hide()};a("#autodescription-site-settings\\[display_character_counter\\]").on("click",b),a("#autodescription-site-settings\\[display_pixel_counter\\]").on("click",b);let c=!1;const d=b=>{if(b.target.name){let d=b.target.name.split(/(?:.+\[)(.+?)(?:])/).join("");a(b.target).is(":checked")?h(d):c&&i(d)}},e=wp.template("tsf-disabled-post-type-help")(),f=a=>"tsf-disabled-post-type-input-clone-"+a,g=a=>[document.getElementById("autodescription-site-settings[noindex_post_types]["+a+"]"),document.getElementById("autodescription-site-settings[nofollow_post_types]["+a+"]"),document.getElementById("autodescription-site-settings[noarchive_post_types]["+a+"]")].filter(a=>a),h=b=>{g(b).forEach(c=>{let d=c.cloneNode(!0);d.type="hidden",d.id+="-cloned",d.classList.add(f(b)),c.disabled=!0,c.dataset.hasWarning=!0,a(c.closest("label")).append(e).append(d)}),tsfTT.triggerReset()},i=a=>{g(a).forEach(b=>{b.dataset.hasWarning&&(b.closest("label").querySelector(".tsf-post-type-warning").remove(),document.querySelectorAll("."+f(a)).forEach(a=>{a.remove()}),b.disabled=!1,b.dataset.hasWarning=!1)})};a(".tsf-disabled-post-types").on("change.tsfSetPostType",d).trigger("change.tsfSetPostType"),c=!0},d=()=>{let b=a(".tsf-color-picker");b.length&&a.each(b,(b,c)=>{let d=a(c),e="",f=d.data("tsf-default-color");d.wpColorPicker({defaultColor:f,width:238,change:()=>{e=d.wpColorPicker("color"),""===e&&(e=f),d.val(e),tsfAys.registerChange()},clear:()=>{f.length&&(d.val(f),d.closest(".wp-picker-container").find(".wp-color-result").css("backgroundColor",f)),tsfAys.registerChange()},palettes:!1})})},e=()=>{let b=document.getElementById("autodescription-site-settings[title_rem_additions]");a(b).on("change",()=>{let c=a(".tsf-title-additions-js");a(b).is(":checked")?c.css("display","none"):c.css("display","inline")}),a(b).trigger("change");a("#tsf-title-location input").on("click",b=>{let c=a(".tsf-title-additions-example-left"),d=a(".tsf-title-additions-example-right");"right"===a(b.target).val()?(c.css("display","none"),d.css("display","inline")):(c.css("display","inline"),d.css("display","none"))});a("#tsf-title-prefixes-toggle :input").on("click",b=>{let c=a(b.target),d=a(".tsf-title-prefix-example");c.is(":checked")?d.css("display","none"):d.css("display","inline")});a("#tsf-title-separator :input").on("click",b=>{let c=b.target.dataset.entity,d="";d=a("<div/>").html(c).text(),a(".tsf-sep-js").text(" "+d+" "),a(window).trigger("tsf-title-sep-updated",[d])})},f=()=>{const c=document.getElementById("autodescription-site-settings[homepage_title]"),d=document.getElementById("autodescription-site-settings[homepage_title_tagline]"),e=document.getElementById("autodescription-site-settings[homepage_tagline]"),f=tsf.escapeString(b.i18n.protectedTitle),g=tsf.escapeString(b.i18n.privateTitle);tsfTitle.setInputElement(c);const h=()=>{let b=tsfTitle.getState("additionPlacement"),c="after";
|
1 |
+
'use strict';window.tsfSettings=function(a){const b="undefined"!=typeof tsfSettingsL10n&&tsfSettingsL10n,c=()=>{const b=b=>{a(b.target).is(":checked")?(a(".tsf-pixel-counter-wrap").show(),tsfC.triggerCounterUpdate()):a(".tsf-pixel-counter-wrap").hide()};a("#autodescription-site-settings\\[display_character_counter\\]").on("click",b),a("#autodescription-site-settings\\[display_pixel_counter\\]").on("click",b);let c=!1;const d=b=>{if(b.target.name){let d=b.target.name.split(/(?:.+\[)(.+?)(?:])/).join("");a(b.target).is(":checked")?h(d):c&&i(d)}},e=wp.template("tsf-disabled-post-type-help")(),f=a=>"tsf-disabled-post-type-input-clone-"+a,g=a=>[document.getElementById("autodescription-site-settings[noindex_post_types]["+a+"]"),document.getElementById("autodescription-site-settings[nofollow_post_types]["+a+"]"),document.getElementById("autodescription-site-settings[noarchive_post_types]["+a+"]")].filter(a=>a),h=b=>{g(b).forEach(c=>{let d=c.cloneNode(!0);d.type="hidden",d.id+="-cloned",d.classList.add(f(b)),c.disabled=!0,c.dataset.hasWarning=!0,a(c.closest("label")).append(e).append(d)}),tsfTT.triggerReset()},i=a=>{g(a).forEach(b=>{b.dataset.hasWarning&&(b.closest("label").querySelector(".tsf-post-type-warning").remove(),document.querySelectorAll("."+f(a)).forEach(a=>{a.remove()}),b.disabled=!1,b.dataset.hasWarning=!1)})};a(".tsf-disabled-post-types").on("change.tsfSetPostType",d).trigger("change.tsfSetPostType"),c=!0},d=()=>{let b=a(".tsf-color-picker");b.length&&a.each(b,(b,c)=>{let d=a(c),e="",f=d.data("tsf-default-color");d.wpColorPicker({defaultColor:f,width:238,change:()=>{e=d.wpColorPicker("color"),""===e&&(e=f),d.val(e),tsfAys.registerChange()},clear:()=>{f.length&&(d.val(f),d.closest(".wp-picker-container").find(".wp-color-result").css("backgroundColor",f)),tsfAys.registerChange()},palettes:!1})})},e=()=>{let b=document.getElementById("autodescription-site-settings[title_rem_additions]");a(b).on("change",()=>{let c=a(".tsf-title-additions-js");a(b).is(":checked")?c.css("display","none"):c.css("display","inline")}),a(b).trigger("change");a("#tsf-title-location input").on("click",b=>{let c=a(".tsf-title-additions-example-left"),d=a(".tsf-title-additions-example-right");"right"===a(b.target).val()?(c.css("display","none"),d.css("display","inline")):(c.css("display","inline"),d.css("display","none"))});a("#tsf-title-prefixes-toggle :input").on("click",b=>{let c=a(b.target),d=a(".tsf-title-prefix-example");c.is(":checked")?d.css("display","none"):d.css("display","inline")});a("#tsf-title-separator :input").on("click",b=>{let c=b.target.dataset.entity,d="";d=a("<div/>").html(c).text(),a(".tsf-sep-js").text(" "+d+" "),a(window).trigger("tsf-title-sep-updated",[d])})},f=()=>{const c=document.getElementById("autodescription-site-settings[homepage_title]"),d=document.getElementById("autodescription-site-settings[homepage_title_tagline]"),e=document.getElementById("autodescription-site-settings[homepage_tagline]"),f=tsf.escapeString(b.i18n.protectedTitle),g=tsf.escapeString(b.i18n.privateTitle);tsfTitle.setInputElement(c);const h=()=>{let b=tsfTitle.getState("additionPlacement"),c="after";"left"===a("#tsf-home-title-location input:checked").val()&&(c="before"),c!==b&&tsfTitle.updateState("additionPlacement",c)};h(),a("#tsf-home-title-location").on("click",":input",h);const i=a=>{let b=tsfTitle.getState("prefixValue"),c="";switch(a){case"password":c=f;break;case"private":c=g;break;default:case"public":c="";}c!==b&&tsfTitle.updateState("prefixValue",c)};b.states.isFrontPrivate?i("private"):b.states.isFrontProtected&&i("password");a(c).on("input.tsfInputTitle",b=>{let c=a(".tsf-custom-title-js"),d=tsf.decodeEntities(tsf.sDoubleSpace(b.target.value.trim()));d.length?c.html(tsf.escapeString(d)):c.html(tsf.escapeString(tsf.decodeEntities(tsfTitle.getState("defaultTitle"))))}),a(c).trigger("input.tsfInputTitle");let j,k=a(".tsf-custom-tagline-js");const l=()=>{clearTimeout(j),j=setTimeout(()=>{let b=tsfTitle.getState("additionValue");b=tsf.decodeEntities(tsf.sDoubleSpace(b.trim())),b.length&&tsfTitle.getState("useTagline")?(k.html(tsf.escapeString(b)),a(".tsf-custom-blogname-js").show()):a(".tsf-custom-blogname-js").hide()})};a(d).on("input.tsfInputTagline",()=>{let a=tsfTitle.getState("additionValue"),b=d.value.trim();b.length||(b=d.placeholder||""),b=tsf.escapeString(tsf.decodeEntities(b.trim())),a!==b&&(tsfTitle.updateState("additionValue",b),l())}),a(d).trigger("input.tsfInputTagline");a(e).on("change.tsfToggleTagline",a=>{let b=!1;a.target.checked?(b=!0,d.readOnly=!1):(b=!1,d.readOnly=!0),tsfTitle.updateState("useTagline",b),l()}),a(e).trigger("change.tsfToggleTagline");a(window).on("tsf-title-sep-updated",(a,b)=>{tsfTitle.updateState("separator",b)}),tsfTitle.enqueueUnregisteredInputTrigger()},g=()=>{tsfDescription.setInputElement(document.getElementById("autodescription-site-settings[homepage_description]")),tsfDescription.enqueueUnregisteredInputTrigger()},h=()=>{const b=()=>{tsfTitle.enqueueUnregisteredInputTrigger(),tsfDescription.enqueueUnregisteredInputTrigger()};a(document).on("postbox-toggled",function(a,c){if("autodescription-homepage-settings"===c.id){let a=c.querySelector(".inside");0<a.offsetHeight&&0<a.offsetWidth&&b()}}),a("#tsf-homepage-tab-general").on("tsf-tab-toggled",tsfTitle.enqueueUnregisteredInputTrigger)},i=()=>{const b=a("#autodescription-site-settings\\[set_copyright_directives\\]"),c=a("#autodescription-site-settings\\[max_snippet_length\\], #autodescription-site-settings\\[max_image_preview\\], #autodescription-site-settings\\[max_video_preview\\]");if(b.length&&c.length){b.on("change.tsfToggleDirectives",b=>{b.target.checked?(c.prop("disabled",!1),a(".tsf-toggle-directives-surrogate").remove()):(c.prop("disabled",!0),c.each((b,c)=>{a("<input />").attr("type","hidden").attr("name",c.name||"").val(c.value||0).addClass("tsf-toggle-directives-surrogate").insertAfter(c)}))}),b.trigger("change.tsfToggleDirectives")}},j=()=>{const b=a("#autodescription-site-settings\\[google_verification\\], #autodescription-site-settings\\[bing_verification\\], #autodescription-site-settings\\[yandex_verification\\], #autodescription-site-settings\\[baidu_verification\\], #autodescription-site-settings\\[pint_verification\\]");if(b.length){const a=a=>{let b=a.originalEvent.clipboardData&&a.originalEvent.clipboardData.getData("text")||void 0;if(b){let c=/<meta[^>]+content=(\"|\')?([^\"\'>\s]+)\1?.*?>/i.exec(b);c&&2 in c&&"string"==typeof c[2]&&c[2].length&&(a.stopPropagation(),a.preventDefault(),a.target.value=c[2],tsfAys.registerChange())}};b.on("paste",a)}},k=()=>{c(),e(),f(),g(),h(),i(),j(),d()},l=()=>{tsfSocial.initTitleInputs({ref:document.getElementById("tsf-title-reference"),meta:document.getElementById("autodescription-site-settings[homepage_title]"),og:document.getElementById("autodescription-site-settings[homepage_og_title]"),tw:document.getElementById("autodescription-site-settings[homepage_twitter_title]")}),tsfSocial.initDescriptionInputs({ref:document.getElementById("tsf-description-reference"),meta:document.getElementById("autodescription-site-settings[homepage_description]"),og:document.getElementById("autodescription-site-settings[homepage_og_description]"),tw:document.getElementById("autodescription-site-settings[homepage_twitter_description]")})},m=()=>confirm(b.i18n.confirmReset),n=()=>{a(".tsf-tabs-radio").on("change",(b,c)=>{let d=a(b.target);if(!d.is(":checked"))return;c="boolean"==typeof c&&c;let e=b.target.id,f=b.target.name,g="tsf-active-tab-content",h="tsf-tab-active",i=a("."+g),j=d.closest(".tsf-nav-tab-wrapper").find("."+h),k=i.find("input:invalid, select:invalid, textarea:invalid");if(k.length)return k[0].reportValidity(),j.prop("checked",!0),d.prop("checked",!1),b.stopPropagation(),b.preventDefault(),!1;let l=a("#"+e+"-content");if(j.removeClass(h),j.siblings("label").removeClass("tsf-no-focus-ring"),d.addClass(h),c){let b=a("."+f+"-content");b.removeClass(g).hide(),l.addClass(g).show(),a("#"+e).trigger("tsf-tab-toggled")}else if(l.length&&!l.is(i)){let b=a("."+f+"-content");b.fadeOut(150,function(){a(this).removeClass(g)}),setTimeout(()=>{l.addClass(g).fadeIn(250)},150),setTimeout(()=>{a("#"+e).trigger("tsf-tab-toggled")},175)}});a(".tsf-nav-tab-wrapper").on("click.tsfNavTab",".tsf-nav-tab",a=>{a.currentTarget.classList.add("tsf-no-focus-ring")});a(document.body).on("tsf-ready",()=>{a(".tsf-tabs-radio:checked").each((b,c)=>{a(c).trigger("change",[!0])})})};return Object.assign({load:()=>{a("div.updated, div.error, div.notice, .notice-error, .notice-warning, .notice-info").insertAfter(".tsf-top-wrap"),a(document.body).on("tsf-onload",k),a(document.body).on("tsf-ready",l),a(".tsf-js-confirm-reset").on("click",m),n()}},{},{l10n:b})}(jQuery),jQuery(window.tsfSettings.load);
|
lib/js/title.js
CHANGED
@@ -198,6 +198,7 @@ window.tsfTitle = function( $ ) {
|
|
198 |
* Updates hover prefix.
|
199 |
*
|
200 |
* @since 4.0.0
|
|
|
201 |
* @access private
|
202 |
*
|
203 |
* @return {undefined}
|
@@ -209,11 +210,19 @@ window.tsfTitle = function( $ ) {
|
|
209 |
if ( prefixValue ) {
|
210 |
switch ( state.prefixPlacement ) {
|
211 |
case 'before':
|
212 |
-
|
|
|
|
|
|
|
|
|
213 |
break;
|
214 |
|
215 |
case 'after':
|
216 |
-
|
|
|
|
|
|
|
|
|
217 |
break;
|
218 |
}
|
219 |
}
|
@@ -376,6 +385,7 @@ window.tsfTitle = function( $ ) {
|
|
376 |
* Used by the character counters, pixel counters, and social meta inputs.
|
377 |
*
|
378 |
* @since 4.0.0
|
|
|
379 |
* @access private
|
380 |
*
|
381 |
* @function
|
@@ -394,13 +404,21 @@ window.tsfTitle = function( $ ) {
|
|
394 |
text = event.target.placeholder;
|
395 |
} else {
|
396 |
if ( prefix.length ) {
|
397 |
-
switch ( state.
|
398 |
case 'before':
|
399 |
-
|
|
|
|
|
|
|
|
|
400 |
break;
|
401 |
|
402 |
case 'after':
|
403 |
-
|
|
|
|
|
|
|
|
|
404 |
break;
|
405 |
}
|
406 |
}
|
198 |
* Updates hover prefix.
|
199 |
*
|
200 |
* @since 4.0.0
|
201 |
+
* @since 4.0.6 Now changes behavior depending on RTL-status.
|
202 |
* @access private
|
203 |
*
|
204 |
* @return {undefined}
|
210 |
if ( prefixValue ) {
|
211 |
switch ( state.prefixPlacement ) {
|
212 |
case 'before':
|
213 |
+
if ( tsf.l10n.states.isRTL ) {
|
214 |
+
value = ' ' + prefixValue;
|
215 |
+
} else {
|
216 |
+
value = prefixValue + ' ';
|
217 |
+
}
|
218 |
break;
|
219 |
|
220 |
case 'after':
|
221 |
+
if ( tsf.l10n.states.isRTL ) {
|
222 |
+
value = prefixValue + ' ';
|
223 |
+
} else {
|
224 |
+
value = ' ' + prefixValue;
|
225 |
+
}
|
226 |
break;
|
227 |
}
|
228 |
}
|
385 |
* Used by the character counters, pixel counters, and social meta inputs.
|
386 |
*
|
387 |
* @since 4.0.0
|
388 |
+
* @since 4.0.6 Now changes behavior depending on RTL-status.
|
389 |
* @access private
|
390 |
*
|
391 |
* @function
|
404 |
text = event.target.placeholder;
|
405 |
} else {
|
406 |
if ( prefix.length ) {
|
407 |
+
switch ( state.prefixPlacement ) {
|
408 |
case 'before':
|
409 |
+
if ( tsf.l10n.states.isRTL ) {
|
410 |
+
text = text + prefix;
|
411 |
+
} else {
|
412 |
+
text = prefix + text;
|
413 |
+
}
|
414 |
break;
|
415 |
|
416 |
case 'after':
|
417 |
+
if ( tsf.l10n.states.isRTL ) {
|
418 |
+
text = prefix + text;
|
419 |
+
} else {
|
420 |
+
text = text + prefix;
|
421 |
+
}
|
422 |
break;
|
423 |
}
|
424 |
}
|
lib/js/title.min.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
'use strict';window.tsfTitle=function(a){const b="undefined"!=typeof tsfTitleL10n&&tsfTitleL10n;let c,d={allowReferenceChange:!0,useTagline:b.states.useTagline,separator:b.states.titleSeparator,additionPlacement:b.states.additionPlacement,prefixPlacement:b.states.prefixPlacement,additionValue:tsf.escapeString(b.states.additionValue.trim()),prefixValue:"",defaultTitle:tsf.escapeString(b.states.defaultTitle.trim())};const e=tsf.escapeString(b.params.untitledTitle);let f="",g="";const h=document.getElementById("tsf-title-placeholder-prefix")||a("</span>")[0],i=document.getElementById("tsf-title-placeholder")||a("</span>")[0],j=a=>a?a in d?d[a]:void 0:d,k=()=>{let a="",b="";if(d.useTagline&&(b=d.additionValue),b)switch(d.additionPlacement){case"before":a=b+" "+d.separator+" ";break;case"after":a=" "+d.separator+" "+b;}f=a||"",i.innerHTML=f},l=()=>{let a="",b=d.prefixValue.trim();if(b)switch(d.prefixPlacement){case"before":a=b+" ";break;case"after":a=" "+b;}g=a||"",h.innerHTML=g},m=function(b){if(!i&&!h)return;let c=a(b.target),e=c.val(),j=!!f.length,k=!!g.length;if(!j&&i&&(i.style.display="none"),!k&&h&&(h.style.display="none"),!j&&!k)return void c.css("text-indent","initial");if(!e.length)return c.css("text-indent","initial"),i&&(i.style.display="none"),void(h&&(h.style.display="none"));let l=c.outerWidth(!0),m=(c.outerHeight(!0)-c.height())/2,n=(l-c.innerWidth())/2,o=tsf.l10n.states.isRTL?"right":"left",p=(c.outerWidth(!0)-c.width())/2,q={display:c.css("display"),lineHeight:c.css("lineHeight"),fontFamily:c.css("fontFamily"),fontWeight:c.css("fontWeight"),fontSize:c.css("fontSize"),letterSpacing:c.css("letterSpacing"),paddingTop:m+"px",paddingBottom:m+"px"},r=a(h),s=a(i),t=0,u=0,v=0,w=0,x=0,y=0;if(k&&(r.css(q),r.css({maxWidth:"initial"}),x=r[0].getBoundingClientRect().width,x<y&&(x=0)),j){let b=0;switch((()=>{let c=a("#tsf-title-offset");c.text(e),c.css({fontFamily:q.fontFamily,fontWeight:q.fontWeight,letterSpacing:q.letterSpacing,fontSize:q.fontSize}),b=c[0].getBoundingClientRect().width})(),t=c[0].getBoundingClientRect().width-n-p-b-x,t<y&&(x+=t,t=0),s.css(q),s.css({maxWidth:"initial"}),d.additionPlacement){case"before":let f=s[0].getBoundingClientRect().width;f=t<f?t:f,f<y&&(f=0),t=f,w+=t,v+=t,u+=p;break;case"after":u+=p+b+x;}}v+=p,x=0>x?0:x,w+=x;let z;k&&(z={},z[o]=v+"px",z.maxWidth=x+"px",r.css(z)),j&&(z={},z[o]=u+"px",z.maxWidth=t+"px",s.css(z)),z={},z["text-indent"]=w+"px",c.css(z)},n=b=>{let c=document.getElementById("tsf-title-reference"),e=d.allowReferenceChange&&b.target.value||d.defaultTitle;if(c){if(e=e.trim(),1>e.length||!d.allowReferenceChange)e=b.target.placeholder;else{if(g.length)switch(d.
|
1 |
+
'use strict';window.tsfTitle=function(a){const b="undefined"!=typeof tsfTitleL10n&&tsfTitleL10n;let c,d={allowReferenceChange:!0,useTagline:b.states.useTagline,separator:b.states.titleSeparator,additionPlacement:b.states.additionPlacement,prefixPlacement:b.states.prefixPlacement,additionValue:tsf.escapeString(b.states.additionValue.trim()),prefixValue:"",defaultTitle:tsf.escapeString(b.states.defaultTitle.trim())};const e=tsf.escapeString(b.params.untitledTitle);let f="",g="";const h=document.getElementById("tsf-title-placeholder-prefix")||a("</span>")[0],i=document.getElementById("tsf-title-placeholder")||a("</span>")[0],j=a=>a?a in d?d[a]:void 0:d,k=()=>{let a="",b="";if(d.useTagline&&(b=d.additionValue),b)switch(d.additionPlacement){case"before":a=b+" "+d.separator+" ";break;case"after":a=" "+d.separator+" "+b;}f=a||"",i.innerHTML=f},l=()=>{let a="",b=d.prefixValue.trim();if(b)switch(d.prefixPlacement){case"before":a=tsf.l10n.states.isRTL?" "+b:b+" ";break;case"after":a=tsf.l10n.states.isRTL?b+" ":" "+b;}g=a||"",h.innerHTML=g},m=function(b){if(!i&&!h)return;let c=a(b.target),e=c.val(),j=!!f.length,k=!!g.length;if(!j&&i&&(i.style.display="none"),!k&&h&&(h.style.display="none"),!j&&!k)return void c.css("text-indent","initial");if(!e.length)return c.css("text-indent","initial"),i&&(i.style.display="none"),void(h&&(h.style.display="none"));let l=c.outerWidth(!0),m=(c.outerHeight(!0)-c.height())/2,n=(l-c.innerWidth())/2,o=tsf.l10n.states.isRTL?"right":"left",p=(c.outerWidth(!0)-c.width())/2,q={display:c.css("display"),lineHeight:c.css("lineHeight"),fontFamily:c.css("fontFamily"),fontWeight:c.css("fontWeight"),fontSize:c.css("fontSize"),letterSpacing:c.css("letterSpacing"),paddingTop:m+"px",paddingBottom:m+"px"},r=a(h),s=a(i),t=0,u=0,v=0,w=0,x=0,y=0;if(k&&(r.css(q),r.css({maxWidth:"initial"}),x=r[0].getBoundingClientRect().width,x<y&&(x=0)),j){let b=0;switch((()=>{let c=a("#tsf-title-offset");c.text(e),c.css({fontFamily:q.fontFamily,fontWeight:q.fontWeight,letterSpacing:q.letterSpacing,fontSize:q.fontSize}),b=c[0].getBoundingClientRect().width})(),t=c[0].getBoundingClientRect().width-n-p-b-x,t<y&&(x+=t,t=0),s.css(q),s.css({maxWidth:"initial"}),d.additionPlacement){case"before":let f=s[0].getBoundingClientRect().width;f=t<f?t:f,f<y&&(f=0),t=f,w+=t,v+=t,u+=p;break;case"after":u+=p+b+x;}}v+=p,x=0>x?0:x,w+=x;let z;k&&(z={},z[o]=v+"px",z.maxWidth=x+"px",r.css(z)),j&&(z={},z[o]=u+"px",z.maxWidth=t+"px",s.css(z)),z={},z["text-indent"]=w+"px",c.css(z)},n=b=>{let c=document.getElementById("tsf-title-reference"),e=d.allowReferenceChange&&b.target.value||d.defaultTitle;if(c){if(e=e.trim(),1>e.length||!d.allowReferenceChange)e=b.target.placeholder;else{if(g.length)switch(d.prefixPlacement){case"before":tsf.l10n.states.isRTL?e+=g:e=g+e;break;case"after":tsf.l10n.states.isRTL?e=g+e:e+=g;}if(f.length)switch(d.additionPlacement){case"before":e=f+e;break;case"after":e+=f;}}c.innerHTML=tsf.escapeString(tsf.decodeEntities(tsf.sDoubleSpace(e.trim()))),setTimeout(()=>{a(c).change()},0)}},o=a=>{!d.allowReferenceChange||a.target.value||(a.target.placeholder=document.getElementById("tsf-title-reference").innerText)},p=a=>{let b=document.getElementById(a.target.id+"_chars"),c=document.getElementById("tsf-title-reference");b&&tsfC&&tsfC.updateCharacterCounter({e:b,text:c.innerHTML,field:"title",type:"search"})},q=a=>{let b=document.getElementById(a.target.id+"_pixels"),c=document.getElementById("tsf-title-reference");b&&tsfC&&tsfC.updatePixelCounter({e:b,text:c.innerHTML,field:"title",type:"search"})},r=()=>{a(c).trigger("input.tsfUpdateTitles")},s=()=>{a(c).trigger("tsf-update-title-counter")},t=a=>{m(a),n(a),o(a),u(a)},u=a=>{p(a),q(a)};let v=0;const w=()=>{clearTimeout(v),v=setTimeout(r,10)},x=()=>{if(!tsfAys)r();else{let a=tsfAys.getChangedState;r(),a||tsfAys.reset()}};let y=0;const z=()=>{clearTimeout(y),y=setTimeout(x,10)},A=b=>{let c=a(b.target).siblings("input").first();if(c.length){let a=c[0];switch(a.focus(),b.detail){case 3:a.setSelectionRange(0,a.value.length);break;case 2:let c,e;"tsf-title-placeholder"===b.target.id&&"after"===d.additionPlacement||"tsf-title-placeholder-prefix"===b.target.id&&tsf.l10n.states.isTRL?(c=a.value.replace(/(\w+|\s+)$/u,"").length,e=a.value.length):(c=0,e=a.value.length-a.value.replace(/^(\s+|\w+)/u,"").length),a.setSelectionRange(c,e);break;case 1:default:let f="tsf-title-placeholder"===b.target.id&&"after"===d.additionPlacement?a.value.length:0;a.setSelectionRange(f,f);}}};let B=window.innerWidth;const C=()=>{let a=window.innerWidth;B<a?782>=B&&782<=a&&x():782<=B&&782>=a&&x(),B=a},D=()=>{h.addEventListener("click",A),i.addEventListener("click",A),a(document).on("wp-window-resized",C),a(window).on("tsf-counter-updated",w)},E=()=>{!c instanceof Element||(a(c).on("input.tsfUpdateTitles",t),a(c).on("tsf-update-title-counter",u),k(),l(),z())};return Object.assign({load:()=>{a(document.body).on("tsf-onload",D),a(document.body).on("tsf-ready",E)}},{setInputElement:a=>{c=a},getState:j,updateState:(a,b)=>{switch(d[a]=b,a){case"prefixValue":case"prefixPlacement":l(),w();break;case"useTagline":case"separator":case"additionValue":case"additionPlacement":k(),w();break;case"allowReferenceChange":case"defaultTitle":default:w();}},triggerCounter:s,triggerInput:r,enqueueTriggerInput:w,triggerUnregisteredInput:x,enqueueUnregisteredInputTrigger:z},{l10n:b,untitledTitle:e})}(jQuery),jQuery(window.tsfTitle.load);
|
readme.txt
CHANGED
@@ -4,7 +4,7 @@ Tags: seo, xml sitemap, google search, open graph, schema.org, twitter card, per
|
|
4 |
Requires at least: 4.9.0
|
5 |
Tested up to: 5.4
|
6 |
Requires PHP: 5.6.0
|
7 |
-
Stable tag: 4.0.
|
8 |
License: GPLv3
|
9 |
License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
10 |
|
@@ -76,10 +76,11 @@ The SEO Framework sends us no information and does not create cookies. Learn mor
|
|
76 |
|
77 |
For additional functionality, check out our free companion plugin [Extension Manager](https://theseoframework.com/?p=2760). It provides numerous free and paid extensions, such as:
|
78 |
|
79 |
-
* [
|
80 |
-
* [Focus](https://theseoframework.com/?p=2305) guides you through the process of writing targeted content that ranks with **focus keywords**, and for Premium users also their inflections and synonyms.
|
81 |
* [Articles](https://theseoframework.com/?p=2303) **enhances your published posts** by automatically adding important Structured Data.
|
82 |
* [Honeypot](https://theseoframework.com/?p=2300) **catches comment spammers** through four lightweight yet powerful ways.
|
|
|
|
|
83 |
* [AMP](https://theseoframework.com/?p=2304) **binds The SEO Framework to the AMP plugin** for AMP supported articles and pages.
|
84 |
* [Monitor](https://theseoframework.com/?p=2302) **keeps track of your website's SEO** optimizations and statistics.
|
85 |
* [Incognito](https://theseoframework.com/?p=2301) **hides all development-comments** from The SEO Framework.
|
@@ -228,6 +229,12 @@ If you wish to display breadcrumbs, then your theme should provide this. Alterna
|
|
228 |
|
229 |
== Changelog ==
|
230 |
|
|
|
|
|
|
|
|
|
|
|
|
|
231 |
= 4.0.5 =
|
232 |
|
233 |
In WordPress, we found various query endpoints that can be malformed to create broken pages. Backlinks to these pages can harm your site's ranking. In this update, we added advanced query protection, which you can enable via the robots meta settings.
|
@@ -236,7 +243,7 @@ The ["Connected Social Pages" input fields will now disappear](https://github.co
|
|
236 |
|
237 |
On the other hand, we added a new feed indexing option, Discord sharing options (oEmbed, theme color), and the aforementioned advanced query protection option. Support for EDD and Polylang has been expanded, and we reintroduced the hyphen option for titles (which is the new default).
|
238 |
|
239 |
-
In this update, we bring a few other quality-of-life changes, as well. We added a dozen new filters, touched up the interface, streamlined the query handler, and [fixed known corner-case issues and bugs](https://theseoframework.com/?p=3505
|
240 |
|
241 |
= 4.0.4 =
|
242 |
|
4 |
Requires at least: 4.9.0
|
5 |
Tested up to: 5.4
|
6 |
Requires PHP: 5.6.0
|
7 |
+
Stable tag: 4.0.6
|
8 |
License: GPLv3
|
9 |
License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
10 |
|
76 |
|
77 |
For additional functionality, check out our free companion plugin [Extension Manager](https://theseoframework.com/?p=2760). It provides numerous free and paid extensions, such as:
|
78 |
|
79 |
+
* [Focus](https://theseoframework.com/?p=2305) guides you through the process of writing targeted content that ranks with **focus keywords and synonyms**.
|
|
|
80 |
* [Articles](https://theseoframework.com/?p=2303) **enhances your published posts** by automatically adding important Structured Data.
|
81 |
* [Honeypot](https://theseoframework.com/?p=2300) **catches comment spammers** through four lightweight yet powerful ways.
|
82 |
+
* [Cord](https://theseoframework.com/?p=3404) helps you connect your website to **Google Analytics and Facebook Pixel**.
|
83 |
+
* [Local](https://theseoframework.com/?p=2306) lets you set up **important local business information** for search engines to consume.
|
84 |
* [AMP](https://theseoframework.com/?p=2304) **binds The SEO Framework to the AMP plugin** for AMP supported articles and pages.
|
85 |
* [Monitor](https://theseoframework.com/?p=2302) **keeps track of your website's SEO** optimizations and statistics.
|
86 |
* [Incognito](https://theseoframework.com/?p=2301) **hides all development-comments** from The SEO Framework.
|
229 |
|
230 |
== Changelog ==
|
231 |
|
232 |
+
= 4.0.6 =
|
233 |
+
|
234 |
+
In this update, we addressed a few issues our amazing users helped investigate. With that, we implemented better bbPress title support, and fixed a bug regarding WooCommerce and term-ID collisions.
|
235 |
+
|
236 |
+
We also increased the entropy for generating object caching keys, addressed some translation and RTL errors, and added [a few new filters](https://theseoframework.com/?p=3537).
|
237 |
+
|
238 |
= 4.0.5 =
|
239 |
|
240 |
In WordPress, we found various query endpoints that can be malformed to create broken pages. Backlinks to these pages can harm your site's ranking. In this update, we added advanced query protection, which you can enable via the robots meta settings.
|
243 |
|
244 |
On the other hand, we added a new feed indexing option, Discord sharing options (oEmbed, theme color), and the aforementioned advanced query protection option. Support for EDD and Polylang has been expanded, and we reintroduced the hyphen option for titles (which is the new default).
|
245 |
|
246 |
+
In this update, we also bring a few other quality-of-life changes, as well. We added a dozen new filters, touched up the interface, streamlined the query handler, and [fixed known corner-case issues and bugs](https://theseoframework.com/?p=3505).
|
247 |
|
248 |
= 4.0.4 =
|
249 |
|