Version Description
- Diminutive Consolidation =
Release date:
- May 8th, 2017
Summarized:
- Now, Polylang is officially supported by The SEO Framework.
- The sitemap now supports plain permalinks. That means it now literally works for every website.
- The robots.txt file has been enhanced, so it now informs you when the output location is incorrect.
- Moreover, various bugs have been fixed, mainly concerning third party plugins.
We're looking for translation editors:
- First, thank you so much to all the translation contributors.
- Now, if you want to see The SEO Framework in your language, head over to this page and feel free to contribute.
- If you wish to easily maintain and keep a close eye on all the contributions for your language, ask us to ask WordPress Polyglots to add you as a contributor.
- Ultimately, it's up to the WordPress Polyglots team to fulfill your request. It generally depends on how well you've submitted translations for you to be accepted.
A few notes about translations:
- If you use a machine to translate for you, note that they can generate out-of-context strings. So keep an eye out for those!
- If you notice that strings are very hard to translate, e.g. because of grammatical gender, let us know!
- Please don't translate "The SEO Framework", it's a registered brand-name.
- Be sure not to add spaces if you see backticks, asterisks, or brackets. They're used for Markdown language construction.
- In TSF, you generally can't use UTF character codes like
♡
, as they're automatically removed or rendered unreadable for added security. Add them as displayed instead: ****.
Detailed log:
If you are a friend, speak the password, and the doors will open, and you can enter.
Download this release
Release Info
Developer | Cybr |
Plugin | The SEO Framework |
Version | 2.9.2 |
Comparing to | |
See all releases |
Code changes from version 2.9.1 to 2.9.2
- autodescription.php +29 -10
- inc/classes/admin-init.class.php +60 -7
- inc/classes/admin-pages.class.php +10 -2
- inc/classes/cache.class.php +9 -5
- inc/classes/compat.class.php +10 -2
- inc/classes/core.class.php +33 -21
- inc/classes/debug.class.php +1 -1
- inc/classes/deprecated.class.php +2 -2
- inc/classes/detect.class.php +8 -3
- inc/classes/doing-it-right.class.php +3 -3
- inc/classes/feed.class.php +1 -1
- inc/classes/generate-description.class.php +38 -10
- inc/classes/generate-image.class.php +3 -2
- inc/classes/generate-ldjson.class.php +3 -2
- inc/classes/generate-title.class.php +17 -7
- inc/classes/generate-url.class.php +148 -104
- inc/classes/generate.class.php +1 -1
- inc/classes/init.class.php +31 -66
- inc/classes/inpost.class.php +1 -1
- inc/classes/load.class.php +1 -1
- inc/classes/metaboxes.class.php +1 -1
- inc/classes/post-data.class.php +1 -1
- inc/classes/query.class.php +23 -1
- inc/classes/render.class.php +82 -4
- inc/classes/sanitize.class.php +1 -3
- inc/classes/site-options.class.php +13 -6
- inc/classes/sitemaps.class.php +87 -15
- inc/classes/term-data.class.php +1 -1
- inc/compat/php-mbstring.php +4 -4
- inc/compat/plugin-polylang.php +187 -0
- inc/compat/plugin-wpforo.php +82 -0
- inc/compat/plugin-wpml.php +63 -37
- inc/functions/deprecated.php +2 -68
- inc/functions/optionsapi.php +1 -1
- inc/functions/plugin-test-server.php +1 -1
- inc/functions/upgrade.php +1 -1
- inc/interfaces/debug.interface.php +1 -1
- inc/views/metaboxes/general-metabox.php +34 -34
- inc/views/metaboxes/schema-metabox.php +10 -9
- inc/views/metaboxes/sitemaps-metabox.php +73 -79
- inc/views/sitemap/xsl-stylesheet.php +8 -6
- language/autodescription.pot +262 -243
- lib/css/tsf-rtl.css +2 -0
- lib/css/tsf-rtl.min.css +1 -1
- lib/css/tsf.css +2 -0
- lib/css/tsf.min.css +1 -1
- lib/js/tsf.externs.js +1 -1
- lib/js/tsf.externs.protected.js +1 -1
- lib/js/tsf.js +56 -47
- lib/js/tsf.min.js +32 -32
- load.php +53 -1
- readme.txt +135 -108
autodescription.php
CHANGED
@@ -3,9 +3,9 @@
|
|
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 any WordPress website.
|
6 |
-
* Version: 2.9.
|
7 |
* Author: Sybre Waaijer
|
8 |
-
* Author URI: https://
|
9 |
* License: GPLv3
|
10 |
* Text Domain: autodescription
|
11 |
* Domain Path: /language
|
@@ -15,7 +15,7 @@ defined( 'ABSPATH' ) or die;
|
|
15 |
|
16 |
/**
|
17 |
* The SEO Framework plugin
|
18 |
-
* Copyright (C) 2015 -
|
19 |
*
|
20 |
* This program is free software: you can redistribute it and/or modify
|
21 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -42,26 +42,43 @@ defined( 'ABSPATH' ) or die;
|
|
42 |
//}},0);
|
43 |
|
44 |
/**
|
45 |
-
*
|
46 |
-
*
|
|
|
|
|
|
|
|
|
|
|
47 |
* @since 1.0.0
|
48 |
*/
|
49 |
-
define( 'THE_SEO_FRAMEWORK_VERSION', '2.9.
|
50 |
|
51 |
/**
|
52 |
-
*
|
|
|
|
|
|
|
53 |
* @since 2.7.0
|
54 |
*/
|
55 |
define( 'THE_SEO_FRAMEWORK_DB_VERSION', '2903' );
|
56 |
|
57 |
/**
|
58 |
-
*
|
|
|
|
|
|
|
|
|
|
|
59 |
* @since 2.2.2
|
60 |
*/
|
61 |
define( 'THE_SEO_FRAMEWORK_SITE_OPTIONS', (string) apply_filters( 'the_seo_framework_site_options', 'autodescription-site-settings' ) );
|
62 |
|
63 |
/**
|
64 |
-
*
|
|
|
|
|
|
|
|
|
65 |
* @since 2.2.2
|
66 |
*/
|
67 |
define( 'THE_SEO_FRAMEWORK_NETWORK_OPTIONS', (string) apply_filters( 'the_seo_framework_network_settings', 'autodescription-network-settings' ) );
|
@@ -139,6 +156,7 @@ the_seo_framework_pre_load();
|
|
139 |
* Determines whether we can "just" load the plugin, or require verification beforehand.
|
140 |
*
|
141 |
* @since 2.8.0
|
|
|
142 |
*/
|
143 |
function the_seo_framework_pre_load() {
|
144 |
if ( get_site_option( 'the_seo_framework_tested_upgrade_version' ) >= THE_SEO_FRAMEWORK_DB_VERSION ) {
|
@@ -180,9 +198,10 @@ function the_seo_framework_load_base_files() {
|
|
180 |
* Load deprecated functions.
|
181 |
*
|
182 |
* @since 2.7.0
|
|
|
183 |
* @uses THE_SEO_FRAMEWORK_DIR_PATH_FUNCT
|
184 |
*/
|
185 |
-
require_once( THE_SEO_FRAMEWORK_DIR_PATH_FUNCT . 'deprecated.php' );
|
186 |
|
187 |
/**
|
188 |
* Load API files.
|
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 any WordPress website.
|
6 |
+
* Version: 2.9.2
|
7 |
* Author: Sybre Waaijer
|
8 |
+
* Author URI: https://theseoframework.com/
|
9 |
* License: GPLv3
|
10 |
* Text Domain: autodescription
|
11 |
* Domain Path: /language
|
15 |
|
16 |
/**
|
17 |
* The SEO Framework plugin
|
18 |
+
* Copyright (C) 2015 - 2017 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
19 |
*
|
20 |
* This program is free software: you can redistribute it and/or modify
|
21 |
* it under the terms of the GNU General Public License version 3 as published
|
42 |
//}},0);
|
43 |
|
44 |
/**
|
45 |
+
* The plugin version.
|
46 |
+
*
|
47 |
+
* Used as a CDN and Browser Cache buster.
|
48 |
+
* Chrome and Firefox cache admin scripts.
|
49 |
+
*
|
50 |
+
* 3 point: x.x.y; x.x is major; y is minor.
|
51 |
+
*
|
52 |
* @since 1.0.0
|
53 |
*/
|
54 |
+
define( 'THE_SEO_FRAMEWORK_VERSION', '2.9.2' );
|
55 |
|
56 |
/**
|
57 |
+
* The plugin Database version.
|
58 |
+
*
|
59 |
+
* Used for lightweight version upgrade comparing.
|
60 |
+
*
|
61 |
* @since 2.7.0
|
62 |
*/
|
63 |
define( 'THE_SEO_FRAMEWORK_DB_VERSION', '2903' );
|
64 |
|
65 |
/**
|
66 |
+
* The plugin options database option_name.
|
67 |
+
*
|
68 |
+
* Used for storing the SEO options array.
|
69 |
+
*
|
70 |
+
* @todo document filter.
|
71 |
+
*
|
72 |
* @since 2.2.2
|
73 |
*/
|
74 |
define( 'THE_SEO_FRAMEWORK_SITE_OPTIONS', (string) apply_filters( 'the_seo_framework_site_options', 'autodescription-site-settings' ) );
|
75 |
|
76 |
/**
|
77 |
+
* The plugin network options.
|
78 |
+
*
|
79 |
+
* @todo document filter.
|
80 |
+
* Unused. @todo remove
|
81 |
+
*
|
82 |
* @since 2.2.2
|
83 |
*/
|
84 |
define( 'THE_SEO_FRAMEWORK_NETWORK_OPTIONS', (string) apply_filters( 'the_seo_framework_network_settings', 'autodescription-network-settings' ) );
|
156 |
* Determines whether we can "just" load the plugin, or require verification beforehand.
|
157 |
*
|
158 |
* @since 2.8.0
|
159 |
+
* @uses get_site_option(), so it will only test once per WordPress installation; multisite included.
|
160 |
*/
|
161 |
function the_seo_framework_pre_load() {
|
162 |
if ( get_site_option( 'the_seo_framework_tested_upgrade_version' ) >= THE_SEO_FRAMEWORK_DB_VERSION ) {
|
198 |
* Load deprecated functions.
|
199 |
*
|
200 |
* @since 2.7.0
|
201 |
+
* @since 2.9.2 No longer called to improve performance.
|
202 |
* @uses THE_SEO_FRAMEWORK_DIR_PATH_FUNCT
|
203 |
*/
|
204 |
+
// require_once( THE_SEO_FRAMEWORK_DIR_PATH_FUNCT . 'deprecated.php' );
|
205 |
|
206 |
/**
|
207 |
* Load API files.
|
inc/classes/admin-init.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -162,6 +162,8 @@ class Admin_Init extends Init {
|
|
162 |
* @since 2.6.0
|
163 |
* @staticvar bool $registered : Prevents Re-registering of the style.
|
164 |
* @access private
|
|
|
|
|
165 |
*/
|
166 |
public function _register_admin_javascript() {
|
167 |
|
@@ -433,7 +435,7 @@ class Admin_Init extends Init {
|
|
433 |
/**
|
434 |
* Checks ajax referred set by set_js_nonces based on capability.
|
435 |
*
|
436 |
-
* Performs die() on
|
437 |
*
|
438 |
* @since 2.9.0
|
439 |
* @access private
|
@@ -521,6 +523,7 @@ class Admin_Init extends Init {
|
|
521 |
* for alerts, etc.
|
522 |
*
|
523 |
* @since 2.2.2
|
|
|
524 |
*
|
525 |
* @param string $page Menu slug.
|
526 |
* @param array $query_args Optional. Associative array of query string arguments
|
@@ -539,12 +542,62 @@ class Admin_Init extends Init {
|
|
539 |
unset( $query_args[ $key ] );
|
540 |
}
|
541 |
|
542 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
543 |
|
544 |
-
\wp_safe_redirect( \esc_url_raw( $url ), 302 );
|
545 |
exit;
|
546 |
}
|
547 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
548 |
/**
|
549 |
* Handles counter option update on AJAX request.
|
550 |
*
|
@@ -561,7 +614,7 @@ class Admin_Init extends Init {
|
|
561 |
//* If current user isn't allowed to edit posts, don't do anything and kill PHP.
|
562 |
if ( ! \current_user_can( 'edit_posts' ) ) {
|
563 |
//* Remove output buffer.
|
564 |
-
$this->
|
565 |
|
566 |
//* Encode and echo results. Requires JSON decode within JS.
|
567 |
echo json_encode( array( 'type' => 'failure', 'value' => '' ) );
|
@@ -587,7 +640,7 @@ class Admin_Init extends Init {
|
|
587 |
);
|
588 |
|
589 |
//* Remove output buffer.
|
590 |
-
$this->
|
591 |
|
592 |
//* Encode and echo results. Requires JSON decode within JS.
|
593 |
echo json_encode( $results );
|
@@ -617,7 +670,7 @@ class Admin_Init extends Init {
|
|
617 |
|
618 |
$attachment_id = \absint( $_POST['id'] );
|
619 |
|
620 |
-
$context = str_replace( '_', '-', $_POST['context'] );
|
621 |
$data = array_map( 'absint', $_POST['cropDetails'] );
|
622 |
$cropped = \wp_crop_image( $attachment_id, $data['x1'], $data['y1'], $data['width'], $data['height'], $data['dst_width'], $data['dst_height'] );
|
623 |
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2017 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
162 |
* @since 2.6.0
|
163 |
* @staticvar bool $registered : Prevents Re-registering of the style.
|
164 |
* @access private
|
165 |
+
*
|
166 |
+
* @return void Early if already registered.
|
167 |
*/
|
168 |
public function _register_admin_javascript() {
|
169 |
|
435 |
/**
|
436 |
* Checks ajax referred set by set_js_nonces based on capability.
|
437 |
*
|
438 |
+
* Performs die() on failure.
|
439 |
*
|
440 |
* @since 2.9.0
|
441 |
* @access private
|
523 |
* for alerts, etc.
|
524 |
*
|
525 |
* @since 2.2.2
|
526 |
+
* @since 2.9.2 : Added user-friendly exception handling.
|
527 |
*
|
528 |
* @param string $page Menu slug.
|
529 |
* @param array $query_args Optional. Associative array of query string arguments
|
542 |
unset( $query_args[ $key ] );
|
543 |
}
|
544 |
|
545 |
+
$target = \add_query_arg( $query_args, $url );
|
546 |
+
$target = \esc_url_raw( $url );
|
547 |
+
|
548 |
+
//* Predict white screen:
|
549 |
+
$headers_sent = headers_sent();
|
550 |
+
|
551 |
+
/**
|
552 |
+
* Dev debug:
|
553 |
+
* 1. Change 302 to 500 if you wish to test headers.
|
554 |
+
* 2. Also force handle_admin_redirect_error() to run.
|
555 |
+
*/
|
556 |
+
\wp_safe_redirect( $target, 302 );
|
557 |
+
|
558 |
+
//* White screen of death for non-debugging users. Let's make it friendlier.
|
559 |
+
if ( $headers_sent ) {
|
560 |
+
$this->handle_admin_redirect_error( $target );
|
561 |
+
}
|
562 |
|
|
|
563 |
exit;
|
564 |
}
|
565 |
|
566 |
+
/**
|
567 |
+
* Provides an accessible error for when redirecting fails.
|
568 |
+
*
|
569 |
+
* @since 2.9.2
|
570 |
+
* @link https://developer.wordpress.org/reference/functions/wp_redirect/
|
571 |
+
*
|
572 |
+
* @param string $target The redirect target location. Should be escaped.
|
573 |
+
* @return void
|
574 |
+
*/
|
575 |
+
protected function handle_admin_redirect_error( $target = '' ) {
|
576 |
+
|
577 |
+
if ( empty( $target ) )
|
578 |
+
return;
|
579 |
+
|
580 |
+
$headers_list = headers_list();
|
581 |
+
$location = sprintf( 'Location: %s', \wp_sanitize_redirect( $target ) );
|
582 |
+
|
583 |
+
//* Test if WordPress' redirect header is sent. Bail if true.
|
584 |
+
if ( in_array( $location, $headers_list, true ) )
|
585 |
+
return;
|
586 |
+
|
587 |
+
//* Output message:
|
588 |
+
printf( '<p><strong>%s</strong></p>',
|
589 |
+
//* Markdown escapes.
|
590 |
+
$this->convert_markdown(
|
591 |
+
sprintf(
|
592 |
+
/* translators: %s = Redirect URL markdown */
|
593 |
+
\esc_html__( 'There has been an error redirecting. Refresh the page or follow [this link](%s).', 'autodescription' ),
|
594 |
+
$target
|
595 |
+
),
|
596 |
+
array( 'a' )
|
597 |
+
)
|
598 |
+
);
|
599 |
+
}
|
600 |
+
|
601 |
/**
|
602 |
* Handles counter option update on AJAX request.
|
603 |
*
|
614 |
//* If current user isn't allowed to edit posts, don't do anything and kill PHP.
|
615 |
if ( ! \current_user_can( 'edit_posts' ) ) {
|
616 |
//* Remove output buffer.
|
617 |
+
$this->clean_response_header();
|
618 |
|
619 |
//* Encode and echo results. Requires JSON decode within JS.
|
620 |
echo json_encode( array( 'type' => 'failure', 'value' => '' ) );
|
640 |
);
|
641 |
|
642 |
//* Remove output buffer.
|
643 |
+
$this->clean_response_header();
|
644 |
|
645 |
//* Encode and echo results. Requires JSON decode within JS.
|
646 |
echo json_encode( $results );
|
670 |
|
671 |
$attachment_id = \absint( $_POST['id'] );
|
672 |
|
673 |
+
$context = \sanitize_key( str_replace( '_', '-', $_POST['context'] ) );
|
674 |
$data = array_map( 'absint', $_POST['cropDetails'] );
|
675 |
$cropped = \wp_crop_image( $attachment_id, $data['x1'], $data['y1'], $data['width'], $data['height'], $data['dst_width'], $data['dst_height'] );
|
676 |
|
inc/classes/admin-pages.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -93,11 +93,18 @@ class Admin_Pages extends Inpost {
|
|
93 |
* Adds menu links under "settings" in the wp-admin dashboard
|
94 |
*
|
95 |
* @since 2.2.2
|
|
|
|
|
96 |
*
|
97 |
-
* @return void
|
98 |
*/
|
99 |
public function add_menu_link() {
|
100 |
|
|
|
|
|
|
|
|
|
|
|
101 |
$menu = array(
|
102 |
'page_title' => \esc_html__( 'SEO Settings', 'autodescription' ),
|
103 |
'menu_title' => \esc_html__( 'SEO', 'autodescription' ),
|
@@ -137,6 +144,7 @@ class Admin_Pages extends Inpost {
|
|
137 |
//* Enqueue scripts
|
138 |
\add_action( 'admin_print_scripts-' . $this->seo_settings_page_hook, array( $this, 'enqueue_admin_javascript' ), 11 );
|
139 |
|
|
|
140 |
}
|
141 |
|
142 |
/**
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2017 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
93 |
* Adds menu links under "settings" in the wp-admin dashboard
|
94 |
*
|
95 |
* @since 2.2.2
|
96 |
+
* @since 2.9.2 Added static cache so the method can only run once.
|
97 |
+
* @staticvar bool $run True if already run.
|
98 |
*
|
99 |
+
* @return void Early if method is already called.
|
100 |
*/
|
101 |
public function add_menu_link() {
|
102 |
|
103 |
+
static $run = false;
|
104 |
+
|
105 |
+
if ( $run )
|
106 |
+
return;
|
107 |
+
|
108 |
$menu = array(
|
109 |
'page_title' => \esc_html__( 'SEO Settings', 'autodescription' ),
|
110 |
'menu_title' => \esc_html__( 'SEO', 'autodescription' ),
|
144 |
//* Enqueue scripts
|
145 |
\add_action( 'admin_print_scripts-' . $this->seo_settings_page_hook, array( $this, 'enqueue_admin_javascript' ), 11 );
|
146 |
|
147 |
+
$run = true;
|
148 |
}
|
149 |
|
150 |
/**
|
inc/classes/cache.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -476,7 +476,7 @@ class Cache extends Sitemaps {
|
|
476 |
* When the caching mechanism changes. Change this value.
|
477 |
* Use hex. e.g. 0, 1, 2, 9, a, b
|
478 |
*/
|
479 |
-
$sitemap_revision = '
|
480 |
$theme_dir_revision = '0';
|
481 |
|
482 |
$this->sitemap_transient = $this->is_option_checked( 'cache_sitemap' ) ? $this->add_cache_key_suffix( 'tsf_sitemap_' . $sitemap_revision ) : '';
|
@@ -656,8 +656,9 @@ class Cache extends Sitemaps {
|
|
656 |
} elseif ( $this->is_search() ) {
|
657 |
$query = '';
|
658 |
|
|
|
659 |
if ( function_exists( 'get_search_query' ) ) {
|
660 |
-
$search_query = \get_search_query();
|
661 |
|
662 |
if ( $search_query )
|
663 |
$query = str_replace( ' ', '', $search_query );
|
@@ -714,7 +715,7 @@ class Cache extends Sitemaps {
|
|
714 |
static $unix = null;
|
715 |
|
716 |
if ( ! isset( $unix ) )
|
717 |
-
$unix =
|
718 |
|
719 |
//* Temporarily disable caches to prevent database spam.
|
720 |
$this->the_seo_framework_use_transients = false;
|
@@ -769,6 +770,7 @@ class Cache extends Sitemaps {
|
|
769 |
* Use this method if you wish to evade the query usage.
|
770 |
*
|
771 |
* @since 2.9.1
|
|
|
772 |
* @staticvar array $cached_id : contains cache strings.
|
773 |
* @see $this->generate_cache_key().
|
774 |
* @see $this->generate_cache_key_by_query() to get cache key from the query.
|
@@ -776,7 +778,7 @@ class Cache extends Sitemaps {
|
|
776 |
* @param int|string|bool $page_id the Taxonomy or Post ID.
|
777 |
* @param string $taxonomy The term taxonomy.
|
778 |
* @param string $type The Post Type.
|
779 |
-
* @return string
|
780 |
*/
|
781 |
public function generate_cache_key_by_type( $page_id, $taxonomy = '', $type = '' ) {
|
782 |
|
@@ -807,6 +809,8 @@ class Cache extends Sitemaps {
|
|
807 |
return $this->add_cache_key_suffix( \esc_sql( $type . '_' . $page_id . '_' . $taxonomy ) );
|
808 |
break;
|
809 |
endswitch;
|
|
|
|
|
810 |
}
|
811 |
|
812 |
/**
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2017 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
476 |
* When the caching mechanism changes. Change this value.
|
477 |
* Use hex. e.g. 0, 1, 2, 9, a, b
|
478 |
*/
|
479 |
+
$sitemap_revision = '3';
|
480 |
$theme_dir_revision = '0';
|
481 |
|
482 |
$this->sitemap_transient = $this->is_option_checked( 'cache_sitemap' ) ? $this->add_cache_key_suffix( 'tsf_sitemap_' . $sitemap_revision ) : '';
|
656 |
} elseif ( $this->is_search() ) {
|
657 |
$query = '';
|
658 |
|
659 |
+
//* TODO figure out why this check is here... admin compat maybe?
|
660 |
if ( function_exists( 'get_search_query' ) ) {
|
661 |
+
$search_query = \get_search_query( $_escaped = true );
|
662 |
|
663 |
if ( $search_query )
|
664 |
$query = str_replace( ' ', '', $search_query );
|
715 |
static $unix = null;
|
716 |
|
717 |
if ( ! isset( $unix ) )
|
718 |
+
$unix = time();
|
719 |
|
720 |
//* Temporarily disable caches to prevent database spam.
|
721 |
$this->the_seo_framework_use_transients = false;
|
770 |
* Use this method if you wish to evade the query usage.
|
771 |
*
|
772 |
* @since 2.9.1
|
773 |
+
* @since 2.9.2 Now returns false when an incorrect $type is supplied.
|
774 |
* @staticvar array $cached_id : contains cache strings.
|
775 |
* @see $this->generate_cache_key().
|
776 |
* @see $this->generate_cache_key_by_query() to get cache key from the query.
|
778 |
* @param int|string|bool $page_id the Taxonomy or Post ID.
|
779 |
* @param string $taxonomy The term taxonomy.
|
780 |
* @param string $type The Post Type.
|
781 |
+
* @return string|bool String the generated cache key. Bool false on failure.
|
782 |
*/
|
783 |
public function generate_cache_key_by_type( $page_id, $taxonomy = '', $type = '' ) {
|
784 |
|
809 |
return $this->add_cache_key_suffix( \esc_sql( $type . '_' . $page_id . '_' . $taxonomy ) );
|
810 |
break;
|
811 |
endswitch;
|
812 |
+
|
813 |
+
return false;
|
814 |
}
|
815 |
|
816 |
/**
|
inc/classes/compat.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -54,6 +54,8 @@ class Compat extends Core {
|
|
54 |
* rather than common paths. As they can require manual FTP upload.
|
55 |
*
|
56 |
* @since 2.8.0
|
|
|
|
|
57 |
*/
|
58 |
protected function load_early_compat_files() {
|
59 |
|
@@ -76,7 +78,10 @@ class Compat extends Core {
|
|
76 |
}
|
77 |
}
|
78 |
|
79 |
-
if ( $this->detect_plugin( array( '
|
|
|
|
|
|
|
80 |
//* WPML
|
81 |
$this->_include_compat( 'wpml', 'plugin' );
|
82 |
} elseif ( $this->detect_plugin( array( 'constants' => array( 'QTX_VERSION' ) ) ) ) {
|
@@ -92,6 +97,9 @@ class Compat extends Core {
|
|
92 |
if ( $this->detect_plugin( array( 'functions' => array( 'bbpress' ) ) ) ) {
|
93 |
//* bbPress
|
94 |
$this->_include_compat( 'bbpress', 'plugin' );
|
|
|
|
|
|
|
95 |
}
|
96 |
}
|
97 |
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2017 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
54 |
* rather than common paths. As they can require manual FTP upload.
|
55 |
*
|
56 |
* @since 2.8.0
|
57 |
+
* @TODO Add transients that will bypass all these checks.
|
58 |
+
* Careful, recheck on each activation -- and even FTP deletion.
|
59 |
*/
|
60 |
protected function load_early_compat_files() {
|
61 |
|
78 |
}
|
79 |
}
|
80 |
|
81 |
+
if ( $this->detect_plugin( array( 'globals' => array( 'polylang' ) ) ) ) {
|
82 |
+
//* PolyLang... it includes compat for WPML, but let's see how this works for now.
|
83 |
+
$this->_include_compat( 'polylang', 'plugin' );
|
84 |
+
} elseif ( $this->detect_plugin( array( 'constants' => array( 'ICL_LANGUAGE_CODE' ) ) ) ) {
|
85 |
//* WPML
|
86 |
$this->_include_compat( 'wpml', 'plugin' );
|
87 |
} elseif ( $this->detect_plugin( array( 'constants' => array( 'QTX_VERSION' ) ) ) ) {
|
97 |
if ( $this->detect_plugin( array( 'functions' => array( 'bbpress' ) ) ) ) {
|
98 |
//* bbPress
|
99 |
$this->_include_compat( 'bbpress', 'plugin' );
|
100 |
+
} elseif ( $this->detect_plugin( array( 'constants' => array( 'WPFORO_BASENAME' ) ) ) ) {
|
101 |
+
//* wpForo
|
102 |
+
$this->_include_compat( 'wpforo', 'plugin' );
|
103 |
}
|
104 |
}
|
105 |
|
inc/classes/core.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -137,7 +137,7 @@ class Core {
|
|
137 |
*
|
138 |
* @return bool True on clear. False otherwise.
|
139 |
*/
|
140 |
-
protected function
|
141 |
|
142 |
if ( $level = ob_get_level() ) {
|
143 |
while ( $level ) {
|
@@ -223,7 +223,7 @@ class Core {
|
|
223 |
'jetpack-portfolio',
|
224 |
);
|
225 |
|
226 |
-
|
227 |
* Applies filters the_seo_framework_supported_post_types : Array The supported post types.
|
228 |
* @since 2.3.1
|
229 |
*/
|
@@ -231,17 +231,19 @@ class Core {
|
|
231 |
|
232 |
$types = \wp_parse_args( $defaults, $post_types );
|
233 |
|
234 |
-
foreach ( $types as $type )
|
235 |
\add_post_type_support( $type, array( 'autodescription-meta' ) );
|
236 |
-
|
237 |
}
|
238 |
|
239 |
/**
|
240 |
* Adds link from plugins page to SEO Settings page.
|
241 |
*
|
242 |
-
* @param array $links The current links.
|
243 |
-
*
|
244 |
* @since 2.2.8
|
|
|
|
|
|
|
|
|
245 |
*/
|
246 |
public function plugin_action_links( $links = array() ) {
|
247 |
|
@@ -250,7 +252,17 @@ class Core {
|
|
250 |
if ( $this->load_options )
|
251 |
$tsf_links['settings'] = '<a href="' . \esc_url( \admin_url( 'admin.php?page=' . $this->seo_settings_page_slug ) ) . '">' . \esc_html__( 'SEO Settings', 'autodescription' ) . '</a>';
|
252 |
|
253 |
-
$tsf_links['home'] = '<a href="' . \esc_url( 'https://theseoframework.com/' ) . '" target="_blank">' . \esc_html_x( 'Plugin Home', 'As in: The Plugin Home Page', 'autodescription' ) . '</a>';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
254 |
|
255 |
return array_merge( $tsf_links, $links );
|
256 |
}
|
@@ -450,13 +462,7 @@ class Core {
|
|
450 |
* @return bool Option is checked.
|
451 |
*/
|
452 |
public function is_option_checked( $option ) {
|
453 |
-
|
454 |
-
$option = $this->get_option( $option );
|
455 |
-
|
456 |
-
if ( $this->is_checked( $option ) )
|
457 |
-
return true;
|
458 |
-
|
459 |
-
return false;
|
460 |
}
|
461 |
|
462 |
/**
|
@@ -592,7 +598,7 @@ class Core {
|
|
592 |
//* Try Daylight savings.
|
593 |
$tzstring = timezone_name_from_abbr( '', $seconds, 1 );
|
594 |
/**
|
595 |
-
* PHP bug workaround.
|
596 |
* @link https://bugs.php.net/bug.php?id=44780
|
597 |
*/
|
598 |
if ( false === $tzstring )
|
@@ -665,9 +671,14 @@ class Core {
|
|
665 |
* @since 2.7.0
|
666 |
*
|
667 |
* @param string $string Required. The string to count words in.
|
668 |
-
* @param int $amount Minimum amount of words to encounter in the string.
|
669 |
-
*
|
670 |
-
* @param int $
|
|
|
|
|
|
|
|
|
|
|
671 |
* @return array Containing arrays of words with their count.
|
672 |
*/
|
673 |
public function get_word_count( $string, $amount = 3, $amount_bother = 5, $bother_length = 3 ) {
|
@@ -725,11 +736,12 @@ class Core {
|
|
725 |
*
|
726 |
* @since 2.8.0
|
727 |
* @since 2.9.0 Now adds a little more relative softness based on rel_lum.
|
|
|
728 |
*
|
729 |
* @param string $hex The 3 to 6 character RGB hex. '#' prefix is supported.
|
730 |
* @return string The hexadecimal RGB relative font color, without '#' prefix.
|
731 |
*/
|
732 |
-
public function
|
733 |
|
734 |
$hex = ltrim( $hex, '#' );
|
735 |
|
@@ -893,7 +905,7 @@ class Core {
|
|
893 |
for ( $i = 0; $i < $count; $i++ ) {
|
894 |
$text = str_replace(
|
895 |
$matches[0][ $i ],
|
896 |
-
sprintf( '<a href="%s" rel="nofollow">%s</a>', \esc_url( $matches[2][ $i ] ), \esc_html( $matches[1][ $i ] ) ),
|
897 |
$text
|
898 |
);
|
899 |
}
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2017 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
137 |
*
|
138 |
* @return bool True on clear. False otherwise.
|
139 |
*/
|
140 |
+
protected function clean_response_header() {
|
141 |
|
142 |
if ( $level = ob_get_level() ) {
|
143 |
while ( $level ) {
|
223 |
'jetpack-portfolio',
|
224 |
);
|
225 |
|
226 |
+
/**
|
227 |
* Applies filters the_seo_framework_supported_post_types : Array The supported post types.
|
228 |
* @since 2.3.1
|
229 |
*/
|
231 |
|
232 |
$types = \wp_parse_args( $defaults, $post_types );
|
233 |
|
234 |
+
foreach ( $types as $type ) {
|
235 |
\add_post_type_support( $type, array( 'autodescription-meta' ) );
|
236 |
+
}
|
237 |
}
|
238 |
|
239 |
/**
|
240 |
* Adds link from plugins page to SEO Settings page.
|
241 |
*
|
|
|
|
|
242 |
* @since 2.2.8
|
243 |
+
* @since 2.9.2 : Added TSFEM link.
|
244 |
+
*
|
245 |
+
* @param array $links The current links.
|
246 |
+
* @return array The plugin links.
|
247 |
*/
|
248 |
public function plugin_action_links( $links = array() ) {
|
249 |
|
252 |
if ( $this->load_options )
|
253 |
$tsf_links['settings'] = '<a href="' . \esc_url( \admin_url( 'admin.php?page=' . $this->seo_settings_page_slug ) ) . '">' . \esc_html__( 'SEO Settings', 'autodescription' ) . '</a>';
|
254 |
|
255 |
+
$tsf_links['home'] = '<a href="' . \esc_url( 'https://theseoframework.com/' ) . '" rel="noopener" target="_blank">' . \esc_html_x( 'Plugin Home', 'As in: The Plugin Home Page', 'autodescription' ) . '</a>';
|
256 |
+
|
257 |
+
/**
|
258 |
+
* These are weak checks.
|
259 |
+
* But it has minimum to no UX/performance impact on failure.
|
260 |
+
*/
|
261 |
+
if ( ! defined( 'TSF_EXTENSION_MANAGER_VERSION' ) ) {
|
262 |
+
$tsfem = \get_plugins( '/the-seo-framework-extension-manager' );
|
263 |
+
if ( empty( $tsfem ) )
|
264 |
+
$tsf_links['tsfem'] = '<a href="' . \esc_url( \__( 'https://wordpress.org/plugins/the-seo-framework-extension-manager/', 'autodescription' ) ) . '" rel="noopener" target="_blank">' . \esc_html_x( 'Extensions', 'Plugin extensions', 'autodescription' ) . '</a>';
|
265 |
+
}
|
266 |
|
267 |
return array_merge( $tsf_links, $links );
|
268 |
}
|
462 |
* @return bool Option is checked.
|
463 |
*/
|
464 |
public function is_option_checked( $option ) {
|
465 |
+
return $this->is_checked( $this->get_option( $option ) );
|
|
|
|
|
|
|
|
|
|
|
|
|
466 |
}
|
467 |
|
468 |
/**
|
598 |
//* Try Daylight savings.
|
599 |
$tzstring = timezone_name_from_abbr( '', $seconds, 1 );
|
600 |
/**
|
601 |
+
* PHP bug workaround. Disable the DST check.
|
602 |
* @link https://bugs.php.net/bug.php?id=44780
|
603 |
*/
|
604 |
if ( false === $tzstring )
|
671 |
* @since 2.7.0
|
672 |
*
|
673 |
* @param string $string Required. The string to count words in.
|
674 |
+
* @param int $amount Minimum amount of words to encounter in the string.
|
675 |
+
* Set to 0 to count all words longer than $bother_length.
|
676 |
+
* @param int $amount_bother Minimum amount of words to encounter in the string
|
677 |
+
* that fall under the $bother_length. Set to 0 to count all words
|
678 |
+
* shorter than $bother_length.
|
679 |
+
* @param int $bother_length The maximum string length of a word to pass for
|
680 |
+
* $amount_bother instead of $amount. Set to 0 to pass all words
|
681 |
+
* through $amount_bother
|
682 |
* @return array Containing arrays of words with their count.
|
683 |
*/
|
684 |
public function get_word_count( $string, $amount = 3, $amount_bother = 5, $bother_length = 3 ) {
|
736 |
*
|
737 |
* @since 2.8.0
|
738 |
* @since 2.9.0 Now adds a little more relative softness based on rel_lum.
|
739 |
+
* @since 2.9.2 (Typo): Renamed from 'get_relatitve_fontcolor' to 'get_relative_fontcolor'.
|
740 |
*
|
741 |
* @param string $hex The 3 to 6 character RGB hex. '#' prefix is supported.
|
742 |
* @return string The hexadecimal RGB relative font color, without '#' prefix.
|
743 |
*/
|
744 |
+
public function get_relative_fontcolor( $hex = '' ) {
|
745 |
|
746 |
$hex = ltrim( $hex, '#' );
|
747 |
|
905 |
for ( $i = 0; $i < $count; $i++ ) {
|
906 |
$text = str_replace(
|
907 |
$matches[0][ $i ],
|
908 |
+
sprintf( '<a href="%s" rel="nofollow noreferrer noopener">%s</a>', \esc_url( $matches[2][ $i ] ), \esc_html( $matches[1][ $i ] ) ),
|
909 |
$text
|
910 |
);
|
911 |
}
|
inc/classes/debug.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2017 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
inc/classes/deprecated.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -247,7 +247,7 @@ final class Deprecated {
|
|
247 |
* @since 2.7.0 No longer used for performance reasons.
|
248 |
* @uses $this->exclude_search_ids()
|
249 |
* @deprecated
|
250 |
-
* @since 2.8.0
|
251 |
*
|
252 |
* @param array $query The possible search query.
|
253 |
* @return void Early if no search query is found.
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2017 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
247 |
* @since 2.7.0 No longer used for performance reasons.
|
248 |
* @uses $this->exclude_search_ids()
|
249 |
* @deprecated
|
250 |
+
* @since 2.8.0 deprecated.
|
251 |
*
|
252 |
* @param array $query The possible search query.
|
253 |
* @return void Early if no search query is found.
|
inc/classes/detect.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -173,7 +173,7 @@ class Detect extends Render {
|
|
173 |
*
|
174 |
* @since 1.3.0
|
175 |
* @since 2.8.0 : 1. Can now check for globals.
|
176 |
-
* 2. Switched order from FAST to SLOW.
|
177 |
*
|
178 |
* @param array $plugins Array of array for constants, classes and / or functions to check for plugin existence.
|
179 |
* @return boolean True if plugin exists or false if plugin constant, class or function not detected.
|
@@ -231,7 +231,8 @@ class Detect extends Render {
|
|
231 |
* @staticvar array $cache
|
232 |
* @uses $this->detect_plugin_multi()
|
233 |
*
|
234 |
-
* @param array $plugins Array of array for constants, classes
|
|
|
235 |
* @param bool $use_cache Bypasses cache if false
|
236 |
*/
|
237 |
public function can_i_use( array $plugins = array(), $use_cache = true ) {
|
@@ -518,6 +519,7 @@ class Detect extends Render {
|
|
518 |
* @since 2.6.0
|
519 |
* @since 2.8.0 Added check_option parameter.
|
520 |
* @since 2.9.0 Now also checks for subdirectory installations.
|
|
|
521 |
*
|
522 |
* @param bool $check_option Whether to check for sitemap option.
|
523 |
* @return bool True when no conflicting plugins are detected or when The SEO Framework's Sitemaps are output.
|
@@ -541,6 +543,9 @@ class Detect extends Render {
|
|
541 |
if ( $this->is_subdirectory_installation() )
|
542 |
return false;
|
543 |
|
|
|
|
|
|
|
544 |
return true;
|
545 |
}
|
546 |
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2017 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
173 |
*
|
174 |
* @since 1.3.0
|
175 |
* @since 2.8.0 : 1. Can now check for globals.
|
176 |
+
* 2. Switched detection order from FAST to SLOW.
|
177 |
*
|
178 |
* @param array $plugins Array of array for constants, classes and / or functions to check for plugin existence.
|
179 |
* @return boolean True if plugin exists or false if plugin constant, class or function not detected.
|
231 |
* @staticvar array $cache
|
232 |
* @uses $this->detect_plugin_multi()
|
233 |
*
|
234 |
+
* @param array $plugins Array of array for globals, constants, classes
|
235 |
+
* and/or functions to check for plugin existence.
|
236 |
* @param bool $use_cache Bypasses cache if false
|
237 |
*/
|
238 |
public function can_i_use( array $plugins = array(), $use_cache = true ) {
|
519 |
* @since 2.6.0
|
520 |
* @since 2.8.0 Added check_option parameter.
|
521 |
* @since 2.9.0 Now also checks for subdirectory installations.
|
522 |
+
* @since 2.9.2 Now also checks for permalinks.
|
523 |
*
|
524 |
* @param bool $check_option Whether to check for sitemap option.
|
525 |
* @return bool True when no conflicting plugins are detected or when The SEO Framework's Sitemaps are output.
|
543 |
if ( $this->is_subdirectory_installation() )
|
544 |
return false;
|
545 |
|
546 |
+
if ( ! $this->pretty_permalinks )
|
547 |
+
return false;
|
548 |
+
|
549 |
return true;
|
550 |
}
|
551 |
|
inc/classes/doing-it-right.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -1048,10 +1048,10 @@ class Doing_It_Right extends Generate_Ldjson {
|
|
1048 |
*/
|
1049 |
$desc_value = ctype_upper( $desc_value ) ? $desc_value : ucfirst( $desc_value );
|
1050 |
|
1051 |
-
/* translators: 1: Word, 2:
|
1052 |
$notice .= sprintf( \esc_attr__( '%1$s is used %2$d times.', 'autodescription' ), '<span>' . $desc_value . '</span>', $desc_count );
|
1053 |
|
1054 |
-
//* Don't add break at last
|
1055 |
$notice .= $i === $count ? '' : '<br>';
|
1056 |
$i++;
|
1057 |
}
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2017 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
1048 |
*/
|
1049 |
$desc_value = ctype_upper( $desc_value ) ? $desc_value : ucfirst( $desc_value );
|
1050 |
|
1051 |
+
/* translators: 1: Word, 2: Occurrences */
|
1052 |
$notice .= sprintf( \esc_attr__( '%1$s is used %2$d times.', 'autodescription' ), '<span>' . $desc_value . '</span>', $desc_count );
|
1053 |
|
1054 |
+
//* Don't add break at last occurrence.
|
1055 |
$notice .= $i === $count ? '' : '<br>';
|
1056 |
$i++;
|
1057 |
}
|
inc/classes/feed.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2017 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
inc/classes/generate-description.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -166,14 +166,15 @@ class Generate_Description extends Generate {
|
|
166 |
/**
|
167 |
* Reparses description args.
|
168 |
*
|
169 |
-
* @param array $args required The passed arguments.
|
170 |
-
*
|
171 |
* @since 2.6.0
|
|
|
|
|
|
|
172 |
* @return array $args parsed args.
|
173 |
*/
|
174 |
public function reparse_description_args( $args = array() ) {
|
175 |
|
176 |
-
$default_args = $this->parse_description_args(
|
177 |
|
178 |
if ( is_array( $args ) ) {
|
179 |
if ( empty( $args ) ) {
|
@@ -651,6 +652,7 @@ class Generate_Description extends Generate {
|
|
651 |
* Generates description additions.
|
652 |
*
|
653 |
* @since 2.6.0
|
|
|
654 |
* @staticvar array $title string of titles.
|
655 |
* @staticvar string $on
|
656 |
* @access private
|
@@ -699,12 +701,38 @@ class Generate_Description extends Generate {
|
|
699 |
$sep = '';
|
700 |
}
|
701 |
|
702 |
-
|
703 |
-
|
704 |
-
|
705 |
-
|
706 |
-
|
707 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
708 |
}
|
709 |
|
710 |
/**
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2017 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
166 |
/**
|
167 |
* Reparses description args.
|
168 |
*
|
|
|
|
|
169 |
* @since 2.6.0
|
170 |
+
* @since 2.9.2 Now passes args to filter.
|
171 |
+
*
|
172 |
+
* @param array $args required The passed arguments.
|
173 |
* @return array $args parsed args.
|
174 |
*/
|
175 |
public function reparse_description_args( $args = array() ) {
|
176 |
|
177 |
+
$default_args = $this->parse_description_args( $args, '', true );
|
178 |
|
179 |
if ( is_array( $args ) ) {
|
180 |
if ( empty( $args ) ) {
|
652 |
* Generates description additions.
|
653 |
*
|
654 |
* @since 2.6.0
|
655 |
+
* @since 2.9.2 Added filter.
|
656 |
* @staticvar array $title string of titles.
|
657 |
* @staticvar string $on
|
658 |
* @access private
|
701 |
$sep = '';
|
702 |
}
|
703 |
|
704 |
+
if ( \has_filter( 'the_seo_framework_generated_description_additions' ) ) {
|
705 |
+
/**
|
706 |
+
* Applies filters 'the_seo_framework_generated_description_additions'
|
707 |
+
*
|
708 |
+
* @since 2.9.2
|
709 |
+
*
|
710 |
+
* @param array $data The description data.
|
711 |
+
* @param int $id The object ID.
|
712 |
+
* @param mixed $term The term object, or empty (falsy).
|
713 |
+
* @param bool $ignore Whether the settings have been ignored.
|
714 |
+
*/
|
715 |
+
$data = \apply_filters_ref_array( 'the_seo_framework_generated_description_additions', array(
|
716 |
+
array(
|
717 |
+
'title' => $title[ $id ],
|
718 |
+
'on' => $on,
|
719 |
+
'blogname' => $blogname,
|
720 |
+
'sep' => $sep,
|
721 |
+
),
|
722 |
+
$id,
|
723 |
+
$term,
|
724 |
+
$ignore,
|
725 |
+
) );
|
726 |
+
} else {
|
727 |
+
$data = array(
|
728 |
+
'title' => $title[ $id ],
|
729 |
+
'on' => $on,
|
730 |
+
'blogname' => $blogname,
|
731 |
+
'sep' => $sep,
|
732 |
+
);
|
733 |
+
}
|
734 |
+
|
735 |
+
return $data;
|
736 |
}
|
737 |
|
738 |
/**
|
inc/classes/generate-image.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -221,13 +221,14 @@ class Generate_Image extends Generate_Url {
|
|
221 |
* Reparses image args.
|
222 |
*
|
223 |
* @since 2.6.6
|
|
|
224 |
*
|
225 |
* @param array $args required The passed arguments.
|
226 |
* @return array $args parsed args.
|
227 |
*/
|
228 |
public function reparse_image_args( $args = array() ) {
|
229 |
|
230 |
-
$default_args = $this->parse_image_args(
|
231 |
|
232 |
if ( empty( $args ) ) {
|
233 |
$args = $default_args;
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2017 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
221 |
* Reparses image args.
|
222 |
*
|
223 |
* @since 2.6.6
|
224 |
+
* @since 2.9.2 Now passes args to filter.
|
225 |
*
|
226 |
* @param array $args required The passed arguments.
|
227 |
* @return array $args parsed args.
|
228 |
*/
|
229 |
public function reparse_image_args( $args = array() ) {
|
230 |
|
231 |
+
$default_args = $this->parse_image_args( $args, '', true );
|
232 |
|
233 |
if ( empty( $args ) ) {
|
234 |
$args = $default_args;
|
inc/classes/generate-ldjson.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -924,6 +924,7 @@ class Generate_Ldjson extends Generate_Image {
|
|
924 |
* Return LD+Json Knowledge Graph helper.
|
925 |
*
|
926 |
* @since 2.2.8
|
|
|
927 |
*
|
928 |
* @return string LD+json Knowledge Graph helper.
|
929 |
*/
|
@@ -943,7 +944,7 @@ class Generate_Ldjson extends Generate_Image {
|
|
943 |
$context = $this->schema_context();
|
944 |
$type = json_encode( ucfirst( $knowledge_type ) );
|
945 |
$name = json_encode( $knowledge_name );
|
946 |
-
$url =
|
947 |
|
948 |
$logo = '';
|
949 |
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2017 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
924 |
* Return LD+Json Knowledge Graph helper.
|
925 |
*
|
926 |
* @since 2.2.8
|
927 |
+
* @since 2.9.2 : Now grabs home URL from cache.
|
928 |
*
|
929 |
* @return string LD+json Knowledge Graph helper.
|
930 |
*/
|
944 |
$context = $this->schema_context();
|
945 |
$type = json_encode( ucfirst( $knowledge_type ) );
|
946 |
$name = json_encode( $knowledge_name );
|
947 |
+
$url = $this->schema_home_url();
|
948 |
|
949 |
$logo = '';
|
950 |
|
inc/classes/generate-title.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -191,13 +191,14 @@ class Generate_Title extends Generate_Description {
|
|
191 |
* Reparses title args.
|
192 |
*
|
193 |
* @since 2.6.0
|
|
|
194 |
*
|
195 |
* @param array $args required The passed arguments.
|
196 |
* @return array $args parsed args.
|
197 |
*/
|
198 |
public function reparse_title_args( $args = array() ) {
|
199 |
|
200 |
-
$default_args = $this->parse_title_args(
|
201 |
|
202 |
if ( is_array( $args ) ) {
|
203 |
if ( empty( $args ) ) {
|
@@ -785,9 +786,11 @@ class Generate_Title extends Generate_Description {
|
|
785 |
|
786 |
/**
|
787 |
* Gets the archive Title, including filter. Also works in admin.
|
|
|
788 |
* @NOTE Taken from WordPress core. Altered to work in the Admin area.
|
789 |
*
|
790 |
* @since 2.6.0
|
|
|
791 |
*
|
792 |
* @param object $term The Term object.
|
793 |
* @param array $args The Title arguments.
|
@@ -822,7 +825,7 @@ class Generate_Title extends Generate_Description {
|
|
822 |
$title = $use_prefix ? sprintf( \__( '%1$s: %2$s', 'autodescription' ), $this->get_the_term_name( $term ), $title ) : $title;
|
823 |
} elseif ( $this->is_author() ) {
|
824 |
$title = \get_the_author();
|
825 |
-
|
826 |
$title = $use_prefix ? sprintf( \__( 'Author: %s', 'autodescription' ), $title ) : $title;
|
827 |
} elseif ( $this->is_date() ) {
|
828 |
if ( $this->is_year() ) {
|
@@ -886,7 +889,14 @@ class Generate_Title extends Generate_Description {
|
|
886 |
$title = \__( 'Archives', 'autodescription' );
|
887 |
}
|
888 |
|
889 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
890 |
}
|
891 |
|
892 |
/**
|
@@ -1268,9 +1278,9 @@ class Generate_Title extends Generate_Description {
|
|
1268 |
|
1269 |
/**
|
1270 |
* Applies filters the_seo_framework_use_archive_title_prefix : {
|
1271 |
-
*
|
1272 |
-
*
|
1273 |
-
*
|
1274 |
*
|
1275 |
* @since 2.6.0
|
1276 |
*/
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2017 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
191 |
* Reparses title args.
|
192 |
*
|
193 |
* @since 2.6.0
|
194 |
+
* @since 2.9.2 Now passes args to filter.
|
195 |
*
|
196 |
* @param array $args required The passed arguments.
|
197 |
* @return array $args parsed args.
|
198 |
*/
|
199 |
public function reparse_title_args( $args = array() ) {
|
200 |
|
201 |
+
$default_args = $this->parse_title_args( $args, '', true );
|
202 |
|
203 |
if ( is_array( $args ) ) {
|
204 |
if ( empty( $args ) ) {
|
786 |
|
787 |
/**
|
788 |
* Gets the archive Title, including filter. Also works in admin.
|
789 |
+
*
|
790 |
* @NOTE Taken from WordPress core. Altered to work in the Admin area.
|
791 |
*
|
792 |
* @since 2.6.0
|
793 |
+
* @since 2.9.2 : Added WordPress core filter 'get_the_archive_title'
|
794 |
*
|
795 |
* @param object $term The Term object.
|
796 |
* @param array $args The Title arguments.
|
825 |
$title = $use_prefix ? sprintf( \__( '%1$s: %2$s', 'autodescription' ), $this->get_the_term_name( $term ), $title ) : $title;
|
826 |
} elseif ( $this->is_author() ) {
|
827 |
$title = \get_the_author();
|
828 |
+
/* translators: Front-end output. */
|
829 |
$title = $use_prefix ? sprintf( \__( 'Author: %s', 'autodescription' ), $title ) : $title;
|
830 |
} elseif ( $this->is_date() ) {
|
831 |
if ( $this->is_year() ) {
|
889 |
$title = \__( 'Archives', 'autodescription' );
|
890 |
}
|
891 |
|
892 |
+
/**
|
893 |
+
* Filters the archive title.
|
894 |
+
*
|
895 |
+
* @since WordPress Core 4.1.0
|
896 |
+
*
|
897 |
+
* @param string $title Archive title to be displayed.
|
898 |
+
*/
|
899 |
+
return \apply_filters( 'get_the_archive_title', $title );
|
900 |
}
|
901 |
|
902 |
/**
|
1278 |
|
1279 |
/**
|
1280 |
* Applies filters the_seo_framework_use_archive_title_prefix : {
|
1281 |
+
* @param bool true to add prefix.
|
1282 |
+
* @param object $term The Term object.
|
1283 |
+
* }
|
1284 |
*
|
1285 |
* @since 2.6.0
|
1286 |
*/
|
inc/classes/generate-url.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -66,6 +66,8 @@ class Generate_Url extends Generate_Title {
|
|
66 |
* @since 2.4.2 : Refactored arguments
|
67 |
* @since 2.8.0 : No longer tolerates $id as Post object.
|
68 |
* @since 2.9.0 : When using 'home => true' args parameter, the home path is added when set.
|
|
|
|
|
69 |
*
|
70 |
* @param string $url the url
|
71 |
* @param array $args : accepted args : {
|
@@ -126,32 +128,43 @@ class Generate_Url extends Generate_Title {
|
|
126 |
$path = $this->get_home_path();
|
127 |
}
|
128 |
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
* @param int $id The current post, page or term ID.
|
136 |
-
* @param bool $external Whether the call is made from outside the current ID scope. Like from the Sitemap.
|
137 |
-
*/
|
138 |
-
$path = (string) \apply_filters( 'the_seo_framework_url_path', $path, $args['id'], $args['external'] );
|
139 |
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
151 |
|
152 |
-
|
153 |
-
|
154 |
-
|
|
|
155 |
}
|
156 |
|
157 |
//* Non-custom URL
|
@@ -194,6 +207,8 @@ class Generate_Url extends Generate_Title {
|
|
194 |
* Parse and sanitize url args.
|
195 |
*
|
196 |
* @since 2.4.2
|
|
|
|
|
197 |
*
|
198 |
* @param array $args required The passed arguments.
|
199 |
* @param array $defaults The default arguments.
|
@@ -203,7 +218,7 @@ class Generate_Url extends Generate_Title {
|
|
203 |
public function parse_url_args( $args = array(), $defaults = array(), $get_defaults = false ) {
|
204 |
|
205 |
//* Passing back the defaults reduces the memory usage.
|
206 |
-
if ( empty( $defaults ) )
|
207 |
$defaults = array(
|
208 |
'paged' => false,
|
209 |
'paged_plural' => true,
|
@@ -217,27 +232,33 @@ class Generate_Url extends Generate_Title {
|
|
217 |
'id' => $this->get_the_real_ID(),
|
218 |
);
|
219 |
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
241 |
|
242 |
//* Return early if it's only a default args request.
|
243 |
if ( $get_defaults )
|
@@ -261,14 +282,15 @@ class Generate_Url extends Generate_Title {
|
|
261 |
/**
|
262 |
* Reparse URL args.
|
263 |
*
|
264 |
-
* @param array $args required The passed arguments.
|
265 |
-
*
|
266 |
* @since 2.6.2
|
|
|
|
|
|
|
267 |
* @return array $args parsed args.
|
268 |
*/
|
269 |
public function reparse_url_args( $args = array() ) {
|
270 |
|
271 |
-
$default_args = $this->parse_url_args(
|
272 |
|
273 |
if ( is_array( $args ) ) {
|
274 |
if ( empty( $args ) ) {
|
@@ -311,8 +333,8 @@ class Generate_Url extends Generate_Title {
|
|
311 |
$path = $this->get_relative_term_url( $term, $args );
|
312 |
} elseif ( ! $args['external'] && isset( $GLOBALS['wp']->request ) ) {
|
313 |
//* Everything else.
|
314 |
-
$
|
315 |
-
$path = $this->set_url_scheme( $
|
316 |
} else {
|
317 |
//* Nothing to see here...
|
318 |
$path = '';
|
@@ -369,7 +391,7 @@ class Generate_Url extends Generate_Title {
|
|
369 |
$url = \get_home_url();
|
370 |
} elseif ( ! $args['external'] ) {
|
371 |
if ( isset( $GLOBALS['wp']->request ) )
|
372 |
-
$url = \trailingslashit( \
|
373 |
}
|
374 |
|
375 |
//* No permalink found.
|
@@ -521,7 +543,9 @@ class Generate_Url extends Generate_Title {
|
|
521 |
* Can be automatically be detected.
|
522 |
*
|
523 |
* @since 2.8.0
|
|
|
524 |
* @staticvar string $scheme
|
|
|
525 |
*
|
526 |
* @return string The preferred URl scheme.
|
527 |
*/
|
@@ -547,14 +571,23 @@ class Generate_Url extends Generate_Title {
|
|
547 |
break;
|
548 |
endswitch;
|
549 |
|
550 |
-
|
551 |
-
|
552 |
-
|
553 |
-
|
554 |
-
|
555 |
-
|
556 |
-
|
557 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
558 |
}
|
559 |
|
560 |
/**
|
@@ -613,6 +646,8 @@ class Generate_Url extends Generate_Title {
|
|
613 |
*
|
614 |
* @since 2.6.0
|
615 |
* @since 2.8.0 Deprecated.
|
|
|
|
|
616 |
* @deprecated
|
617 |
*
|
618 |
* @param string $url The url with scheme.
|
@@ -621,36 +656,41 @@ class Generate_Url extends Generate_Title {
|
|
621 |
*/
|
622 |
public function set_url_scheme_filter( $url, $current_scheme ) {
|
623 |
|
624 |
-
|
625 |
-
|
626 |
-
|
627 |
-
* Accepted variables:
|
628 |
-
* (string) 'https' : Force https
|
629 |
-
* (bool) true : Force https
|
630 |
-
* (bool) false : Force http
|
631 |
-
* (string) 'http' : Force http
|
632 |
-
* (string) 'relative' : Scheme relative
|
633 |
-
* (void) null : Do nothing
|
634 |
-
*
|
635 |
-
*
|
636 |
-
* @since 2.4.2
|
637 |
-
* @since 2.8.0 Deprecated.
|
638 |
-
* @deprecated
|
639 |
-
*
|
640 |
-
* @param string $current_scheme the current used scheme.
|
641 |
-
*/
|
642 |
-
$scheme_settings = \apply_filters( 'the_seo_framework_canonical_force_scheme', null, $current_scheme );
|
643 |
|
644 |
-
if (
|
645 |
|
646 |
$this->_deprecated_filter( 'the_seo_framework_canonical_force_scheme', '2.8.0', 'the_seo_framework_preferred_url_scheme' );
|
647 |
|
648 |
-
|
649 |
-
|
650 |
-
|
651 |
-
|
652 |
-
|
653 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
654 |
}
|
655 |
}
|
656 |
|
@@ -783,17 +823,16 @@ class Generate_Url extends Generate_Title {
|
|
783 |
$prev = '';
|
784 |
$next = '';
|
785 |
|
786 |
-
if ( $this->is_singular() )
|
787 |
if ( $this->is_real_front_page() || $this->is_front_page_by_id( $post_id ) ) {
|
788 |
$output_singular_paged = $this->is_option_checked( 'prev_next_frontpage' );
|
789 |
} else {
|
790 |
$output_singular_paged = $this->is_option_checked( 'prev_next_posts' );
|
791 |
}
|
792 |
|
793 |
-
if ( $output_singular_paged )
|
794 |
|
795 |
$page = $this->page();
|
796 |
-
$numpages = substr_count( $this->get_post_content( $post_id ), '<!--nextpage-->' ) + 1;
|
797 |
|
798 |
if ( ! $page )
|
799 |
$page = 1;
|
@@ -801,10 +840,11 @@ class Generate_Url extends Generate_Title {
|
|
801 |
if ( 'prev' === $prev_next ) {
|
802 |
$prev = $page > 1 ? $this->get_paged_post_url( $page - 1, $post_id, 'prev' ) : '';
|
803 |
} elseif ( 'next' === $prev_next ) {
|
804 |
-
$
|
|
|
805 |
}
|
806 |
-
|
807 |
-
|
808 |
|
809 |
$output_archive_paged = false;
|
810 |
if ( $this->is_real_front_page() || $this->is_front_page_by_id( $post_id ) ) {
|
@@ -834,7 +874,7 @@ class Generate_Url extends Generate_Title {
|
|
834 |
$next = \get_pagenum_link( $paged, false );
|
835 |
}
|
836 |
}
|
837 |
-
|
838 |
|
839 |
if ( $prev )
|
840 |
return $this->set_preferred_url_scheme( \esc_url_raw( $prev ) );
|
@@ -881,17 +921,16 @@ class Generate_Url extends Generate_Title {
|
|
881 |
if ( isset( $query_arg ) )
|
882 |
$urlfromcache = str_replace( '?' . $query_arg, '', $urlfromcache );
|
883 |
|
884 |
-
// Calculate current page number.
|
885 |
-
$current = 'next' === $pos ? ( $i - 1 ) : ( $i + 1 );
|
886 |
-
$current = (string) $current;
|
887 |
-
|
888 |
//* Continue if still bigger than or equal to 2.
|
889 |
if ( $i >= 2 ) {
|
|
|
|
|
|
|
890 |
//* We're adding a page.
|
891 |
-
$
|
892 |
|
893 |
-
if ( false !== $
|
894 |
-
$urlfromcache = substr_replace( $urlfromcache, '/', $
|
895 |
}
|
896 |
}
|
897 |
|
@@ -1017,11 +1056,11 @@ class Generate_Url extends Generate_Title {
|
|
1017 |
*
|
1018 |
* @since 2.6.0
|
1019 |
*
|
1020 |
-
* @param int $paged
|
1021 |
* @param bool $singular Whether to allow plural and singular.
|
1022 |
* @param bool $plural Whether to allow plural regardless.
|
1023 |
*
|
1024 |
-
* @return int|bool $paged. False if not allowed.
|
1025 |
*/
|
1026 |
protected function maybe_get_paged( $paged = 0, $singular = false, $plural = true ) {
|
1027 |
|
@@ -1061,6 +1100,8 @@ class Generate_Url extends Generate_Title {
|
|
1061 |
* If this fails, you're going to have a bad time.
|
1062 |
*
|
1063 |
* @since 2.7.0
|
|
|
|
|
1064 |
* @staticvar string $cache
|
1065 |
*
|
1066 |
* @return string The home URL host.
|
@@ -1072,10 +1113,13 @@ class Generate_Url extends Generate_Title {
|
|
1072 |
if ( isset( $cache ) )
|
1073 |
return $cache;
|
1074 |
|
1075 |
-
$parsed_url = \wp_parse_url( \
|
1076 |
|
1077 |
$host = isset( $parsed_url['host'] ) ? $parsed_url['host'] : '';
|
1078 |
|
|
|
|
|
|
|
1079 |
return $cache = $host;
|
1080 |
}
|
1081 |
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2017 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
66 |
* @since 2.4.2 : Refactored arguments
|
67 |
* @since 2.8.0 : No longer tolerates $id as Post object.
|
68 |
* @since 2.9.0 : When using 'home => true' args parameter, the home path is added when set.
|
69 |
+
* @since 2.9.2 Added filter usage cache.
|
70 |
+
* @staticvar array $_has_filters
|
71 |
*
|
72 |
* @param string $url the url
|
73 |
* @param array $args : accepted args : {
|
128 |
$path = $this->get_home_path();
|
129 |
}
|
130 |
|
131 |
+
static $_has_filters = null;
|
132 |
+
if ( null === $_has_filters ) {
|
133 |
+
$_has_filters = array();
|
134 |
+
$_has_filters['the_seo_framework_url_path'] = \has_filter( 'the_seo_framework_url_path' );
|
135 |
+
$_has_filters['the_seo_framework_url_output_args'] = \has_filter( 'the_seo_framework_url_output_args' );
|
136 |
+
}
|
|
|
|
|
|
|
|
|
137 |
|
138 |
+
if ( $_has_filters['the_seo_framework_url_path'] ) {
|
139 |
+
/**
|
140 |
+
* Applies filters 'the_seo_framework_url_path' : array
|
141 |
+
*
|
142 |
+
* @since 2.8.0
|
143 |
+
*
|
144 |
+
* @param string $path the URL path.
|
145 |
+
* @param int $id The current post, page or term ID.
|
146 |
+
* @param bool $external Whether the call is made from outside the current ID scope. Like from the Sitemap.
|
147 |
+
*/
|
148 |
+
$path = (string) \apply_filters( 'the_seo_framework_url_path', $path, $args['id'], $args['external'] );
|
149 |
+
}
|
150 |
+
|
151 |
+
if ( $_has_filters['the_seo_framework_url_output_args'] ) {
|
152 |
+
/**
|
153 |
+
* Applies filters 'the_seo_framework_sanitize_redirect_url' : array
|
154 |
+
*
|
155 |
+
* @since 2.8.0
|
156 |
+
*
|
157 |
+
* @param array : { 'url' => The full URL built from $path, 'scheme' => The preferred scheme }
|
158 |
+
* @param string $path the URL path.
|
159 |
+
* @param int $id The current post, page or term ID.
|
160 |
+
* @param bool $external Whether the call is made from outside the current ID scope. Like from the Sitemap.
|
161 |
+
*/
|
162 |
+
$url_filter = (array) \apply_filters( 'the_seo_framework_url_output_args', array(), $path, $args['id'], $args['external'] );
|
163 |
|
164 |
+
if ( $url_filter ) {
|
165 |
+
$url = $url_filter['url'];
|
166 |
+
$scheme = $url_filter['scheme'];
|
167 |
+
}
|
168 |
}
|
169 |
|
170 |
//* Non-custom URL
|
207 |
* Parse and sanitize url args.
|
208 |
*
|
209 |
* @since 2.4.2
|
210 |
+
* @since 2.9.2 Added filter usage cache.
|
211 |
+
* @staticvar bool $_has_filter
|
212 |
*
|
213 |
* @param array $args required The passed arguments.
|
214 |
* @param array $defaults The default arguments.
|
218 |
public function parse_url_args( $args = array(), $defaults = array(), $get_defaults = false ) {
|
219 |
|
220 |
//* Passing back the defaults reduces the memory usage.
|
221 |
+
if ( empty( $defaults ) ) :
|
222 |
$defaults = array(
|
223 |
'paged' => false,
|
224 |
'paged_plural' => true,
|
232 |
'id' => $this->get_the_real_ID(),
|
233 |
);
|
234 |
|
235 |
+
static $_has_filter = null;
|
236 |
+
if ( null === $_has_filter )
|
237 |
+
$_has_filter = \has_filter( 'the_seo_framework_url_args' );
|
238 |
+
|
239 |
+
if ( $_has_filter ) {
|
240 |
+
/**
|
241 |
+
* @applies filters the_seo_framework_url_args : {
|
242 |
+
* @param bool $paged Return current page URL without pagination if false
|
243 |
+
* @param bool $paged_plural Whether to add pagination for the second or later page.
|
244 |
+
* @param bool $from_option Get the canonical uri option
|
245 |
+
* @param object $post The Post Object.
|
246 |
+
* @param bool $external Whether to fetch the current WP Request or get the permalink by Post Object.
|
247 |
+
* @param bool $is_term Fetch url for term.
|
248 |
+
* @param object $term The term object.
|
249 |
+
* @param bool $home Fetch home URL.
|
250 |
+
* @param bool $forceslash Fetch home URL and slash it, always.
|
251 |
+
* @param int $id The Page or Term ID.
|
252 |
+
* }
|
253 |
+
*
|
254 |
+
* @since 2.5.0
|
255 |
+
*
|
256 |
+
* @param array $defaults The url defaults.
|
257 |
+
* @param array $args The input args.
|
258 |
+
*/
|
259 |
+
$defaults = (array) \apply_filters( 'the_seo_framework_url_args', $defaults, $args );
|
260 |
+
}
|
261 |
+
endif;
|
262 |
|
263 |
//* Return early if it's only a default args request.
|
264 |
if ( $get_defaults )
|
282 |
/**
|
283 |
* Reparse URL args.
|
284 |
*
|
|
|
|
|
285 |
* @since 2.6.2
|
286 |
+
* @since 2.9.2 Now passes args to filter.
|
287 |
+
*
|
288 |
+
* @param array $args required The passed arguments.
|
289 |
* @return array $args parsed args.
|
290 |
*/
|
291 |
public function reparse_url_args( $args = array() ) {
|
292 |
|
293 |
+
$default_args = $this->parse_url_args( $args, '', true );
|
294 |
|
295 |
if ( is_array( $args ) ) {
|
296 |
if ( empty( $args ) ) {
|
333 |
$path = $this->get_relative_term_url( $term, $args );
|
334 |
} elseif ( ! $args['external'] && isset( $GLOBALS['wp']->request ) ) {
|
335 |
//* Everything else.
|
336 |
+
$_url = \trailingslashit( \get_option( 'home' ) ) . $GLOBALS['wp']->request;
|
337 |
+
$path = $this->set_url_scheme( $_url, 'relative' );
|
338 |
} else {
|
339 |
//* Nothing to see here...
|
340 |
$path = '';
|
391 |
$url = \get_home_url();
|
392 |
} elseif ( ! $args['external'] ) {
|
393 |
if ( isset( $GLOBALS['wp']->request ) )
|
394 |
+
$url = \trailingslashit( \get_home_url() ) . $GLOBALS['wp']->request;
|
395 |
}
|
396 |
|
397 |
//* No permalink found.
|
543 |
* Can be automatically be detected.
|
544 |
*
|
545 |
* @since 2.8.0
|
546 |
+
* @since 2.9.2 Added filter usage cache.
|
547 |
* @staticvar string $scheme
|
548 |
+
* @staticvar bool $_has_filter
|
549 |
*
|
550 |
* @return string The preferred URl scheme.
|
551 |
*/
|
571 |
break;
|
572 |
endswitch;
|
573 |
|
574 |
+
static $_has_filter = null;
|
575 |
+
|
576 |
+
if ( null === $_has_filter )
|
577 |
+
$_has_filter = \has_filter( 'the_seo_framework_preferred_url_scheme' );
|
578 |
+
|
579 |
+
if ( $_has_filter ) {
|
580 |
+
/**
|
581 |
+
* Applies filters 'the_seo_framework_preferred_url_scheme' : string
|
582 |
+
*
|
583 |
+
* @since 2.8.0
|
584 |
+
*
|
585 |
+
* @param string $scheme The current URL scheme.
|
586 |
+
*/
|
587 |
+
$scheme = (string) \apply_filters( 'the_seo_framework_preferred_url_scheme', $scheme );
|
588 |
+
}
|
589 |
+
|
590 |
+
return $scheme;
|
591 |
}
|
592 |
|
593 |
/**
|
646 |
*
|
647 |
* @since 2.6.0
|
648 |
* @since 2.8.0 Deprecated.
|
649 |
+
* @since 2.9.2 Added filter usage cache.
|
650 |
+
* @staticvar $_has_filter;
|
651 |
* @deprecated
|
652 |
*
|
653 |
* @param string $url The url with scheme.
|
656 |
*/
|
657 |
public function set_url_scheme_filter( $url, $current_scheme ) {
|
658 |
|
659 |
+
static $_has_filter = null;
|
660 |
+
if ( null === $_has_filter )
|
661 |
+
$_has_filter = \has_filter( 'the_seo_framework_canonical_force_scheme' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
662 |
|
663 |
+
if ( $_has_filter ) {
|
664 |
|
665 |
$this->_deprecated_filter( 'the_seo_framework_canonical_force_scheme', '2.8.0', 'the_seo_framework_preferred_url_scheme' );
|
666 |
|
667 |
+
/**
|
668 |
+
* Applies filters the_seo_framework_canonical_force_scheme : Changes scheme.
|
669 |
+
*
|
670 |
+
* Accepted variables:
|
671 |
+
* (string) 'https' : Force https
|
672 |
+
* (bool) true : Force https
|
673 |
+
* (bool) false : Force http
|
674 |
+
* (string) 'http' : Force http
|
675 |
+
* (string) 'relative' : Scheme relative
|
676 |
+
* (void) null : Do nothing
|
677 |
+
*
|
678 |
+
* @since 2.4.2
|
679 |
+
* @since 2.8.0 Deprecated.
|
680 |
+
* @deprecated
|
681 |
+
*
|
682 |
+
* @param string $current_scheme the current used scheme.
|
683 |
+
*/
|
684 |
+
$scheme_settings = \apply_filters( 'the_seo_framework_canonical_force_scheme', null, $current_scheme );
|
685 |
+
|
686 |
+
if ( null !== $scheme_settings ) {
|
687 |
+
if ( 'https' === $scheme_settings || 'http' === $scheme_settings || 'relative' === $scheme_settings ) {
|
688 |
+
$url = $this->set_url_scheme( $url, $scheme_settings, false );
|
689 |
+
} elseif ( ! $scheme_settings ) {
|
690 |
+
$url = $this->set_url_scheme( $url, 'http', false );
|
691 |
+
} elseif ( $scheme_setting ) {
|
692 |
+
$url = $this->set_url_scheme( $url, 'https', false );
|
693 |
+
}
|
694 |
}
|
695 |
}
|
696 |
|
823 |
$prev = '';
|
824 |
$next = '';
|
825 |
|
826 |
+
if ( $this->is_singular() ) :
|
827 |
if ( $this->is_real_front_page() || $this->is_front_page_by_id( $post_id ) ) {
|
828 |
$output_singular_paged = $this->is_option_checked( 'prev_next_frontpage' );
|
829 |
} else {
|
830 |
$output_singular_paged = $this->is_option_checked( 'prev_next_posts' );
|
831 |
}
|
832 |
|
833 |
+
if ( $output_singular_paged ) :
|
834 |
|
835 |
$page = $this->page();
|
|
|
836 |
|
837 |
if ( ! $page )
|
838 |
$page = 1;
|
840 |
if ( 'prev' === $prev_next ) {
|
841 |
$prev = $page > 1 ? $this->get_paged_post_url( $page - 1, $post_id, 'prev' ) : '';
|
842 |
} elseif ( 'next' === $prev_next ) {
|
843 |
+
$_numpages = substr_count( $this->get_post_content( $post_id ), '<!--nextpage-->' ) + 1;
|
844 |
+
$next = $page < $_numpages ? $this->get_paged_post_url( $page + 1, $post_id, 'next' ) : '';
|
845 |
}
|
846 |
+
endif;
|
847 |
+
elseif ( $this->is_archive() || $this->is_home() ) :
|
848 |
|
849 |
$output_archive_paged = false;
|
850 |
if ( $this->is_real_front_page() || $this->is_front_page_by_id( $post_id ) ) {
|
874 |
$next = \get_pagenum_link( $paged, false );
|
875 |
}
|
876 |
}
|
877 |
+
endif;
|
878 |
|
879 |
if ( $prev )
|
880 |
return $this->set_preferred_url_scheme( \esc_url_raw( $prev ) );
|
921 |
if ( isset( $query_arg ) )
|
922 |
$urlfromcache = str_replace( '?' . $query_arg, '', $urlfromcache );
|
923 |
|
|
|
|
|
|
|
|
|
924 |
//* Continue if still bigger than or equal to 2.
|
925 |
if ( $i >= 2 ) {
|
926 |
+
// Calculate current page number.
|
927 |
+
$_current = 'next' === $pos ? (string) ( $i - 1 ) : (string) ( $i + 1 );
|
928 |
+
|
929 |
//* We're adding a page.
|
930 |
+
$_last_occurrence = strrpos( $urlfromcache, '/' . $_current . '/' );
|
931 |
|
932 |
+
if ( false !== $_last_occurrence )
|
933 |
+
$urlfromcache = substr_replace( $urlfromcache, '/', $_last_occurrence, strlen( '/' . $_current . '/' ) );
|
934 |
}
|
935 |
}
|
936 |
|
1056 |
*
|
1057 |
* @since 2.6.0
|
1058 |
*
|
1059 |
+
* @param int $paged The current page number.
|
1060 |
* @param bool $singular Whether to allow plural and singular.
|
1061 |
* @param bool $plural Whether to allow plural regardless.
|
1062 |
*
|
1063 |
+
* @return int|bool $paged. False if not allowed or on page 0. int if allowed.
|
1064 |
*/
|
1065 |
protected function maybe_get_paged( $paged = 0, $singular = false, $plural = true ) {
|
1066 |
|
1100 |
* If this fails, you're going to have a bad time.
|
1101 |
*
|
1102 |
* @since 2.7.0
|
1103 |
+
* @since 2.9.2 : Now considers port too.
|
1104 |
+
* : Now uses get_home_url(), rather than get_option('home').
|
1105 |
* @staticvar string $cache
|
1106 |
*
|
1107 |
* @return string The home URL host.
|
1113 |
if ( isset( $cache ) )
|
1114 |
return $cache;
|
1115 |
|
1116 |
+
$parsed_url = \wp_parse_url( \get_home_url() );
|
1117 |
|
1118 |
$host = isset( $parsed_url['host'] ) ? $parsed_url['host'] : '';
|
1119 |
|
1120 |
+
if ( $host && isset( $parsed_url['port'] ) )
|
1121 |
+
$host .= ':' . $parsed_url['port'];
|
1122 |
+
|
1123 |
return $cache = $host;
|
1124 |
}
|
1125 |
|
inc/classes/generate.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2017 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
inc/classes/init.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -317,7 +317,7 @@ class Init extends Query {
|
|
317 |
/**
|
318 |
* @since 2.2.6
|
319 |
*
|
320 |
-
* Applies filters 'the_seo_framework_before_output' : array
|
321 |
* Applies filters 'the_seo_framework_after_output' : array after functions output
|
322 |
* @param array $functions {
|
323 |
* 'callback' => string|array The function to call.
|
@@ -355,7 +355,7 @@ class Init extends Query {
|
|
355 |
* Start the timer here. I know it doesn't calculate the initiation of
|
356 |
* the plugin, but it will make the code smelly if I were to do so.
|
357 |
* A static array cache counter function would make it possible, but meh.
|
358 |
-
* This function takes the most time anyway.
|
359 |
*/
|
360 |
$init_start = microtime( true );
|
361 |
|
@@ -439,60 +439,19 @@ class Init extends Query {
|
|
439 |
$generator = (string) \apply_filters( 'the_seo_framework_generator_tag', '' );
|
440 |
|
441 |
if ( $generator )
|
442 |
-
$generator = '<meta name="generator" content="' . \esc_attr( $generator ) . '" />' .
|
443 |
|
444 |
$output = $robots . $before . $before_actions . $output . $after_actions . $after . $generator;
|
445 |
|
446 |
$this->use_object_cache and $this->object_cache_set( $cache_key, $output, DAY_IN_SECONDS );
|
447 |
endif;
|
448 |
|
449 |
-
|
450 |
-
|
451 |
-
|
452 |
-
* @since 2.0.0
|
453 |
-
*/
|
454 |
-
$indicator = (bool) \apply_filters( 'the_seo_framework_indicator', true );
|
455 |
-
|
456 |
-
$indicatorbefore = '';
|
457 |
-
$indicatorafter = '';
|
458 |
-
|
459 |
-
if ( $indicator ) :
|
460 |
-
|
461 |
-
/**
|
462 |
-
* Applies filters 'the_seo_framework_indicator_timing' : Boolean
|
463 |
-
* Whether to show the hidden generation time in HTML.
|
464 |
-
* @since 2.4.0
|
465 |
-
*/
|
466 |
-
$timer = (bool) \apply_filters( 'the_seo_framework_indicator_timing', true );
|
467 |
-
|
468 |
-
/**
|
469 |
-
* Applies filters 'sybre_waaijer_<3' : Boolean
|
470 |
-
* Whether to show the hidden author name in HTML.
|
471 |
-
* @since 2.4.0
|
472 |
-
*/
|
473 |
-
$sybre = (bool) \apply_filters( 'sybre_waaijer_<3', true );
|
474 |
-
|
475 |
-
$start = \esc_html__( 'Start The SEO Framework', 'autodescription' );
|
476 |
-
$end = \esc_html__( 'End The SEO Framework', 'autodescription' );
|
477 |
-
$me = $sybre ? ' ' . \esc_html__( 'by Sybre Waaijer', 'autodescription' ) : '';
|
478 |
-
|
479 |
-
$indicatorbefore = '<!-- ' . $start . $me . ' -->' . "\r\n";
|
480 |
-
|
481 |
-
/**
|
482 |
-
* Calculate the plugin load time.
|
483 |
-
* @since 2.4.0
|
484 |
-
*/
|
485 |
-
if ( $timer ) {
|
486 |
-
$indicatorafter = '<!-- ' . $end . $me . ' | ' . number_format( microtime( true ) - $init_start, 5 ) . 's' . ' -->' . "\r\n";
|
487 |
-
} else {
|
488 |
-
$indicatorafter = '<!-- ' . $end . $me . ' -->' . "\r\n";
|
489 |
-
}
|
490 |
-
endif;
|
491 |
-
|
492 |
-
$output = "\r\n" . $indicatorbefore . $output . $indicatorafter . "\r\n";
|
493 |
|
494 |
//* Already escaped.
|
495 |
-
echo $output;
|
496 |
|
497 |
\do_action( 'the_seo_framework_do_after_output' );
|
498 |
|
@@ -563,6 +522,11 @@ class Init extends Query {
|
|
563 |
* Edits the robots.txt output.
|
564 |
* Requires not to have a robots.txt file in the root directory.
|
565 |
*
|
|
|
|
|
|
|
|
|
|
|
566 |
* @since 2.2.9
|
567 |
* @uses robots_txt filter located at WP core
|
568 |
*
|
@@ -573,7 +537,7 @@ class Init extends Query {
|
|
573 |
public function robots_txt( $robots_txt = '', $public = '' ) {
|
574 |
|
575 |
/**
|
576 |
-
* Don't do anything if the blog isn't public
|
577 |
*/
|
578 |
if ( '0' === $public )
|
579 |
return $robots_txt;
|
@@ -588,6 +552,15 @@ class Init extends Query {
|
|
588 |
if ( false === $output ) :
|
589 |
$output = '';
|
590 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
591 |
/**
|
592 |
* Apply filters the_seo_framework_robots_txt_pre & the_seo_framework_robots_txt_pro : string
|
593 |
* Adds custom cacheable lines.
|
@@ -599,36 +572,28 @@ class Init extends Query {
|
|
599 |
$pro = (string) \apply_filters( 'the_seo_framework_robots_txt_pro', '' );
|
600 |
|
601 |
$site_url = \wp_parse_url( \site_url() );
|
602 |
-
$
|
603 |
|
604 |
$output .= $pre;
|
605 |
//* Output defaults
|
606 |
$output .= "User-agent: *\r\n";
|
607 |
-
$output .= "Disallow: $
|
608 |
-
$output .= "Allow: $
|
609 |
|
610 |
/**
|
611 |
-
*
|
612 |
-
*
|
613 |
-
*
|
614 |
-
* Applies filters the_seo_framework_robots_disallow_queries : Whether to allow queries for robots.
|
615 |
* @since 2.5.0
|
616 |
*/
|
617 |
if ( \apply_filters( 'the_seo_framework_robots_disallow_queries', false ) ) {
|
618 |
-
$home_url = \wp_parse_url( rtrim( $this->the_home_url_from_cache(), ' /\\' ) );
|
619 |
-
$home_path = ( ! empty( $home_url['path'] ) ) ? $home_url['path'] : '';
|
620 |
$output .= "Disallow: $home_path/*?*\r\n";
|
621 |
}
|
622 |
|
623 |
$output .= $pro;
|
624 |
|
625 |
-
|
626 |
-
|
627 |
-
$output .= "\r\n";
|
628 |
-
|
629 |
-
//* Add sitemap full url
|
630 |
-
$output .= 'Sitemap: ' . $this->the_home_url_from_cache( true ) . "sitemap.xml\r\n";
|
631 |
-
}
|
632 |
|
633 |
$this->use_object_cache and $this->object_cache_set( $cache_key, $output, 86400 );
|
634 |
endif;
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2017 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
317 |
/**
|
318 |
* @since 2.2.6
|
319 |
*
|
320 |
+
* Applies filters 'the_seo_framework_before_output' : array before functions output
|
321 |
* Applies filters 'the_seo_framework_after_output' : array after functions output
|
322 |
* @param array $functions {
|
323 |
* 'callback' => string|array The function to call.
|
355 |
* Start the timer here. I know it doesn't calculate the initiation of
|
356 |
* the plugin, but it will make the code smelly if I were to do so.
|
357 |
* A static array cache counter function would make it possible, but meh.
|
358 |
+
* This function presumably takes the most time anyway.
|
359 |
*/
|
360 |
$init_start = microtime( true );
|
361 |
|
439 |
$generator = (string) \apply_filters( 'the_seo_framework_generator_tag', '' );
|
440 |
|
441 |
if ( $generator )
|
442 |
+
$generator = '<meta name="generator" content="' . \esc_attr( $generator ) . '" />' . PHP_EOL;
|
443 |
|
444 |
$output = $robots . $before . $before_actions . $output . $after_actions . $after . $generator;
|
445 |
|
446 |
$this->use_object_cache and $this->object_cache_set( $cache_key, $output, DAY_IN_SECONDS );
|
447 |
endif;
|
448 |
|
449 |
+
$output = $this->get_plugin_indicator( 'before' )
|
450 |
+
. $output
|
451 |
+
. $this->get_plugin_indicator( 'after', $init_start );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
452 |
|
453 |
//* Already escaped.
|
454 |
+
echo "\r\n" . $output . "\r\n";
|
455 |
|
456 |
\do_action( 'the_seo_framework_do_after_output' );
|
457 |
|
522 |
* Edits the robots.txt output.
|
523 |
* Requires not to have a robots.txt file in the root directory.
|
524 |
*
|
525 |
+
* This methods completely hijacks default output, intentionally.
|
526 |
+
* The robots.txt file should be left as default, so to improve SEO.
|
527 |
+
* The Robots Exclusion Protocol encourages you not to use this file for
|
528 |
+
* non-administrative endpoints.
|
529 |
+
*
|
530 |
* @since 2.2.9
|
531 |
* @uses robots_txt filter located at WP core
|
532 |
*
|
537 |
public function robots_txt( $robots_txt = '', $public = '' ) {
|
538 |
|
539 |
/**
|
540 |
+
* Don't do anything if the blog isn't public.
|
541 |
*/
|
542 |
if ( '0' === $public )
|
543 |
return $robots_txt;
|
552 |
if ( false === $output ) :
|
553 |
$output = '';
|
554 |
|
555 |
+
$parsed_home_url = \wp_parse_url( rtrim( $this->the_home_url_from_cache(), ' /\\' ) );
|
556 |
+
$home_path = ! empty( $parsed_home_url['path'] ) ? \esc_attr( $parsed_home_url['path'] ) : '';
|
557 |
+
|
558 |
+
if ( $this->is_subdirectory_installation() || $home_path ) {
|
559 |
+
$output .= '# This is an invalid robots.txt location.' . "\r\n";
|
560 |
+
$output .= '# Please visit: ' . \esc_url( trailingslashit( $this->set_preferred_url_scheme( $this->get_home_host() ) ) . 'robots.txt' ) . "\r\n";
|
561 |
+
$output .= "\r\n";
|
562 |
+
}
|
563 |
+
|
564 |
/**
|
565 |
* Apply filters the_seo_framework_robots_txt_pre & the_seo_framework_robots_txt_pro : string
|
566 |
* Adds custom cacheable lines.
|
572 |
$pro = (string) \apply_filters( 'the_seo_framework_robots_txt_pro', '' );
|
573 |
|
574 |
$site_url = \wp_parse_url( \site_url() );
|
575 |
+
$site_path = ( ! empty( $site_url['path'] ) ) ? \esc_attr( $site_url['path'] ) : '';
|
576 |
|
577 |
$output .= $pre;
|
578 |
//* Output defaults
|
579 |
$output .= "User-agent: *\r\n";
|
580 |
+
$output .= "Disallow: $site_path/wp-admin/\r\n";
|
581 |
+
$output .= "Allow: $site_path/wp-admin/admin-ajax.php\r\n";
|
582 |
|
583 |
/**
|
584 |
+
* Applies filters the_seo_framework_robots_disallow_queries : boolean
|
585 |
+
* Determines whether to allow queries for robots.
|
|
|
|
|
586 |
* @since 2.5.0
|
587 |
*/
|
588 |
if ( \apply_filters( 'the_seo_framework_robots_disallow_queries', false ) ) {
|
|
|
|
|
589 |
$output .= "Disallow: $home_path/*?*\r\n";
|
590 |
}
|
591 |
|
592 |
$output .= $pro;
|
593 |
|
594 |
+
//* Add extra whitespace and sitemap full URL
|
595 |
+
if ( $this->can_do_sitemap_robots( true ) )
|
596 |
+
$output .= "\r\nSitemap: " . \esc_url( $this->get_sitemap_xml_url() ) . "\r\n";
|
|
|
|
|
|
|
|
|
597 |
|
598 |
$this->use_object_cache and $this->object_cache_set( $cache_key, $output, 86400 );
|
599 |
endif;
|
inc/classes/inpost.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2017 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
inc/classes/load.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2017 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
inc/classes/metaboxes.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2017 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
inc/classes/post-data.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2017 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
inc/classes/query.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -1153,6 +1153,28 @@ class Query extends Compat {
|
|
1153 |
return $paged;
|
1154 |
}
|
1155 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1156 |
/**
|
1157 |
* Handles object cache for the query class.
|
1158 |
*
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2017 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
1153 |
return $paged;
|
1154 |
}
|
1155 |
|
1156 |
+
/**
|
1157 |
+
* Determines whether we're on The SEO Framework's sitemap or not.
|
1158 |
+
*
|
1159 |
+
* @since 2.9.2
|
1160 |
+
*
|
1161 |
+
* @return bool
|
1162 |
+
*/
|
1163 |
+
public function is_sitemap() {
|
1164 |
+
return (bool) $this->doing_sitemap;
|
1165 |
+
}
|
1166 |
+
|
1167 |
+
/**
|
1168 |
+
* Determines whether we're on the robots.txt file output.
|
1169 |
+
*
|
1170 |
+
* @since 2.9.2
|
1171 |
+
*
|
1172 |
+
* @return bool
|
1173 |
+
*/
|
1174 |
+
public function is_robots() {
|
1175 |
+
return \is_robots();
|
1176 |
+
}
|
1177 |
+
|
1178 |
/**
|
1179 |
* Handles object cache for the query class.
|
1180 |
*
|
inc/classes/render.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -828,14 +828,20 @@ class Render extends Admin_Init {
|
|
828 |
* @deprecated
|
829 |
* @since 2.7.0
|
830 |
*/
|
831 |
-
if (
|
832 |
$this->_deprecated_filter( 'the_seo_framework_output_canonical', '2.7.0', "add_filter( 'the_seo_framework_rel_canonical_output', '__return_empty_string' );" );
|
833 |
-
|
|
|
834 |
}
|
835 |
|
836 |
/**
|
837 |
-
* Applies filters 'the_seo_framework_rel_canonical_output' :
|
|
|
|
|
838 |
* @since 2.6.5
|
|
|
|
|
|
|
839 |
*/
|
840 |
$url = (string) \apply_filters( 'the_seo_framework_rel_canonical_output', $this->the_url_from_cache(), $this->get_the_real_ID() );
|
841 |
|
@@ -864,7 +870,11 @@ class Render extends Admin_Init {
|
|
864 |
|
865 |
/**
|
866 |
* Applies filters 'the_seo_framework_ldjson_scripts' : string
|
|
|
867 |
* @since 2.6.0
|
|
|
|
|
|
|
868 |
*/
|
869 |
$json = (string) \apply_filters( 'the_seo_framework_ldjson_scripts', $this->render_ld_json_scripts(), $this->get_the_real_ID() );
|
870 |
|
@@ -1038,6 +1048,74 @@ class Render extends Admin_Init {
|
|
1038 |
return $output;
|
1039 |
}
|
1040 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1041 |
/**
|
1042 |
* Determines whether we can use Open Graph tags.
|
1043 |
*
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2017 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
828 |
* @deprecated
|
829 |
* @since 2.7.0
|
830 |
*/
|
831 |
+
if ( \has_filter( 'the_seo_framework_output_canonical' ) ) {
|
832 |
$this->_deprecated_filter( 'the_seo_framework_output_canonical', '2.7.0', "add_filter( 'the_seo_framework_rel_canonical_output', '__return_empty_string' );" );
|
833 |
+
if ( true !== \apply_filters( 'the_seo_framework_output_canonical', true, $this->get_the_real_ID() ) )
|
834 |
+
return '';
|
835 |
}
|
836 |
|
837 |
/**
|
838 |
+
* Applies filters 'the_seo_framework_rel_canonical_output' : string
|
839 |
+
* Changes canonical URL output.
|
840 |
+
*
|
841 |
* @since 2.6.5
|
842 |
+
*
|
843 |
+
* @param string $url The canonical URL. Must be escaped.
|
844 |
+
* @param int $id The current page or term ID.
|
845 |
*/
|
846 |
$url = (string) \apply_filters( 'the_seo_framework_rel_canonical_output', $this->the_url_from_cache(), $this->get_the_real_ID() );
|
847 |
|
870 |
|
871 |
/**
|
872 |
* Applies filters 'the_seo_framework_ldjson_scripts' : string
|
873 |
+
*
|
874 |
* @since 2.6.0
|
875 |
+
*
|
876 |
+
* @param string $json The JSON output. Must be escaped.
|
877 |
+
* @param int $id The current page or term ID.
|
878 |
*/
|
879 |
$json = (string) \apply_filters( 'the_seo_framework_ldjson_scripts', $this->render_ld_json_scripts(), $this->get_the_real_ID() );
|
880 |
|
1048 |
return $output;
|
1049 |
}
|
1050 |
|
1051 |
+
/**
|
1052 |
+
* Returns the plugin hidden HTML indicators.
|
1053 |
+
*
|
1054 |
+
* @since 2.9.2
|
1055 |
+
*
|
1056 |
+
* @param string $where Determines the position of the indicator.
|
1057 |
+
* Accepts 'before' for before, anything else for after.
|
1058 |
+
* @param int $timing Determines when the output started.
|
1059 |
+
* @return string The SEO Framework's HTML plugin indicator.
|
1060 |
+
*/
|
1061 |
+
public function get_plugin_indicator( $where = 'before', $timing = 0 ) {
|
1062 |
+
|
1063 |
+
static $run, $_cache = null;
|
1064 |
+
|
1065 |
+
if ( ! isset( $run ) ) {
|
1066 |
+
/**
|
1067 |
+
* Applies filters 'the_seo_framework_indicator' : Boolean
|
1068 |
+
* Whether to show the indicator in HTML.
|
1069 |
+
* @since 2.0.0
|
1070 |
+
*/
|
1071 |
+
$run = (bool) \apply_filters( 'the_seo_framework_indicator', true );
|
1072 |
+
}
|
1073 |
+
|
1074 |
+
if ( false === $run )
|
1075 |
+
return '';
|
1076 |
+
|
1077 |
+
if ( null === $_cache ) {
|
1078 |
+
|
1079 |
+
$_cache = array();
|
1080 |
+
|
1081 |
+
/**
|
1082 |
+
* Applies filters 'sybre_waaijer_<3' : Boolean
|
1083 |
+
* Whether to show the hidden author name in HTML.
|
1084 |
+
* @since 2.4.0
|
1085 |
+
*/
|
1086 |
+
$sybre = (bool) \apply_filters( 'sybre_waaijer_<3', true );
|
1087 |
+
|
1088 |
+
// Plugin name can't be translated. Yay.
|
1089 |
+
$tsf = 'The SEO Framework';
|
1090 |
+
|
1091 |
+
/**
|
1092 |
+
* Applies filters 'the_seo_framework_indicator_timing' : Boolean
|
1093 |
+
* Whether to show the hidden generation time in HTML.
|
1094 |
+
* @since 2.4.0
|
1095 |
+
*/
|
1096 |
+
$_cache['show_timer'] = (bool) \apply_filters( 'the_seo_framework_indicator_timing', true );
|
1097 |
+
|
1098 |
+
/* translators: %s = 'The SEO Framework' */
|
1099 |
+
$_cache['start'] = sprintf( \esc_html__( 'Start %s', 'autodescription' ), $tsf );
|
1100 |
+
/* translators: %s = 'The SEO Framework' */
|
1101 |
+
$_cache['end'] = sprintf( \esc_html__( 'End %s', 'autodescription' ), $tsf );
|
1102 |
+
$_cache['author'] = $sybre ? ' ' . \esc_html__( 'by Sybre Waaijer', 'autodescription' ) : '';
|
1103 |
+
}
|
1104 |
+
|
1105 |
+
if ( 'before' === $where ) {
|
1106 |
+
$output = $_cache['start'] . $_cache['author'];
|
1107 |
+
} else {
|
1108 |
+
if ( $_cache['show_timer'] && $timing ) {
|
1109 |
+
$timer = ' | ' . number_format( microtime( true ) - $timing, 5 ) . 's';
|
1110 |
+
} else {
|
1111 |
+
$timer = '';
|
1112 |
+
}
|
1113 |
+
$output = $_cache['end'] . $_cache['author'] . $timer;
|
1114 |
+
}
|
1115 |
+
|
1116 |
+
return sprintf( '<!-- %s -->', $output ) . PHP_EOL;
|
1117 |
+
}
|
1118 |
+
|
1119 |
/**
|
1120 |
* Determines whether we can use Open Graph tags.
|
1121 |
*
|
inc/classes/sanitize.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -1203,8 +1203,6 @@ class Sanitize extends Admin_Pages {
|
|
1203 |
if ( '' === $color )
|
1204 |
return '';
|
1205 |
|
1206 |
-
$color = $color;
|
1207 |
-
|
1208 |
if ( preg_match( '|^([A-Fa-f0-9]{3}){1,2}$|', $color ) )
|
1209 |
return $color;
|
1210 |
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2017 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
1203 |
if ( '' === $color )
|
1204 |
return '';
|
1205 |
|
|
|
|
|
1206 |
if ( preg_match( '|^([A-Fa-f0-9]{3}){1,2}$|', $color ) )
|
1207 |
return $color;
|
1208 |
|
inc/classes/site-options.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -127,7 +127,7 @@ class Site_Options extends Sanitize {
|
|
127 |
'description_separator' => 'pipe', // Description separator, dropdown
|
128 |
'description_additions' => 1, // "Title on Blogname" within Description
|
129 |
'description_blogname' => 1, // "on Blogname" within Description
|
130 |
-
// 'description_custom' => '', // Custom prefix
|
131 |
|
132 |
// Robots directory.
|
133 |
'noodp' => 1, // Site noopd robots settings
|
@@ -456,17 +456,19 @@ class Site_Options extends Sanitize {
|
|
456 |
* Return current option array.
|
457 |
*
|
458 |
* @since 2.6.0
|
459 |
-
* @since 2.9.
|
460 |
* @staticvar array $cache The option cache.
|
461 |
*
|
462 |
* @param string $setting The setting key.
|
|
|
|
|
463 |
* @return array Options.
|
464 |
*/
|
465 |
-
public function get_all_options( $setting = null ) {
|
466 |
|
467 |
static $cache = array();
|
468 |
|
469 |
-
if ( isset( $cache[ $setting ] ) )
|
470 |
return $cache[ $setting ];
|
471 |
|
472 |
if ( is_null( $setting ) )
|
@@ -537,6 +539,9 @@ class Site_Options extends Sanitize {
|
|
537 |
* @uses $this->the_seo_framework_get_option() Return option from the options table and cache result.
|
538 |
* @uses THE_SEO_FRAMEWORK_NETWORK_OPTIONS
|
539 |
*
|
|
|
|
|
|
|
540 |
* @param string $key Option name.
|
541 |
* @param boolean $use_cache Optional. Whether to use the cache value or not. Defaults to true.
|
542 |
* @return mixed The value of this $key in the database.
|
@@ -921,6 +926,7 @@ class Site_Options extends Sanitize {
|
|
921 |
*
|
922 |
* @since 2.5.2
|
923 |
* @see https://www.facebook.com/translations/FacebookLocales.xml
|
|
|
924 |
*
|
925 |
* @return array Valid Facebook locales
|
926 |
*/
|
@@ -1070,7 +1076,8 @@ class Site_Options extends Sanitize {
|
|
1070 |
}
|
1071 |
|
1072 |
/**
|
1073 |
-
* Returns Facebook locales array keys.
|
|
|
1074 |
* This is apart from the fb_locales array since there are "duplicated" keys.
|
1075 |
* Use this to compare the numeric key position.
|
1076 |
*
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2017 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
127 |
'description_separator' => 'pipe', // Description separator, dropdown
|
128 |
'description_additions' => 1, // "Title on Blogname" within Description
|
129 |
'description_blogname' => 1, // "on Blogname" within Description
|
130 |
+
// 'description_custom' => '', // Custom prefix TODO
|
131 |
|
132 |
// Robots directory.
|
133 |
'noodp' => 1, // Site noopd robots settings
|
456 |
* Return current option array.
|
457 |
*
|
458 |
* @since 2.6.0
|
459 |
+
* @since 2.9.2 Added $use_current parameter.
|
460 |
* @staticvar array $cache The option cache.
|
461 |
*
|
462 |
* @param string $setting The setting key.
|
463 |
+
* @param bool $use_current Whether to use WordPress' version and update the cache
|
464 |
+
* or use locally the cached version.
|
465 |
* @return array Options.
|
466 |
*/
|
467 |
+
public function get_all_options( $setting = null, $use_current = false ) {
|
468 |
|
469 |
static $cache = array();
|
470 |
|
471 |
+
if ( ! $use_current && isset( $cache[ $setting ] ) )
|
472 |
return $cache[ $setting ];
|
473 |
|
474 |
if ( is_null( $setting ) )
|
539 |
* @uses $this->the_seo_framework_get_option() Return option from the options table and cache result.
|
540 |
* @uses THE_SEO_FRAMEWORK_NETWORK_OPTIONS
|
541 |
*
|
542 |
+
* Unused.
|
543 |
+
* @todo deprecate.
|
544 |
+
*
|
545 |
* @param string $key Option name.
|
546 |
* @param boolean $use_cache Optional. Whether to use the cache value or not. Defaults to true.
|
547 |
* @return mixed The value of this $key in the database.
|
926 |
*
|
927 |
* @since 2.5.2
|
928 |
* @see https://www.facebook.com/translations/FacebookLocales.xml
|
929 |
+
* @see $this->language_keys() for the associative array keys.
|
930 |
*
|
931 |
* @return array Valid Facebook locales
|
932 |
*/
|
1076 |
}
|
1077 |
|
1078 |
/**
|
1079 |
+
* Returns Facebook locales' associative array keys.
|
1080 |
+
*
|
1081 |
* This is apart from the fb_locales array since there are "duplicated" keys.
|
1082 |
* Use this to compare the numeric key position.
|
1083 |
*
|
inc/classes/sitemaps.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -67,9 +67,10 @@ class Sitemaps extends Metaboxes {
|
|
67 |
}
|
68 |
|
69 |
/**
|
70 |
-
* Determines whether we can output sitemap or not based on options.
|
71 |
*
|
72 |
* @since 2.6.0
|
|
|
73 |
* @staticvar bool $cache
|
74 |
*
|
75 |
* @return bool
|
@@ -82,10 +83,10 @@ class Sitemaps extends Metaboxes {
|
|
82 |
return $cache;
|
83 |
|
84 |
/**
|
85 |
-
* Don't do anything on a deleted or spam blog.
|
86 |
-
* There's nothing to find anyway.
|
87 |
*/
|
88 |
-
return $cache = $this->
|
89 |
}
|
90 |
|
91 |
/**
|
@@ -246,7 +247,7 @@ class Sitemaps extends Metaboxes {
|
|
246 |
protected function output_sitemap() {
|
247 |
|
248 |
//* Remove output, if any.
|
249 |
-
$this->
|
250 |
|
251 |
if ( ! headers_sent() )
|
252 |
header( 'Content-type: text/xml; charset=utf-8' );
|
@@ -381,21 +382,92 @@ class Sitemaps extends Metaboxes {
|
|
381 |
* Returns the stylesheet XSL location URL.
|
382 |
*
|
383 |
* @since 2.8.0
|
|
|
384 |
*
|
385 |
* @return string URL location of the XSL stylesheet. Unescaped.
|
386 |
*/
|
387 |
public function get_sitemap_xsl_url() {
|
388 |
global $wp_rewrite;
|
389 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
390 |
if ( $wp_rewrite->using_index_permalinks() ) {
|
391 |
-
$
|
392 |
} elseif ( $wp_rewrite->using_permalinks() ) {
|
393 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
394 |
} else {
|
395 |
-
$
|
396 |
}
|
397 |
|
398 |
-
return $
|
399 |
}
|
400 |
|
401 |
/**
|
@@ -405,7 +477,7 @@ class Sitemaps extends Metaboxes {
|
|
405 |
*/
|
406 |
public function output_sitemap_xsl_stylesheet() {
|
407 |
|
408 |
-
$this->
|
409 |
|
410 |
if ( ! headers_sent() ) {
|
411 |
header( 'Content-type: text/xsl; charset=utf-8' );
|
@@ -424,7 +496,7 @@ class Sitemaps extends Metaboxes {
|
|
424 |
* @param string|bool $content required The sitemap transient content.
|
425 |
* @return string The sitemap content.
|
426 |
*/
|
427 |
-
public function setup_sitemap( $sitemap_content ) {
|
428 |
|
429 |
if ( false === $sitemap_content ) {
|
430 |
//* Transient doesn't exist yet.
|
@@ -1023,7 +1095,7 @@ class Sitemaps extends Metaboxes {
|
|
1023 |
* @since 2.2.9
|
1024 |
*/
|
1025 |
public function ping_google() {
|
1026 |
-
$pingurl = 'http://www.google.com/webmasters/sitemaps/ping?sitemap=' . urlencode( $this->
|
1027 |
\wp_safe_remote_get( $pingurl, array( 'timeout' => 3 ) );
|
1028 |
}
|
1029 |
|
@@ -1033,7 +1105,7 @@ class Sitemaps extends Metaboxes {
|
|
1033 |
* @since 2.2.9
|
1034 |
*/
|
1035 |
public function ping_bing() {
|
1036 |
-
$pingurl = 'http://www.bing.com/webmaster/ping.aspx?siteMap=' . urlencode( $this->
|
1037 |
\wp_safe_remote_get( $pingurl, array( 'timeout' => 3 ) );
|
1038 |
}
|
1039 |
|
@@ -1043,7 +1115,7 @@ class Sitemaps extends Metaboxes {
|
|
1043 |
* @since 2.6.0
|
1044 |
*/
|
1045 |
public function ping_yandex() {
|
1046 |
-
$pingurl = 'http://blogs.yandex.ru/pings/?status=success&url=' . urlencode( $this->
|
1047 |
\wp_safe_remote_get( $pingurl, array( 'timeout' => 3 ) );
|
1048 |
}
|
1049 |
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2017 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
67 |
}
|
68 |
|
69 |
/**
|
70 |
+
* Determines whether we can output sitemap or not based on options and blog status.
|
71 |
*
|
72 |
* @since 2.6.0
|
73 |
+
* @since 2.9.2 : Now returns true when using plain and ugly permalinks.
|
74 |
* @staticvar bool $cache
|
75 |
*
|
76 |
* @return bool
|
83 |
return $cache;
|
84 |
|
85 |
/**
|
86 |
+
* Don't do anything on a deleted or spam blog on MultiSite.
|
87 |
+
* There's nothing to find anyway.
|
88 |
*/
|
89 |
+
return $cache = $this->is_option_checked( 'sitemaps_output' ) && false === $this->current_blog_is_spam_or_deleted();
|
90 |
}
|
91 |
|
92 |
/**
|
247 |
protected function output_sitemap() {
|
248 |
|
249 |
//* Remove output, if any.
|
250 |
+
$this->clean_response_header();
|
251 |
|
252 |
if ( ! headers_sent() )
|
253 |
header( 'Content-type: text/xml; charset=utf-8' );
|
382 |
* Returns the stylesheet XSL location URL.
|
383 |
*
|
384 |
* @since 2.8.0
|
385 |
+
* @global object $wp_rewrite
|
386 |
*
|
387 |
* @return string URL location of the XSL stylesheet. Unescaped.
|
388 |
*/
|
389 |
public function get_sitemap_xsl_url() {
|
390 |
global $wp_rewrite;
|
391 |
|
392 |
+
$home = \trailingslashit( $this->set_url_scheme( $this->the_home_url_from_cache() ) );
|
393 |
+
/** Figure out if this is helpful...
|
394 |
+
if ( ! $this->is_subdirectory_installation() ) {
|
395 |
+
//= 1. $home = \trailingslashit( $this->set_url_scheme( $this->get_home_host() ) );
|
396 |
+
|
397 |
+
//= 2.:
|
398 |
+
$_path = $this->set_url_scheme( $home, 'relative' );
|
399 |
+
if ( false !== ( $_pos = strrpos( $home, $_path ) ) ) {
|
400 |
+
$home = \trailingslashit( substr_replace( $home, '', $_pos, strlen( $_path ) ) );
|
401 |
+
}
|
402 |
+
}
|
403 |
+
*/
|
404 |
+
|
405 |
if ( $wp_rewrite->using_index_permalinks() ) {
|
406 |
+
$loc = $home . 'index.php/sitemap.xsl';
|
407 |
} elseif ( $wp_rewrite->using_permalinks() ) {
|
408 |
+
$loc = $home . 'sitemap.xsl';
|
409 |
+
} else {
|
410 |
+
$loc = $home . '?the_seo_framework_sitemap=xsl';
|
411 |
+
}
|
412 |
+
|
413 |
+
return $loc;
|
414 |
+
}
|
415 |
+
|
416 |
+
/**
|
417 |
+
* Returns the sitemap XML location URL.
|
418 |
+
*
|
419 |
+
* @since 2.9.2
|
420 |
+
* @global object $wp_rewrite
|
421 |
+
*
|
422 |
+
* @return string URL location of the XML sitemap. Unescaped.
|
423 |
+
*/
|
424 |
+
public function get_sitemap_xml_url() {
|
425 |
+
global $wp_rewrite;
|
426 |
+
|
427 |
+
$home = \trailingslashit( $this->set_url_scheme( $this->the_home_url_from_cache() ) );
|
428 |
+
/** Figure out if this is helpful...
|
429 |
+
if ( ! $this->is_subdirectory_installation() ) {
|
430 |
+
//= 1. $home = \trailingslashit( $this->set_url_scheme( $this->get_home_host() ) );
|
431 |
+
|
432 |
+
//= 2.:
|
433 |
+
$_path = $this->set_url_scheme( $home, 'relative' );
|
434 |
+
if ( false !== ( $_pos = strrpos( $home, $_path ) ) ) {
|
435 |
+
$home = \trailingslashit( substr_replace( $home, '', $_pos, strlen( $_path ) ) );
|
436 |
+
}
|
437 |
+
}
|
438 |
+
*/
|
439 |
+
|
440 |
+
if ( $wp_rewrite->using_index_permalinks() ) {
|
441 |
+
$loc = $home . 'index.php/sitemap.xml';
|
442 |
+
} elseif ( $wp_rewrite->using_permalinks() ) {
|
443 |
+
$loc = $home . 'sitemap.xml';
|
444 |
+
} else {
|
445 |
+
$loc = $home . '?the_seo_framework_sitemap=xml';
|
446 |
+
}
|
447 |
+
|
448 |
+
return $loc;
|
449 |
+
}
|
450 |
+
|
451 |
+
/**
|
452 |
+
* Returns the robots.txt location URL.
|
453 |
+
* Only allows root domains.
|
454 |
+
*
|
455 |
+
* @since 2.9.2
|
456 |
+
* @global object $wp_rewrite
|
457 |
+
*
|
458 |
+
* @return string URL location of robots.txt. Unescaped.
|
459 |
+
*/
|
460 |
+
public function get_robots_txt_url() {
|
461 |
+
global $wp_rewrite;
|
462 |
+
|
463 |
+
if ( $wp_rewrite->using_permalinks() && ! $this->is_subdirectory_installation() ) {
|
464 |
+
$home = \trailingslashit( $this->set_url_scheme( $this->get_home_host() ) );
|
465 |
+
$loc = $home . 'robots.txt';
|
466 |
} else {
|
467 |
+
$loc = '';
|
468 |
}
|
469 |
|
470 |
+
return $loc;
|
471 |
}
|
472 |
|
473 |
/**
|
477 |
*/
|
478 |
public function output_sitemap_xsl_stylesheet() {
|
479 |
|
480 |
+
$this->clean_response_header();
|
481 |
|
482 |
if ( ! headers_sent() ) {
|
483 |
header( 'Content-type: text/xsl; charset=utf-8' );
|
496 |
* @param string|bool $content required The sitemap transient content.
|
497 |
* @return string The sitemap content.
|
498 |
*/
|
499 |
+
public function setup_sitemap( $sitemap_content = false ) {
|
500 |
|
501 |
if ( false === $sitemap_content ) {
|
502 |
//* Transient doesn't exist yet.
|
1095 |
* @since 2.2.9
|
1096 |
*/
|
1097 |
public function ping_google() {
|
1098 |
+
$pingurl = 'http://www.google.com/webmasters/sitemaps/ping?sitemap=' . urlencode( $this->get_sitemap_xml_url() );
|
1099 |
\wp_safe_remote_get( $pingurl, array( 'timeout' => 3 ) );
|
1100 |
}
|
1101 |
|
1105 |
* @since 2.2.9
|
1106 |
*/
|
1107 |
public function ping_bing() {
|
1108 |
+
$pingurl = 'http://www.bing.com/webmaster/ping.aspx?siteMap=' . urlencode( $this->get_sitemap_xml_url() );
|
1109 |
\wp_safe_remote_get( $pingurl, array( 'timeout' => 3 ) );
|
1110 |
}
|
1111 |
|
1115 |
* @since 2.6.0
|
1116 |
*/
|
1117 |
public function ping_yandex() {
|
1118 |
+
$pingurl = 'http://blogs.yandex.ru/pings/?status=success&url=' . urlencode( $this->get_sitemap_xml_url() );
|
1119 |
\wp_safe_remote_get( $pingurl, array( 'timeout' => 3 ) );
|
1120 |
}
|
1121 |
|
inc/classes/term-data.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2017 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
inc/compat/php-mbstring.php
CHANGED
@@ -16,7 +16,7 @@ defined( 'ABSPATH' ) or die;
|
|
16 |
* @param string|null $encoding Optional. Character encoding to use. Default null.
|
17 |
*
|
18 |
* @license GLPv2 or later
|
19 |
-
* @return int Position of first
|
20 |
*/
|
21 |
if ( ! function_exists( 'mb_strpos' ) ) :
|
22 |
function mb_strpos( $haystack, $needle, $offset = 0, $encoding = null ) {
|
@@ -40,7 +40,7 @@ endif;
|
|
40 |
* @param string|null $encoding Optional. Character encoding to use. Default null.
|
41 |
*
|
42 |
* @license GLPv2 or later
|
43 |
-
* @return int Position of first
|
44 |
*/
|
45 |
if ( ! function_exists( '_mb_strpos' ) ) :
|
46 |
function _mb_strpos( $haystack, $needle, $offset = 0, $encoding = null ) {
|
@@ -92,7 +92,7 @@ if ( ! function_exists( '_mb_strpos' ) ) :
|
|
92 |
//* Prevent bugs, (re)assign var.
|
93 |
$pos = null;
|
94 |
|
95 |
-
// Find first
|
96 |
foreach ( $inter as $key => $value ) {
|
97 |
if ( $key >= $offset ) {
|
98 |
$pos = $key;
|
@@ -174,7 +174,7 @@ if ( ! function_exists( '_mb_strpos' ) ) :
|
|
174 |
//* Prevent bugs, (re)assign var.
|
175 |
$pos = null;
|
176 |
|
177 |
-
// Find first
|
178 |
foreach ( $inter as $key => $value ) {
|
179 |
if ( $key >= $offset ) {
|
180 |
$pos = $key;
|
16 |
* @param string|null $encoding Optional. Character encoding to use. Default null.
|
17 |
*
|
18 |
* @license GLPv2 or later
|
19 |
+
* @return int Position of first occurrence found of $haystack of `$needle`.
|
20 |
*/
|
21 |
if ( ! function_exists( 'mb_strpos' ) ) :
|
22 |
function mb_strpos( $haystack, $needle, $offset = 0, $encoding = null ) {
|
40 |
* @param string|null $encoding Optional. Character encoding to use. Default null.
|
41 |
*
|
42 |
* @license GLPv2 or later
|
43 |
+
* @return int Position of first occurrence found of $haystack of `$needle`.
|
44 |
*/
|
45 |
if ( ! function_exists( '_mb_strpos' ) ) :
|
46 |
function _mb_strpos( $haystack, $needle, $offset = 0, $encoding = null ) {
|
92 |
//* Prevent bugs, (re)assign var.
|
93 |
$pos = null;
|
94 |
|
95 |
+
// Find first occurrence greater than or equal to offset
|
96 |
foreach ( $inter as $key => $value ) {
|
97 |
if ( $key >= $offset ) {
|
98 |
$pos = $key;
|
174 |
//* Prevent bugs, (re)assign var.
|
175 |
$pos = null;
|
176 |
|
177 |
+
// Find first occurrence greater than or equal to offset
|
178 |
foreach ( $inter as $key => $value ) {
|
179 |
if ( $key >= $offset ) {
|
180 |
$pos = $key;
|
inc/compat/plugin-polylang.php
ADDED
@@ -0,0 +1,187 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* @package The_SEO_Framework\Compat\Plugin\WPML
|
4 |
+
*/
|
5 |
+
namespace The_SEO_Framework;
|
6 |
+
|
7 |
+
defined( 'ABSPATH' ) and $_this = \the_seo_framework_class() and $this instanceof $_this or die;
|
8 |
+
|
9 |
+
\add_filter( 'the_seo_framework_url_output_args', __NAMESPACE__ . '\\_polylang_filter_url_args', 10, 4 );
|
10 |
+
/**
|
11 |
+
* Filters the canonical generation URL and Scheme arguments.
|
12 |
+
*
|
13 |
+
* @since 2.9.2
|
14 |
+
* @access private
|
15 |
+
* @global object $polylang
|
16 |
+
*
|
17 |
+
* @param array $args the URL arguments to supply. : {
|
18 |
+
* 'url' => The full URL built from $path,
|
19 |
+
* 'scheme' => The preferred scheme
|
20 |
+
* }
|
21 |
+
* @param string $path the URL path.
|
22 |
+
* @param int $id The current post, page or term ID.
|
23 |
+
* @param bool $external Whether the call is made from outside the current ID scope. Like from the Sitemap.
|
24 |
+
* @return array { 'url' => The full URL built from $path, 'scheme' => The preferred scheme }
|
25 |
+
*/
|
26 |
+
function _polylang_filter_url_args( $args = array(), $path = '', $id = 0, $external = false ) {
|
27 |
+
global $polylang;
|
28 |
+
|
29 |
+
if ( ! is_object( $polylang ) || ! ( isset( $polylang->filters_links ) && is_object( $polylang->filters_links ) ) )
|
30 |
+
return $args;
|
31 |
+
|
32 |
+
static $state = null;
|
33 |
+
|
34 |
+
if ( null === $state ) {
|
35 |
+
( \the_seo_framework()->is_sitemap() || \the_seo_framework()->is_robots() ) and $state = 1
|
36 |
+
or \the_seo_framework()->is_admin() and $state = 2
|
37 |
+
or $state = 3;
|
38 |
+
}
|
39 |
+
|
40 |
+
if ( 1 === $state || $external )
|
41 |
+
return \The_SEO_Framework\_polylang_external_filter_url_args( $args, $path, $id, $external );
|
42 |
+
|
43 |
+
if ( 2 === $state )
|
44 |
+
return \The_SEO_Framework\_polylang_admin_filter_url_args( $args, $path, $id, $external );
|
45 |
+
|
46 |
+
return \The_SEO_Framework\_polylang_frontend_filter_url_args( $args, $path, $id, $external );
|
47 |
+
}
|
48 |
+
|
49 |
+
/**
|
50 |
+
* Filters the canonical generation URL and Scheme arguments for external parsing.
|
51 |
+
*
|
52 |
+
* @since 2.9.2
|
53 |
+
* @access private
|
54 |
+
* @staticvar string $home_url
|
55 |
+
* @global object $polylang
|
56 |
+
*
|
57 |
+
* @param array $args the URL arguments to supply. : {
|
58 |
+
* 'url' => The full URL built from $path,
|
59 |
+
* 'scheme' => The preferred scheme
|
60 |
+
* }
|
61 |
+
* @param string $path the URL path.
|
62 |
+
* @param int $id The current post, page or term ID.
|
63 |
+
* @param bool $external Whether the call is made from outside the current ID scope. Like from the Sitemap.
|
64 |
+
* @return array { 'url' => The full URL built from $path, 'scheme' => The preferred scheme }
|
65 |
+
*/
|
66 |
+
function _polylang_external_filter_url_args( $args = array(), $path = '', $id = 0, $external = false ) {
|
67 |
+
global $polylang;
|
68 |
+
|
69 |
+
static $home_url = null;
|
70 |
+
//* We don't want to fire internal filters that lead to this function.
|
71 |
+
if ( null === $home_url )
|
72 |
+
$home_url = \untrailingslashit( \esc_url_raw( \the_seo_framework()->set_preferred_url_scheme( \the_seo_framework()->get_home_host() ) ) );
|
73 |
+
|
74 |
+
$_post = \get_post( $id );
|
75 |
+
$_link = $home_url . $path;
|
76 |
+
|
77 |
+
if ( null === $_post ) {
|
78 |
+
if ( method_exists( $polylang->filters_links, 'post_type_link' ) )
|
79 |
+
$args['url'] = $polylang->links->get_home_url( '' );
|
80 |
+
} elseif ( method_exists( $polylang->filters_links, 'post_type_link' ) ) {
|
81 |
+
$args['url'] = $polylang->filters_links->post_type_link( $_link, $_post );
|
82 |
+
}
|
83 |
+
|
84 |
+
if ( isset( $args['url'] ) ) {
|
85 |
+
$parsed_url = \wp_parse_url( $args['url'] );
|
86 |
+
$args['scheme'] = isset( $parsed_url['scheme'] ) ? $parsed_url['scheme'] : '';
|
87 |
+
}
|
88 |
+
|
89 |
+
return $args;
|
90 |
+
}
|
91 |
+
|
92 |
+
/**
|
93 |
+
* Filters the canonical generation URL and Scheme arguments for the admin side.
|
94 |
+
*
|
95 |
+
* @since 2.9.2
|
96 |
+
* @access private
|
97 |
+
* @global object $polylang
|
98 |
+
*
|
99 |
+
* @param array $args the URL arguments to supply. : {
|
100 |
+
* 'url' => The full URL built from $path,
|
101 |
+
* 'scheme' => The preferred scheme
|
102 |
+
* }
|
103 |
+
* @param string $path the URL path.
|
104 |
+
* @param int $id The current post, page or term ID.
|
105 |
+
* @param bool $external Whether the call is made from outside the current ID scope. Like from the Sitemap.
|
106 |
+
* @return array { 'url' => The full URL built from $path, 'scheme' => The preferred scheme }
|
107 |
+
*/
|
108 |
+
function _polylang_admin_filter_url_args( $args = array(), $path = '', $id = 0, $external = false ) {
|
109 |
+
global $polylang;
|
110 |
+
|
111 |
+
//* We don't want to fire internal filters that lead to this function.
|
112 |
+
$home_url = \untrailingslashit( \esc_url_raw( \the_seo_framework()->set_preferred_url_scheme( \the_seo_framework()->get_home_host() ) ) );
|
113 |
+
|
114 |
+
if ( \the_seo_framework()->is_real_front_page() || \the_seo_framework()->is_front_page_by_id( $id ) || \the_seo_framework()->is_404() ) {
|
115 |
+
if ( isset( $polylang->links ) && method_exists( $polylang->links, 'get_home_url' ) ) {
|
116 |
+
if ( isset( $polylang->curlang ) && is_object( $polylang->curlang ) )
|
117 |
+
$args['url'] = $polylang->links->get_home_url( $polylang->curlang, false );
|
118 |
+
} else {
|
119 |
+
$args['url'] = $home_url;
|
120 |
+
}
|
121 |
+
} elseif ( $path ) {
|
122 |
+
$_post = \get_post( $id );
|
123 |
+
$_link = $home_url . $path;
|
124 |
+
|
125 |
+
if ( method_exists( $polylang->filters_links, 'post_type_link' ) ) {
|
126 |
+
$args['url'] = $polylang->filters_links->post_type_link( $_link, $_post );
|
127 |
+
}
|
128 |
+
}
|
129 |
+
|
130 |
+
if ( isset( $args['url'] ) ) {
|
131 |
+
$parsed_url = \wp_parse_url( $args['url'] );
|
132 |
+
$args['scheme'] = isset( $parsed_url['scheme'] ) ? $parsed_url['scheme'] : '';
|
133 |
+
}
|
134 |
+
|
135 |
+
return $args;
|
136 |
+
}
|
137 |
+
|
138 |
+
/**
|
139 |
+
* Filters the canonical generation URL and Scheme arguments for the frontend.
|
140 |
+
*
|
141 |
+
* @since 2.9.2
|
142 |
+
* @access private
|
143 |
+
* @global object $polylang
|
144 |
+
*
|
145 |
+
* @param array $args the URL arguments to supply. : {
|
146 |
+
* 'url' => The full URL built from $path,
|
147 |
+
* 'scheme' => The preferred scheme
|
148 |
+
* }
|
149 |
+
* @param string $path the URL path.
|
150 |
+
* @param int $id The current post, page or term ID.
|
151 |
+
* @param bool $external Whether the call is made from outside the current ID scope. Like from the Sitemap.
|
152 |
+
* @return array { 'url' => The full URL built from $path, 'scheme' => The preferred scheme }
|
153 |
+
*/
|
154 |
+
function _polylang_frontend_filter_url_args( $args = array(), $path = '', $id = 0, $external = false ) {
|
155 |
+
global $polylang;
|
156 |
+
|
157 |
+
//* We don't want to fire internal filters that lead to this function.
|
158 |
+
$home_url = \untrailingslashit( \esc_url_raw( \the_seo_framework()->set_preferred_url_scheme( \the_seo_framework()->get_home_host() ) ) );
|
159 |
+
|
160 |
+
if ( \the_seo_framework()->is_real_front_page() || \the_seo_framework()->is_404() || \the_seo_framework()->is_search() ) {
|
161 |
+
if ( isset( $polylang->links ) && method_exists( $polylang->links, 'get_home_url' ) ) {
|
162 |
+
$_curlang = isset( $polylang->curlang ) ? $polylang->curlang : '';
|
163 |
+
$args['url'] = $polylang->links->get_home_url( $_curlang );
|
164 |
+
} else {
|
165 |
+
$args['url'] = $home_url;
|
166 |
+
}
|
167 |
+
} elseif ( $path ) {
|
168 |
+
$_requested_url = $home_url . $path;
|
169 |
+
|
170 |
+
// Only pass if it's not empty, otherwise we'll have XSS issues.
|
171 |
+
if ( $_requested_url ) {
|
172 |
+
if ( \is_post_type_archive() && isset( $polylang->links_model ) && method_exists( $polylang->links_model, 'switch_language_in_link' ) ) {
|
173 |
+
$_curlang = isset( $polylang->curlang ) ? $polylang->curlang : '';
|
174 |
+
$args['url'] = $polylang->links_model->switch_language_in_link( $_requested_url, $_curlang );
|
175 |
+
} elseif ( method_exists( $polylang->filters_links, 'check_canonical_url' ) ) {
|
176 |
+
$args['url'] = $polylang->filters_links->check_canonical_url( $_requested_url, false );
|
177 |
+
}
|
178 |
+
}
|
179 |
+
}
|
180 |
+
|
181 |
+
if ( isset( $args['url'] ) ) {
|
182 |
+
$parsed_url = \wp_parse_url( $args['url'] );
|
183 |
+
$args['scheme'] = isset( $parsed_url['scheme'] ) ? $parsed_url['scheme'] : '';
|
184 |
+
}
|
185 |
+
|
186 |
+
return $args;
|
187 |
+
}
|
inc/compat/plugin-wpforo.php
ADDED
@@ -0,0 +1,82 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* @package The_SEO_Framework\Compat\Plugin\wpForo
|
4 |
+
*/
|
5 |
+
namespace The_SEO_Framework;
|
6 |
+
|
7 |
+
defined( 'ABSPATH' ) and $_this = \the_seo_framework_class() and $this instanceof $_this or die;
|
8 |
+
|
9 |
+
add_action( 'init', __NAMESPACE__ . '\\_wpforo_fix_page' );
|
10 |
+
/**
|
11 |
+
* Initializes wpForo page fixes.
|
12 |
+
*
|
13 |
+
* @since 2.9.2
|
14 |
+
*/
|
15 |
+
function _wpforo_fix_page() {
|
16 |
+
|
17 |
+
if ( function_exists( '\\is_wpforo_page' ) && \is_wpforo_page() ) {
|
18 |
+
\add_filter( 'the_seo_framework_pre_add_title', __NAMESPACE__ . '\\_wpforo_filter_pre_title', 10, 3 );
|
19 |
+
\add_filter( 'the_seo_framework_url_path', __NAMESPACE__ . '\\_wpforo_filter_url_path', 10, 3 );
|
20 |
+
\add_filter( 'the_seo_framework_description_args', __NAMESPACE__ . '\\_wpforo_filter_description_arguments', 10, 3 );
|
21 |
+
|
22 |
+
//* Remove wpforo SEO meta output.
|
23 |
+
\remove_action( 'wp_head', 'wpforo_add_meta_tags', 1 );
|
24 |
+
}
|
25 |
+
}
|
26 |
+
|
27 |
+
/**
|
28 |
+
* Fixes wpForo page Titles.
|
29 |
+
*
|
30 |
+
* @since 2.9.2
|
31 |
+
* @access private
|
32 |
+
*
|
33 |
+
* @param string $title The filter title.
|
34 |
+
* @param array $args The title arguments.
|
35 |
+
* @param bool $escape Whether the output will be sanitized.
|
36 |
+
* @return string $title The wpForo title.
|
37 |
+
*/
|
38 |
+
function _wpforo_filter_pre_title( $title, $args, $escape ) {
|
39 |
+
$wpforo_title = \wpforo_meta_title( '' );
|
40 |
+
return $wpforo_title[0] ?: $title;
|
41 |
+
}
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Fixes wpForo page URL paths.
|
45 |
+
*
|
46 |
+
* @since 2.9.2
|
47 |
+
* @access private
|
48 |
+
*
|
49 |
+
* @param string $path The current path.
|
50 |
+
* @param int $id The page/post ID.
|
51 |
+
* @param bool $external Whether the request is external (i.e. sitemap)
|
52 |
+
* @return string The URL path.
|
53 |
+
*/
|
54 |
+
function _wpforo_filter_url_path( $path, $id, $external ) {
|
55 |
+
|
56 |
+
if ( $external )
|
57 |
+
return $path;
|
58 |
+
|
59 |
+
if ( '' === \the_seo_framework()->permalink_structure() )
|
60 |
+
return $path;
|
61 |
+
|
62 |
+
return \the_seo_framework()->set_url_scheme( \wpforo_get_request_uri(), 'relative' );
|
63 |
+
}
|
64 |
+
|
65 |
+
/**
|
66 |
+
* Fixes wpForo page descriptions.
|
67 |
+
*
|
68 |
+
* @since 2.9.2
|
69 |
+
* @access private
|
70 |
+
*
|
71 |
+
* @param array $defaults The default arguments.
|
72 |
+
* @param array $args The method caller arguments.
|
73 |
+
* @return array The description default arguments.
|
74 |
+
*/
|
75 |
+
function _wpforo_filter_description_arguments( $defaults, $args ) {
|
76 |
+
|
77 |
+
//* Disable internal requests only. Magic variable (i.e. do overthink it, as it will loop).
|
78 |
+
if ( empty( $args['social'] ) && empty( $args['get_custom_field'] ) )
|
79 |
+
$defaults['get_custom_field'] = false;
|
80 |
+
|
81 |
+
return $defaults;
|
82 |
+
}
|
inc/compat/plugin-wpml.php
CHANGED
@@ -7,7 +7,7 @@ namespace The_SEO_Framework;
|
|
7 |
defined( 'ABSPATH' ) and $_this = \the_seo_framework_class() and $this instanceof $_this or die;
|
8 |
|
9 |
/**
|
10 |
-
* Warns homepage global title and description about
|
11 |
*
|
12 |
* @since 1.0.0
|
13 |
*/
|
@@ -19,6 +19,7 @@ defined( 'ABSPATH' ) and $_this = \the_seo_framework_class() and $this instanceo
|
|
19 |
* Filters the canonical URL path.
|
20 |
*
|
21 |
* @since 2.8.0
|
|
|
22 |
* @access private
|
23 |
*
|
24 |
* @param string $path the URL path.
|
@@ -27,35 +28,48 @@ defined( 'ABSPATH' ) and $_this = \the_seo_framework_class() and $this instanceo
|
|
27 |
* @return string The URL path.
|
28 |
*/
|
29 |
function _wpml_filter_url_path( $path = '', $id = 0, $external = false ) {
|
30 |
-
return \The_SEO_Framework\_wmpl_get_relative_url( $path, $id );
|
31 |
}
|
32 |
|
33 |
/**
|
34 |
* Generate relative WPML url.
|
35 |
*
|
36 |
* @since 2.4.3
|
|
|
|
|
|
|
|
|
|
|
|
|
37 |
* @staticvar bool $gli_exists
|
38 |
* @staticvar string $default_lang
|
|
|
|
|
39 |
* @global object $sitepress
|
40 |
* @NOTE: Handles full path, including home directory.
|
41 |
* @access private
|
42 |
*
|
43 |
* @param string $path The current path.
|
44 |
* @param int $post_id The Post ID.
|
|
|
45 |
* @return relative path for WPML urls.
|
46 |
*/
|
47 |
-
function _wmpl_get_relative_url( $path = '', $post_id = '' ) {
|
48 |
global $sitepress;
|
49 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
50 |
//* Reset cache.
|
51 |
\the_seo_framework()->url_slashit = true;
|
52 |
\the_seo_framework()->unset_current_subdomain();
|
53 |
|
54 |
-
if ( ! isset( $sitepress ) )
|
55 |
-
return $path;
|
56 |
-
|
57 |
static $gli_exists = null;
|
58 |
-
if (
|
59 |
$gli_exists = function_exists( 'wpml_get_language_information' );
|
60 |
|
61 |
if ( false === $gli_exists )
|
@@ -66,44 +80,56 @@ function _wmpl_get_relative_url( $path = '', $post_id = '' ) {
|
|
66 |
|
67 |
//* Cache default language.
|
68 |
static $default_lang = null;
|
69 |
-
if (
|
70 |
-
$default_lang = $sitepress->get_default_language();
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
$lang_info
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
91 |
}
|
92 |
|
93 |
-
//* If filter isn't used, bail.
|
94 |
-
if ( false === isset( $lang_info['language_code'] ) )
|
95 |
-
return $path;
|
96 |
-
|
97 |
-
$current_lang = $lang_info['language_code'];
|
98 |
-
|
99 |
//* No need to alter URL if we're on default lang.
|
100 |
if ( $current_lang === $default_lang )
|
101 |
return $path;
|
102 |
|
103 |
//* Cache negotiation type.
|
104 |
static $negotiation_type = null;
|
105 |
-
if (
|
106 |
-
$negotiation_type = $sitepress->get_setting( 'language_negotiation_type' );
|
107 |
|
108 |
switch ( $negotiation_type ) :
|
109 |
case '1' :
|
7 |
defined( 'ABSPATH' ) and $_this = \the_seo_framework_class() and $this instanceof $_this or die;
|
8 |
|
9 |
/**
|
10 |
+
* Warns homepage global title and description about receiving input.
|
11 |
*
|
12 |
* @since 1.0.0
|
13 |
*/
|
19 |
* Filters the canonical URL path.
|
20 |
*
|
21 |
* @since 2.8.0
|
22 |
+
* @since 2.9.2 : Now passes $external paramerer
|
23 |
* @access private
|
24 |
*
|
25 |
* @param string $path the URL path.
|
28 |
* @return string The URL path.
|
29 |
*/
|
30 |
function _wpml_filter_url_path( $path = '', $id = 0, $external = false ) {
|
31 |
+
return \The_SEO_Framework\_wmpl_get_relative_url( $path, $id, $external );
|
32 |
}
|
33 |
|
34 |
/**
|
35 |
* Generate relative WPML url.
|
36 |
*
|
37 |
* @since 2.4.3
|
38 |
+
* @since 2.9.2 : 1. Added $is_external staticvar.
|
39 |
+
* : 2. Added $current_language staticvar.
|
40 |
+
* : 3. Cached $current_language through WPML determination, improving performance.
|
41 |
+
* : 4. Can now receive $external parameter.
|
42 |
+
*
|
43 |
+
* @staticvar bool $is_external
|
44 |
* @staticvar bool $gli_exists
|
45 |
* @staticvar string $default_lang
|
46 |
+
* @staticvar string $current_language
|
47 |
+
* @staticvar string $lang_code
|
48 |
* @global object $sitepress
|
49 |
* @NOTE: Handles full path, including home directory.
|
50 |
* @access private
|
51 |
*
|
52 |
* @param string $path The current path.
|
53 |
* @param int $post_id The Post ID.
|
54 |
+
* @param bool $external Whether the call is made from outside the current ID scope.
|
55 |
* @return relative path for WPML urls.
|
56 |
*/
|
57 |
+
function _wmpl_get_relative_url( $path = '', $post_id = '', $external = false ) {
|
58 |
global $sitepress;
|
59 |
|
60 |
+
if ( ! is_object( $sitepress ) )
|
61 |
+
return $path;
|
62 |
+
|
63 |
+
static $is_external = null;
|
64 |
+
if ( null === $is_external )
|
65 |
+
$is_external = \the_seo_framework()->is_sitemap() || \the_seo_framework()->is_robots();
|
66 |
+
|
67 |
//* Reset cache.
|
68 |
\the_seo_framework()->url_slashit = true;
|
69 |
\the_seo_framework()->unset_current_subdomain();
|
70 |
|
|
|
|
|
|
|
71 |
static $gli_exists = null;
|
72 |
+
if ( null === $gli_exists )
|
73 |
$gli_exists = function_exists( 'wpml_get_language_information' );
|
74 |
|
75 |
if ( false === $gli_exists )
|
80 |
|
81 |
//* Cache default language.
|
82 |
static $default_lang = null;
|
83 |
+
if ( null === $default_lang )
|
84 |
+
$default_lang = is_callable( array( $sitepress, 'get_default_language' ) ) ? $sitepress->get_default_language() : '';
|
85 |
+
|
86 |
+
//* Cache current language.
|
87 |
+
static $current_language = null;
|
88 |
+
if ( null === $current_language )
|
89 |
+
$current_language = ! ( $is_external || $external ) && is_callable( array( $sitepress, 'get_current_language' ) ) ? $sitepress->get_current_language() : '';
|
90 |
+
|
91 |
+
if ( empty( $current_language ) ) {
|
92 |
+
/**
|
93 |
+
* Applies filters 'wpml_post_language_details' : array|wp_error
|
94 |
+
*
|
95 |
+
* Only works for singular items.
|
96 |
+
*
|
97 |
+
* ... Somehow WPML thought this would be great and understandable.
|
98 |
+
* This should be put inside a callable function.
|
99 |
+
*
|
100 |
+
* @since 2.6.0
|
101 |
+
*/
|
102 |
+
$lang_info = \apply_filters( 'wpml_post_language_details', null, $post_id );
|
103 |
+
|
104 |
+
if ( \is_wp_error( $lang_info ) ) {
|
105 |
+
//* Terms and Taxonomies.
|
106 |
+
$lang_info = array();
|
107 |
+
|
108 |
+
//* Cache the code.
|
109 |
+
static $lang_code = null;
|
110 |
+
if ( null === $lang_code )
|
111 |
+
$lang_code = defined( 'ICL_LANGUAGE_CODE' ) ? ICL_LANGUAGE_CODE : false;
|
112 |
+
|
113 |
+
$lang_info['language_code'] = $lang_code;
|
114 |
+
}
|
115 |
+
|
116 |
+
//* If filter isn't used, bail.
|
117 |
+
if ( empty( $lang_info['language_code'] ) )
|
118 |
+
return $path;
|
119 |
+
|
120 |
+
$current_lang = $lang_info['language_code'];
|
121 |
+
} else {
|
122 |
+
$current_lang = $current_language;
|
123 |
}
|
124 |
|
|
|
|
|
|
|
|
|
|
|
|
|
125 |
//* No need to alter URL if we're on default lang.
|
126 |
if ( $current_lang === $default_lang )
|
127 |
return $path;
|
128 |
|
129 |
//* Cache negotiation type.
|
130 |
static $negotiation_type = null;
|
131 |
+
if ( null === $negotiation_type )
|
132 |
+
$negotiation_type = is_callable( array( $sitepress, 'get_current_language' ) ) ? $sitepress->get_setting( 'language_negotiation_type' ) : '';
|
133 |
|
134 |
switch ( $negotiation_type ) :
|
135 |
case '1' :
|
inc/functions/deprecated.php
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?php
|
2 |
/**
|
3 |
* The SEO Framework plugin
|
4 |
-
* Copyright (C) 2015 -
|
5 |
*
|
6 |
* This program is free software: you can redistribute it and/or modify
|
7 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -24,71 +24,5 @@ defined( 'ABSPATH' ) or die;
|
|
24 |
* @since 2.1.6
|
25 |
* @since 2.3.5 Emptied. (~2.5 months later)
|
26 |
* @since 2.6.2 Emptied. (~6 months later)
|
|
|
27 |
*/
|
28 |
-
|
29 |
-
/**
|
30 |
-
* Fetch an option from The SEO Framework.
|
31 |
-
*
|
32 |
-
* @since 2.2.9
|
33 |
-
*
|
34 |
-
* @deprecated
|
35 |
-
* @since 2.7.0
|
36 |
-
*
|
37 |
-
* @param string $key Option name.
|
38 |
-
* @param boolean $use_cache Optional. Whether to use the cache value or not. Defaults to true.
|
39 |
-
* @return mixed The option value.
|
40 |
-
*/
|
41 |
-
function tsf_get_option( $key, $use_cache = true ) {
|
42 |
-
|
43 |
-
$theseoframework = the_seo_framework();
|
44 |
-
|
45 |
-
if ( isset( $theseoframework ) )
|
46 |
-
$theseoframework->_deprecated_function( __FUNCTION__, '2.7.0', 'the_seo_framework_get_option()' );
|
47 |
-
|
48 |
-
return the_seo_framework_get_option( $key, $use_cache );
|
49 |
-
}
|
50 |
-
|
51 |
-
/**
|
52 |
-
* Fetch the The SEO Framework Options pagehook.
|
53 |
-
*
|
54 |
-
* @since 2.2.9
|
55 |
-
*
|
56 |
-
* @deprecated
|
57 |
-
* @since 2.7.0
|
58 |
-
*
|
59 |
-
* @return string|null The pagehook.
|
60 |
-
*/
|
61 |
-
function tsf_options_pagehook() {
|
62 |
-
|
63 |
-
$theseoframework = the_seo_framework();
|
64 |
-
|
65 |
-
if ( isset( $theseoframework ) )
|
66 |
-
$theseoframework->_deprecated_function( __FUNCTION__, '2.7.0', 'the_seo_framework_options_pagehook()' );
|
67 |
-
|
68 |
-
return the_seo_framework_options_pagehook();
|
69 |
-
}
|
70 |
-
|
71 |
-
|
72 |
-
/**
|
73 |
-
* Compare the WordPress version to the input one.
|
74 |
-
*
|
75 |
-
* @since 2.2.9
|
76 |
-
*
|
77 |
-
* @deprecated
|
78 |
-
* @since 2.7.0
|
79 |
-
*
|
80 |
-
* @param string $version The 3 point version compare
|
81 |
-
* @param string $compare The PHP comparison operator.
|
82 |
-
* @return bool true if Version passes comparison.
|
83 |
-
*/
|
84 |
-
function tsf_wp_version( $version = '4.3.0', $compare = '>=' ) {
|
85 |
-
|
86 |
-
$theseoframework = the_seo_framework();
|
87 |
-
|
88 |
-
if ( isset( $theseoframework ) ) {
|
89 |
-
$theseoframework->_deprecated_function( __FUNCTION__, '2.7.0', 'the_seo_framework()->wp_version()' );
|
90 |
-
return $theseoframework->wp_version( $version, $compare );
|
91 |
-
}
|
92 |
-
|
93 |
-
return null;
|
94 |
-
}
|
1 |
<?php
|
2 |
/**
|
3 |
* The SEO Framework plugin
|
4 |
+
* Copyright (C) 2015 - 2017 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
5 |
*
|
6 |
* This program is free software: you can redistribute it and/or modify
|
7 |
* it under the terms of the GNU General Public License version 3 as published
|
24 |
* @since 2.1.6
|
25 |
* @since 2.3.5 Emptied. (~2.5 months later)
|
26 |
* @since 2.6.2 Emptied. (~6 months later)
|
27 |
+
* @since 2.9.2 Emptied. (~8 months later)
|
28 |
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/functions/optionsapi.php
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?php
|
2 |
/**
|
3 |
* The SEO Framework plugin
|
4 |
-
* Copyright (C) 2015 -
|
5 |
*
|
6 |
* This program is free software: you can redistribute it and/or modify
|
7 |
* it under the terms of the GNU General Public License version 3 as published
|
1 |
<?php
|
2 |
/**
|
3 |
* The SEO Framework plugin
|
4 |
+
* Copyright (C) 2015 - 2017 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
5 |
*
|
6 |
* This program is free software: you can redistribute it and/or modify
|
7 |
* it under the terms of the GNU General Public License version 3 as published
|
inc/functions/plugin-test-server.php
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?php
|
2 |
/**
|
3 |
* The SEO Framework plugin
|
4 |
-
* Copyright (C) 2015 -
|
5 |
*
|
6 |
* This program is free software: you can redistribute it and/or modify
|
7 |
* it under the terms of the GNU General Public License version 3 as published
|
1 |
<?php
|
2 |
/**
|
3 |
* The SEO Framework plugin
|
4 |
+
* Copyright (C) 2015 - 2017 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
5 |
*
|
6 |
* This program is free software: you can redistribute it and/or modify
|
7 |
* it under the terms of the GNU General Public License version 3 as published
|
inc/functions/upgrade.php
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?php
|
2 |
/**
|
3 |
* The SEO Framework plugin
|
4 |
-
* Copyright (C) 2015 -
|
5 |
*
|
6 |
* This program is free software: you can redistribute it and/or modify
|
7 |
* it under the terms of the GNU General Public License version 3 as published
|
1 |
<?php
|
2 |
/**
|
3 |
* The SEO Framework plugin
|
4 |
+
* Copyright (C) 2015 - 2017 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
5 |
*
|
6 |
* This program is free software: you can redistribute it and/or modify
|
7 |
* it under the terms of the GNU General Public License version 3 as published
|
inc/interfaces/debug.interface.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2017 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
inc/views/metaboxes/general-metabox.php
CHANGED
@@ -14,16 +14,16 @@ switch ( $instance ) :
|
|
14 |
// 'callback' => array( $this, 'general_metabox_general_tab' ),
|
15 |
// 'dashicon' => 'admin-generic',
|
16 |
// ),
|
17 |
-
'performance' => array(
|
18 |
-
'name' => __( 'Performance', 'autodescription' ),
|
19 |
-
'callback' => array( $this, 'general_metabox_performance_tab' ),
|
20 |
-
'dashicon' => 'performance',
|
21 |
-
),
|
22 |
'layout' => array(
|
23 |
'name' => __( 'Layout', 'autodescription' ),
|
24 |
'callback' => array( $this, 'general_metabox_layout_tab' ),
|
25 |
'dashicon' => 'screenoptions',
|
26 |
),
|
|
|
|
|
|
|
|
|
|
|
27 |
'canonical' => array(
|
28 |
'name' => __( 'Canonical', 'autodescription' ),
|
29 |
'callback' => array( $this, 'general_metabox_canonical_tab' ),
|
@@ -47,6 +47,34 @@ switch ( $instance ) :
|
|
47 |
echo 'Nothing to see here yet.';
|
48 |
break;
|
49 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
50 |
case 'the_seo_framework_general_metabox_performance' :
|
51 |
|
52 |
?><h4><?php esc_html_e( 'Performance Settings', 'autodescription' ); ?></h4><?php
|
@@ -105,40 +133,12 @@ switch ( $instance ) :
|
|
105 |
endif;
|
106 |
break;
|
107 |
|
108 |
-
case 'the_seo_framework_general_metabox_layout' :
|
109 |
-
?><h4><?php esc_html_e( 'Administrative Layout Settings', 'autodescription' ); ?></h4><?php
|
110 |
-
$this->description( __( 'SEO hints can be visually displayed throughout the dashboard.', 'autodescription' ) );
|
111 |
-
|
112 |
-
?>
|
113 |
-
<hr>
|
114 |
-
|
115 |
-
<h4><?php esc_html_e( 'SEO Bar Settings', 'autodescription' ); ?></h4>
|
116 |
-
<?php
|
117 |
-
$this->wrap_fields(
|
118 |
-
array(
|
119 |
-
$this->make_checkbox(
|
120 |
-
'display_seo_bar_tables',
|
121 |
-
esc_html__( 'Display the SEO Bar in overview tables?', 'autodescription' ),
|
122 |
-
'',
|
123 |
-
false
|
124 |
-
),
|
125 |
-
$this->make_checkbox(
|
126 |
-
'display_seo_bar_metabox',
|
127 |
-
esc_html__( 'Display the SEO Bar in the SEO Settings metabox?', 'autodescription' ),
|
128 |
-
'',
|
129 |
-
false
|
130 |
-
),
|
131 |
-
),
|
132 |
-
true
|
133 |
-
);
|
134 |
-
break;
|
135 |
-
|
136 |
case 'the_seo_framework_general_metabox_canonical' :
|
137 |
|
138 |
?><h4><?php esc_html_e( 'Canonical URL Settings', 'autodescription' ); ?></h4><?php
|
139 |
$this->description( __( 'The canonical URL meta tag urges Search Engines to go to the outputted URL.', 'autodescription' ) );
|
140 |
$this->description( __( 'If the canonical URL meta tag represents the visited page, then the Search Engine will crawl the visited page. Otherwise, the Search Engine might go to the outputted URL.', 'autodescription' ) );
|
141 |
-
$this->description( __( 'Only adjust these options if you are aware of
|
142 |
?>
|
143 |
<hr>
|
144 |
|
14 |
// 'callback' => array( $this, 'general_metabox_general_tab' ),
|
15 |
// 'dashicon' => 'admin-generic',
|
16 |
// ),
|
|
|
|
|
|
|
|
|
|
|
17 |
'layout' => array(
|
18 |
'name' => __( 'Layout', 'autodescription' ),
|
19 |
'callback' => array( $this, 'general_metabox_layout_tab' ),
|
20 |
'dashicon' => 'screenoptions',
|
21 |
),
|
22 |
+
'performance' => array(
|
23 |
+
'name' => __( 'Performance', 'autodescription' ),
|
24 |
+
'callback' => array( $this, 'general_metabox_performance_tab' ),
|
25 |
+
'dashicon' => 'performance',
|
26 |
+
),
|
27 |
'canonical' => array(
|
28 |
'name' => __( 'Canonical', 'autodescription' ),
|
29 |
'callback' => array( $this, 'general_metabox_canonical_tab' ),
|
47 |
echo 'Nothing to see here yet.';
|
48 |
break;
|
49 |
|
50 |
+
case 'the_seo_framework_general_metabox_layout' :
|
51 |
+
?><h4><?php esc_html_e( 'Administrative Layout Settings', 'autodescription' ); ?></h4><?php
|
52 |
+
$this->description( __( 'SEO hints can be visually displayed throughout the dashboard.', 'autodescription' ) );
|
53 |
+
|
54 |
+
?>
|
55 |
+
<hr>
|
56 |
+
|
57 |
+
<h4><?php esc_html_e( 'SEO Bar Settings', 'autodescription' ); ?></h4>
|
58 |
+
<?php
|
59 |
+
$this->wrap_fields(
|
60 |
+
array(
|
61 |
+
$this->make_checkbox(
|
62 |
+
'display_seo_bar_tables',
|
63 |
+
esc_html__( 'Display the SEO Bar in overview tables?', 'autodescription' ),
|
64 |
+
'',
|
65 |
+
false
|
66 |
+
),
|
67 |
+
$this->make_checkbox(
|
68 |
+
'display_seo_bar_metabox',
|
69 |
+
esc_html__( 'Display the SEO Bar in the SEO Settings metabox?', 'autodescription' ),
|
70 |
+
'',
|
71 |
+
false
|
72 |
+
),
|
73 |
+
),
|
74 |
+
true
|
75 |
+
);
|
76 |
+
break;
|
77 |
+
|
78 |
case 'the_seo_framework_general_metabox_performance' :
|
79 |
|
80 |
?><h4><?php esc_html_e( 'Performance Settings', 'autodescription' ); ?></h4><?php
|
133 |
endif;
|
134 |
break;
|
135 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
136 |
case 'the_seo_framework_general_metabox_canonical' :
|
137 |
|
138 |
?><h4><?php esc_html_e( 'Canonical URL Settings', 'autodescription' ); ?></h4><?php
|
139 |
$this->description( __( 'The canonical URL meta tag urges Search Engines to go to the outputted URL.', 'autodescription' ) );
|
140 |
$this->description( __( 'If the canonical URL meta tag represents the visited page, then the Search Engine will crawl the visited page. Otherwise, the Search Engine might go to the outputted URL.', 'autodescription' ) );
|
141 |
+
$this->description( __( 'Only adjust these options if you are aware of their SEO effects.', 'autodescription' ) );
|
142 |
?>
|
143 |
<hr>
|
144 |
|
inc/views/metaboxes/schema-metabox.php
CHANGED
@@ -186,7 +186,8 @@ switch ( $instance ) :
|
|
186 |
?>
|
187 |
<hr>
|
188 |
|
189 |
-
<h4><?php esc_html_e( 'Social Pages connected to this website', 'autodescription' ); ?></h4
|
|
|
190 |
$this->description( __( "Don't have a page at a site or is the profile only privately accessible? Leave that field empty. Unsure? Fill it in anyway.", 'autodescription' ) );
|
191 |
$this->description( __( 'Add the link that leads directly to the social page of this website.', 'autodescription' ) );
|
192 |
|
@@ -201,14 +202,14 @@ switch ( $instance ) :
|
|
201 |
'option' => 'knowledge_facebook',
|
202 |
'dashicon' => 'dashicons-facebook',
|
203 |
'desc' => 'Facebook ' . __( 'Page', 'autodescription' ),
|
204 |
-
'placeholder' => '
|
205 |
-
'examplelink' => esc_url( 'https://facebook.com/me' ),
|
206 |
),
|
207 |
'twitter' => array(
|
208 |
'option' => 'knowledge_twitter',
|
209 |
'dashicon' => 'dashicons-twitter',
|
210 |
'desc' => 'Twitter ' . $profile18n,
|
211 |
-
'placeholder' => '
|
212 |
'examplelink' => esc_url( 'https://twitter.com/home' ), // No example link available.
|
213 |
),
|
214 |
'gplus' => array(
|
@@ -222,22 +223,22 @@ switch ( $instance ) :
|
|
222 |
'option' => 'knowledge_instagram',
|
223 |
'dashicon' => 'genericon-instagram',
|
224 |
'desc' => 'Instagram ' . $profile18n,
|
225 |
-
'placeholder' => '
|
226 |
'examplelink' => esc_url( 'https://instagram.com/' ), // No example link available.
|
227 |
),
|
228 |
'youtube' => array(
|
229 |
'option' => 'knowledge_youtube',
|
230 |
'dashicon' => 'genericon-youtube',
|
231 |
'desc' => 'Youtube ' . $profile18n,
|
232 |
-
'placeholder' => '
|
233 |
'examplelink' => esc_url( 'https://www.youtube.com/user/%2f' ), // Yes a double slash.
|
234 |
),
|
235 |
'linkedin' => array(
|
236 |
'option' => 'knowledge_linkedin',
|
237 |
'dashicon' => 'genericon-linkedin-alt',
|
238 |
'desc' => 'LinkedIn ' . $profile18n . ' ID',
|
239 |
-
'placeholder' => '
|
240 |
-
'examplelink' => esc_url( 'https://www.linkedin.com/profile/view' ),
|
241 |
),
|
242 |
'pinterest' => array(
|
243 |
'option' => 'knowledge_pinterest',
|
@@ -257,7 +258,7 @@ switch ( $instance ) :
|
|
257 |
'option' => 'knowledge_tumblr',
|
258 |
'dashicon' => 'genericon-tumblr',
|
259 |
'desc' => 'Tumblr ' . __( 'Blog', 'autodescription' ),
|
260 |
-
'placeholder' => 'https://tumblr.com/blog/' . $connectedi18n,
|
261 |
'examplelink' => esc_url( 'https://www.tumblr.com/dashboard' ), // No example link available.
|
262 |
),
|
263 |
);
|
186 |
?>
|
187 |
<hr>
|
188 |
|
189 |
+
<h4><?php esc_html_e( 'Social Pages connected to this website', 'autodescription' ); ?></h4>
|
190 |
+
<?php
|
191 |
$this->description( __( "Don't have a page at a site or is the profile only privately accessible? Leave that field empty. Unsure? Fill it in anyway.", 'autodescription' ) );
|
192 |
$this->description( __( 'Add the link that leads directly to the social page of this website.', 'autodescription' ) );
|
193 |
|
202 |
'option' => 'knowledge_facebook',
|
203 |
'dashicon' => 'dashicons-facebook',
|
204 |
'desc' => 'Facebook ' . __( 'Page', 'autodescription' ),
|
205 |
+
'placeholder' => 'https://www.facebook.com/' . $connectedi18n,
|
206 |
+
'examplelink' => esc_url( 'https://www.facebook.com/me' ),
|
207 |
),
|
208 |
'twitter' => array(
|
209 |
'option' => 'knowledge_twitter',
|
210 |
'dashicon' => 'dashicons-twitter',
|
211 |
'desc' => 'Twitter ' . $profile18n,
|
212 |
+
'placeholder' => 'https://twitter.com/' . $connectedi18n,
|
213 |
'examplelink' => esc_url( 'https://twitter.com/home' ), // No example link available.
|
214 |
),
|
215 |
'gplus' => array(
|
223 |
'option' => 'knowledge_instagram',
|
224 |
'dashicon' => 'genericon-instagram',
|
225 |
'desc' => 'Instagram ' . $profile18n,
|
226 |
+
'placeholder' => 'https://instagram.com/' . $connectedi18n,
|
227 |
'examplelink' => esc_url( 'https://instagram.com/' ), // No example link available.
|
228 |
),
|
229 |
'youtube' => array(
|
230 |
'option' => 'knowledge_youtube',
|
231 |
'dashicon' => 'genericon-youtube',
|
232 |
'desc' => 'Youtube ' . $profile18n,
|
233 |
+
'placeholder' => 'https://www.youtube.com/channel/' . $connectedi18n,
|
234 |
'examplelink' => esc_url( 'https://www.youtube.com/user/%2f' ), // Yes a double slash.
|
235 |
),
|
236 |
'linkedin' => array(
|
237 |
'option' => 'knowledge_linkedin',
|
238 |
'dashicon' => 'genericon-linkedin-alt',
|
239 |
'desc' => 'LinkedIn ' . $profile18n . ' ID',
|
240 |
+
'placeholder' => 'https://www.linkedin.com/in/' . $connectedi18n,
|
241 |
+
'examplelink' => esc_url( 'https://www.linkedin.com/profile/view' ),
|
242 |
),
|
243 |
'pinterest' => array(
|
244 |
'option' => 'knowledge_pinterest',
|
258 |
'option' => 'knowledge_tumblr',
|
259 |
'dashicon' => 'genericon-tumblr',
|
260 |
'desc' => 'Tumblr ' . __( 'Blog', 'autodescription' ),
|
261 |
+
'placeholder' => 'https://www.tumblr.com/blog/' . $connectedi18n,
|
262 |
'examplelink' => esc_url( 'https://www.tumblr.com/dashboard' ), // No example link available.
|
263 |
),
|
264 |
);
|
inc/views/metaboxes/sitemaps-metabox.php
CHANGED
@@ -8,92 +8,76 @@ $instance = $this->get_view_instance( 'the_seo_framework_sitemaps_metabox', $ins
|
|
8 |
switch ( $instance ) :
|
9 |
case 'the_seo_framework_sitemaps_metabox_main' :
|
10 |
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
20 |
|
21 |
-
|
|
|
|
|
|
|
|
|
|
|
22 |
|
23 |
-
|
24 |
-
|
25 |
-
*
|
26 |
-
* @param array $default_tabs { 'id' = The identifier =>
|
27 |
-
* array(
|
28 |
-
* 'name' => The name
|
29 |
-
* 'callback' => The callback function, use array for method calling
|
30 |
-
* 'dashicon' => Desired dashicon
|
31 |
-
* )
|
32 |
-
* }
|
33 |
-
*
|
34 |
-
* @since 2.2.9
|
35 |
-
*/
|
36 |
-
$default_tabs = array(
|
37 |
-
'general' => array(
|
38 |
-
'name' => __( 'General', 'autodescription' ),
|
39 |
-
'callback' => array( $this, 'sitemaps_metabox_general_tab' ),
|
40 |
-
'dashicon' => 'admin-generic',
|
41 |
-
),
|
42 |
-
'robots' => array(
|
43 |
-
'name' => 'Robots.txt',
|
44 |
-
'callback' => array( $this, 'sitemaps_metabox_robots_tab' ),
|
45 |
-
'dashicon' => 'share-alt2',
|
46 |
-
),
|
47 |
-
'timestamps' => array(
|
48 |
-
'name' => __( 'Timestamps', 'autodescription' ),
|
49 |
-
'callback' => array( $this, 'sitemaps_metabox_timestamps_tab' ),
|
50 |
-
'dashicon' => 'backup',
|
51 |
-
),
|
52 |
-
'notify' => array(
|
53 |
-
'name' => _x( 'Ping', 'Ping or notify Search Engine', 'autodescription' ),
|
54 |
-
'callback' => array( $this, 'sitemaps_metabox_notify_tab' ),
|
55 |
-
'dashicon' => 'megaphone',
|
56 |
-
),
|
57 |
-
'style' => array(
|
58 |
-
'name' => __( 'Style', 'autodescription' ),
|
59 |
-
'callback' => array( $this, 'sitemaps_metabox_style_tab' ),
|
60 |
-
'dashicon' => 'art',
|
61 |
-
),
|
62 |
-
);
|
63 |
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
* Used to extend Knowledge Graph tabs
|
68 |
-
*/
|
69 |
-
$defaults = (array) apply_filters( 'the_seo_framework_sitemaps_settings_tabs', $default_tabs, $args );
|
70 |
-
|
71 |
-
$tabs = wp_parse_args( $args, $defaults );
|
72 |
-
$use_tabs = true;
|
73 |
-
|
74 |
-
$has_sitemap_plugin = $this->detect_sitemap_plugin();
|
75 |
-
$sitemap_detected = $this->has_sitemap_xml();
|
76 |
-
$robots_detected = $this->has_robots_txt();
|
77 |
-
|
78 |
-
/**
|
79 |
-
* Remove the timestamps and notify submenus
|
80 |
-
* @since 2.5.2
|
81 |
-
*/
|
82 |
-
if ( $has_sitemap_plugin || $sitemap_detected ) {
|
83 |
-
unset( $tabs['timestamps'] );
|
84 |
-
unset( $tabs['notify'] );
|
85 |
-
}
|
86 |
|
87 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
88 |
|
89 |
-
|
90 |
break;
|
91 |
|
92 |
case 'the_seo_framework_sitemaps_metabox_general' :
|
93 |
|
94 |
-
$
|
95 |
-
|
96 |
-
$sitemap_url = $site_url . 'sitemap.xml';
|
97 |
$has_sitemap_plugin = $this->detect_sitemap_plugin();
|
98 |
$sitemap_detected = $this->has_sitemap_xml();
|
99 |
|
@@ -142,6 +126,17 @@ switch ( $instance ) :
|
|
142 |
|
143 |
if ( $this->has_robots_txt() ) :
|
144 |
$this->description( __( 'A robots.txt file has been detected in the root folder of your website; therefore no settings are able to alter its output.', 'autodescription' ) );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
145 |
elseif ( $this->can_do_sitemap_robots( false ) ) :
|
146 |
$this->description( __( 'The robots.txt file is the first thing Search Engines look for. If you add the sitemap location in the robots.txt file, then Search Engines will look for and index the sitemap.', 'autodescription' ) );
|
147 |
$this->description( __( 'If you do not add the sitemap location to the robots.txt file, you will need to notify Search Engines manually through the Webmaster Console provided by the Search Engines.', 'autodescription' ) );
|
@@ -171,8 +166,7 @@ switch ( $instance ) :
|
|
171 |
endif;
|
172 |
|
173 |
if ( $locate_url ) {
|
174 |
-
$
|
175 |
-
$robots_url = trailingslashit( $site_url ) . 'robots.txt';
|
176 |
$here = '<a href="' . esc_url( $robots_url ) . '" target="_blank" title="' . esc_attr__( 'View robots.txt', 'autodescription' ) . '">' . esc_html_x( 'here', 'The sitemap can be found %s.', 'autodescription' ) . '</a>';
|
177 |
|
178 |
$this->description_noesc( sprintf( esc_html_x( 'The robots.txt file can be found %s.', '%s = here', 'autodescription' ), $here ) );
|
8 |
switch ( $instance ) :
|
9 |
case 'the_seo_framework_sitemaps_metabox_main' :
|
10 |
|
11 |
+
/**
|
12 |
+
* Parse tabs content
|
13 |
+
*
|
14 |
+
* @param array $default_tabs { 'id' = The identifier =>
|
15 |
+
* array(
|
16 |
+
* 'name' => The name
|
17 |
+
* 'callback' => The callback function, use array for method calling
|
18 |
+
* 'dashicon' => Desired dashicon
|
19 |
+
* )
|
20 |
+
* }
|
21 |
+
*
|
22 |
+
* @since 2.2.9
|
23 |
+
*/
|
24 |
+
$default_tabs = array(
|
25 |
+
'general' => array(
|
26 |
+
'name' => __( 'General', 'autodescription' ),
|
27 |
+
'callback' => array( $this, 'sitemaps_metabox_general_tab' ),
|
28 |
+
'dashicon' => 'admin-generic',
|
29 |
+
),
|
30 |
+
'robots' => array(
|
31 |
+
'name' => 'Robots.txt',
|
32 |
+
'callback' => array( $this, 'sitemaps_metabox_robots_tab' ),
|
33 |
+
'dashicon' => 'share-alt2',
|
34 |
+
),
|
35 |
+
'timestamps' => array(
|
36 |
+
'name' => __( 'Timestamps', 'autodescription' ),
|
37 |
+
'callback' => array( $this, 'sitemaps_metabox_timestamps_tab' ),
|
38 |
+
'dashicon' => 'backup',
|
39 |
+
),
|
40 |
+
'notify' => array(
|
41 |
+
'name' => _x( 'Ping', 'Ping or notify Search Engine', 'autodescription' ),
|
42 |
+
'callback' => array( $this, 'sitemaps_metabox_notify_tab' ),
|
43 |
+
'dashicon' => 'megaphone',
|
44 |
+
),
|
45 |
+
'style' => array(
|
46 |
+
'name' => __( 'Style', 'autodescription' ),
|
47 |
+
'callback' => array( $this, 'sitemaps_metabox_style_tab' ),
|
48 |
+
'dashicon' => 'art',
|
49 |
+
),
|
50 |
+
);
|
51 |
|
52 |
+
/**
|
53 |
+
* Applies filters the_seo_framework_sitemaps_settings_tabs : array see $default_tabs
|
54 |
+
*
|
55 |
+
* Used to extend Knowledge Graph tabs
|
56 |
+
*/
|
57 |
+
$defaults = (array) apply_filters( 'the_seo_framework_sitemaps_settings_tabs', $default_tabs, $args );
|
58 |
|
59 |
+
$tabs = wp_parse_args( $args, $defaults );
|
60 |
+
$use_tabs = true;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
61 |
|
62 |
+
$has_sitemap_plugin = $this->detect_sitemap_plugin();
|
63 |
+
$sitemap_detected = $this->has_sitemap_xml();
|
64 |
+
$robots_detected = $this->has_robots_txt();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
65 |
|
66 |
+
/**
|
67 |
+
* Remove the timestamps and notify submenus
|
68 |
+
* @since 2.5.2
|
69 |
+
*/
|
70 |
+
if ( $has_sitemap_plugin || $sitemap_detected ) {
|
71 |
+
unset( $tabs['timestamps'] );
|
72 |
+
unset( $tabs['notify'] );
|
73 |
+
}
|
74 |
|
75 |
+
$this->nav_tab_wrapper( 'sitemaps', $tabs, '2.2.8' );
|
76 |
break;
|
77 |
|
78 |
case 'the_seo_framework_sitemaps_metabox_general' :
|
79 |
|
80 |
+
$sitemap_url = $this->get_sitemap_xml_url();
|
|
|
|
|
81 |
$has_sitemap_plugin = $this->detect_sitemap_plugin();
|
82 |
$sitemap_detected = $this->has_sitemap_xml();
|
83 |
|
126 |
|
127 |
if ( $this->has_robots_txt() ) :
|
128 |
$this->description( __( 'A robots.txt file has been detected in the root folder of your website; therefore no settings are able to alter its output.', 'autodescription' ) );
|
129 |
+
elseif ( ! $this->pretty_permalinks ) :
|
130 |
+
|
131 |
+
$permalink_settings_url = admin_url( 'options-permalink.php' );
|
132 |
+
$here = '<a href="' . esc_url( $permalink_settings_url ) . '" target="_blank" title="' . esc_attr__( 'Permalink Settings', 'autodescription' ) . '">' . esc_html_x( 'here', 'The sitemap can be found %s.', 'autodescription' ) . '</a>';
|
133 |
+
|
134 |
+
?><h4><?php esc_html_e( "You're using the plain permalink structure.", 'autodescription' ); ?></h4><?php
|
135 |
+
$this->description( __( "This means the robots.txt file can't be outputted through the WordPress rewrite rules.", 'autodescription' ) );
|
136 |
+
?><hr><?php
|
137 |
+
$this->description_noesc( sprintf( esc_html_x( 'Change your Permalink Settings %s (Recommended: "Post name").', '%s = here', 'autodescription' ), $here ) );
|
138 |
+
|
139 |
+
$locate_url = false;
|
140 |
elseif ( $this->can_do_sitemap_robots( false ) ) :
|
141 |
$this->description( __( 'The robots.txt file is the first thing Search Engines look for. If you add the sitemap location in the robots.txt file, then Search Engines will look for and index the sitemap.', 'autodescription' ) );
|
142 |
$this->description( __( 'If you do not add the sitemap location to the robots.txt file, you will need to notify Search Engines manually through the Webmaster Console provided by the Search Engines.', 'autodescription' ) );
|
166 |
endif;
|
167 |
|
168 |
if ( $locate_url ) {
|
169 |
+
$robots_url = $this->get_robots_txt_url();
|
|
|
170 |
$here = '<a href="' . esc_url( $robots_url ) . '" target="_blank" title="' . esc_attr__( 'View robots.txt', 'autodescription' ) . '">' . esc_html_x( 'here', 'The sitemap can be found %s.', 'autodescription' ) . '</a>';
|
171 |
|
172 |
$this->description_noesc( sprintf( esc_html_x( 'The robots.txt file can be found %s.', '%s = here', 'autodescription' ), $here ) );
|
inc/views/sitemap/xsl-stylesheet.php
CHANGED
@@ -45,7 +45,7 @@ $sitemap_color_accent = '#' . $this->s_color_hex( (string) apply_filters( 'the_s
|
|
45 |
* Applies filters 'the_seo_framework_sitemap_relative_font_color' : string
|
46 |
* @since 2.8.0
|
47 |
*/
|
48 |
-
$relative_font_color = '#' . $this->s_color_hex( (string) apply_filters( 'the_seo_framework_sitemap_relative_font_color', $this->
|
49 |
|
50 |
/**
|
51 |
* Applies filters 'the_seo_framework_indicator_sitemap' : boolean
|
@@ -53,6 +53,8 @@ $relative_font_color = '#' . $this->s_color_hex( (string) apply_filters( 'the_se
|
|
53 |
*/
|
54 |
$indicator = (bool) apply_filters( 'the_seo_framework_indicator_sitemap', true );
|
55 |
|
|
|
|
|
56 |
$xml = '<?xml version="1.0" encoding="UTF-8"?>
|
57 |
<xsl:stylesheet version="2.0"
|
58 |
xmlns:html="http://www.w3.org/TR/REC-html40"
|
@@ -102,7 +104,7 @@ $xml = '<?xml version="1.0" encoding="UTF-8"?>
|
|
102 |
border-bottom: 1px solid;
|
103 |
}
|
104 |
table {
|
105 |
-
min-width:
|
106 |
border-spacing: 0;
|
107 |
}
|
108 |
th, td {
|
@@ -142,7 +144,7 @@ $xml = '<?xml version="1.0" encoding="UTF-8"?>
|
|
142 |
wp_kses(
|
143 |
ent2ncr(
|
144 |
$this->convert_markdown(
|
145 |
-
/* translators: URLs are in Markdown. */
|
146 |
__( '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/).', 'autodescription' ),
|
147 |
array( 'a' )
|
148 |
)
|
@@ -158,7 +160,7 @@ $xml = '<?xml version="1.0" encoding="UTF-8"?>
|
|
158 |
wp_kses(
|
159 |
ent2ncr(
|
160 |
$this->convert_markdown(
|
161 |
-
/* translators: URLs are in Markdown. */
|
162 |
__( 'You can find more information on XML sitemaps at [sitemaps.org](https://www.sitemaps.org/).', 'autodescription' ),
|
163 |
array( 'a' )
|
164 |
)
|
@@ -176,7 +178,7 @@ $xml = '<?xml version="1.0" encoding="UTF-8"?>
|
|
176 |
<tr>
|
177 |
<th>' . esc_html( ent2ncr( __( 'URL', 'autodescription' ) ) ) . '</th>';
|
178 |
|
179 |
-
if ( $
|
180 |
$xml .= '
|
181 |
<th>' . esc_html( ent2ncr( __( 'Last Updated', 'autodescription' ) ) ) . '</th>';
|
182 |
endif;
|
@@ -202,7 +204,7 @@ $xml .= '
|
|
202 |
</a>
|
203 |
</td>';
|
204 |
|
205 |
-
if ( $
|
206 |
$xml .= '
|
207 |
<td>
|
208 |
<xsl:value-of select="concat(substring(sitemap:lastmod,0,11),concat(\' \', substring(sitemap:lastmod,12,5)))"/>
|
45 |
* Applies filters 'the_seo_framework_sitemap_relative_font_color' : string
|
46 |
* @since 2.8.0
|
47 |
*/
|
48 |
+
$relative_font_color = '#' . $this->s_color_hex( (string) apply_filters( 'the_seo_framework_sitemap_relative_font_color', $this->get_relative_fontcolor( $sitemap_color_main ) ) );
|
49 |
|
50 |
/**
|
51 |
* Applies filters 'the_seo_framework_indicator_sitemap' : boolean
|
53 |
*/
|
54 |
$indicator = (bool) apply_filters( 'the_seo_framework_indicator_sitemap', true );
|
55 |
|
56 |
+
$output_modified = $this->is_option_checked( 'sitemaps_modified' );
|
57 |
+
|
58 |
$xml = '<?xml version="1.0" encoding="UTF-8"?>
|
59 |
<xsl:stylesheet version="2.0"
|
60 |
xmlns:html="http://www.w3.org/TR/REC-html40"
|
104 |
border-bottom: 1px solid;
|
105 |
}
|
106 |
table {
|
107 |
+
min-width: ' . ( $output_modified ? '600' : '450' ) . 'px;
|
108 |
border-spacing: 0;
|
109 |
}
|
110 |
th, td {
|
144 |
wp_kses(
|
145 |
ent2ncr(
|
146 |
$this->convert_markdown(
|
147 |
+
/* translators: URLs are in Markdown. Don't forget to localize the URLs. */
|
148 |
__( '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/).', 'autodescription' ),
|
149 |
array( 'a' )
|
150 |
)
|
160 |
wp_kses(
|
161 |
ent2ncr(
|
162 |
$this->convert_markdown(
|
163 |
+
/* translators: URLs are in Markdown. Don't localize this URL. */
|
164 |
__( 'You can find more information on XML sitemaps at [sitemaps.org](https://www.sitemaps.org/).', 'autodescription' ),
|
165 |
array( 'a' )
|
166 |
)
|
178 |
<tr>
|
179 |
<th>' . esc_html( ent2ncr( __( 'URL', 'autodescription' ) ) ) . '</th>';
|
180 |
|
181 |
+
if ( $output_modified ) :
|
182 |
$xml .= '
|
183 |
<th>' . esc_html( ent2ncr( __( 'Last Updated', 'autodescription' ) ) ) . '</th>';
|
184 |
endif;
|
204 |
</a>
|
205 |
</td>';
|
206 |
|
207 |
+
if ( $output_modified ) :
|
208 |
$xml .= '
|
209 |
<td>
|
210 |
<xsl:value-of select="concat(substring(sitemap:lastmod,0,11),concat(\' \', substring(sitemap:lastmod,12,5)))"/>
|
language/autodescription.pot
CHANGED
@@ -2,9 +2,9 @@
|
|
2 |
# This file is distributed under the same license as the The SEO Framework package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
-
"Project-Id-Version: The SEO Framework 2.9.
|
6 |
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/autodescription\n"
|
7 |
-
"POT-Creation-Date: 2017-
|
8 |
"MIME-Version: 1.0\n"
|
9 |
"Content-Type: text/plain; charset=UTF-8\n"
|
10 |
"Content-Transfer-Encoding: 8bit\n"
|
@@ -12,30 +12,36 @@ msgstr ""
|
|
12 |
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
13 |
"Language-Team: LANGUAGE <LL@li.org>\n"
|
14 |
|
15 |
-
#: inc/classes/admin-init.class.php:
|
16 |
msgid "Good"
|
17 |
msgstr ""
|
18 |
|
19 |
-
#: inc/classes/admin-init.class.php:
|
20 |
msgid "Okay"
|
21 |
msgstr ""
|
22 |
|
23 |
-
#: inc/classes/admin-init.class.php:
|
24 |
msgid "Bad"
|
25 |
msgstr ""
|
26 |
|
27 |
-
#: inc/classes/admin-init.class.php:
|
28 |
msgid "Unknown"
|
29 |
msgstr ""
|
30 |
|
31 |
-
#: inc/classes/admin-init.class.php:
|
32 |
msgid "The changes you made will be lost if you navigate away from this page."
|
33 |
msgstr ""
|
34 |
|
35 |
-
#: inc/classes/admin-init.class.php:
|
36 |
msgid "Are you sure you want to reset all SEO settings to their defaults?"
|
37 |
msgstr ""
|
38 |
|
|
|
|
|
|
|
|
|
|
|
|
|
39 |
#: inc/classes/admin-pages.class.php:82
|
40 |
msgid "Save Settings"
|
41 |
msgstr ""
|
@@ -60,97 +66,106 @@ msgstr ""
|
|
60 |
msgid "New SEO Settings have been updated."
|
61 |
msgstr ""
|
62 |
|
63 |
-
#: inc/classes/admin-pages.class.php:
|
64 |
#: inc/classes/site-options.class.php:429
|
65 |
msgid "SEO Settings"
|
66 |
msgstr ""
|
67 |
|
68 |
-
#: inc/classes/admin-pages.class.php:
|
69 |
msgid "SEO"
|
70 |
msgstr ""
|
71 |
|
72 |
-
#: inc/classes/admin-pages.class.php:
|
73 |
msgid "General Settings"
|
74 |
msgstr ""
|
75 |
|
76 |
-
#: inc/classes/admin-pages.class.php:
|
77 |
msgid "Title Settings"
|
78 |
msgstr ""
|
79 |
|
80 |
-
#: inc/classes/admin-pages.class.php:
|
81 |
msgid "Description Meta Settings"
|
82 |
msgstr ""
|
83 |
|
84 |
-
#: inc/classes/admin-pages.class.php:
|
85 |
msgid "Home Page Settings"
|
86 |
msgstr ""
|
87 |
|
88 |
-
#: inc/classes/admin-pages.class.php:
|
89 |
msgid "Social Meta Settings"
|
90 |
msgstr ""
|
91 |
|
92 |
-
#: inc/classes/admin-pages.class.php:
|
93 |
msgid "Schema Settings"
|
94 |
msgstr ""
|
95 |
|
96 |
-
#: inc/classes/admin-pages.class.php:
|
97 |
#: inc/views/inpost/seo-settings-singular.php:167
|
98 |
#: inc/views/inpost/seo-settings-tt.php:119
|
99 |
msgid "Robots Meta Settings"
|
100 |
msgstr ""
|
101 |
|
102 |
-
#: inc/classes/admin-pages.class.php:
|
103 |
msgid "Webmaster Meta Settings"
|
104 |
msgstr ""
|
105 |
|
106 |
-
#: inc/classes/admin-pages.class.php:
|
107 |
msgid "Sitemap Settings"
|
108 |
msgstr ""
|
109 |
|
110 |
-
#: inc/classes/admin-pages.class.php:
|
111 |
msgid "Feed Settings"
|
112 |
msgstr ""
|
113 |
|
114 |
-
#: inc/classes/admin-pages.class.php:
|
115 |
msgctxt "Button hover"
|
116 |
msgid "Select social image"
|
117 |
msgstr ""
|
118 |
|
119 |
-
#: inc/classes/admin-pages.class.php:
|
120 |
msgid "Select Image"
|
121 |
msgstr ""
|
122 |
|
123 |
-
#: inc/classes/admin-pages.class.php:
|
124 |
msgid "Change Image"
|
125 |
msgstr ""
|
126 |
|
127 |
-
#: inc/classes/admin-pages.class.php:
|
128 |
msgid "Remove Image"
|
129 |
msgstr ""
|
130 |
|
131 |
-
#: inc/classes/admin-pages.class.php:
|
132 |
msgid "Remove selected social image"
|
133 |
msgstr ""
|
134 |
|
135 |
-
#: inc/classes/admin-pages.class.php:
|
136 |
msgctxt "Frame title"
|
137 |
msgid "Select Social Image"
|
138 |
msgstr ""
|
139 |
|
140 |
-
#: inc/classes/admin-pages.class.php:
|
141 |
msgid "Use this image"
|
142 |
msgstr ""
|
143 |
|
144 |
-
#: inc/classes/core.class.php:
|
145 |
msgctxt "As in: The Plugin Home Page"
|
146 |
msgid "Plugin Home"
|
147 |
msgstr ""
|
148 |
|
149 |
-
#: inc/classes/core.class.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
150 |
msgid "Dismiss"
|
151 |
msgstr ""
|
152 |
|
153 |
-
#: inc/classes/core.class.php:
|
154 |
msgctxt "e.g. en for English, nl for Dutch, fi for Finish, de for German"
|
155 |
msgid "en"
|
156 |
msgstr ""
|
@@ -198,224 +213,224 @@ msgstr ""
|
|
198 |
msgid "No Search"
|
199 |
msgstr ""
|
200 |
|
201 |
-
#: inc/classes/doing-it-right.class.php:
|
202 |
msgid "Refresh to see the SEO Bar status."
|
203 |
msgstr ""
|
204 |
|
205 |
-
#: inc/classes/doing-it-right.class.php:
|
206 |
msgid "Post"
|
207 |
msgstr ""
|
208 |
|
209 |
-
#: inc/classes/doing-it-right.class.php:
|
210 |
#: inc/classes/term-data.class.php:332
|
211 |
-
#: inc/views/metaboxes/schema-metabox.php:
|
212 |
msgid "Page"
|
213 |
msgstr ""
|
214 |
|
215 |
-
#: inc/classes/doing-it-right.class.php:
|
216 |
msgid "Failed to fetch post ID."
|
217 |
msgstr ""
|
218 |
|
219 |
#. translators: %s = But or And
|
220 |
|
221 |
-
#: inc/classes/doing-it-right.class.php:
|
222 |
msgid "%s the Title contains the Blogname multiple times."
|
223 |
msgstr ""
|
224 |
|
225 |
-
#. translators: 1: Word, 2:
|
226 |
|
227 |
-
#: inc/classes/doing-it-right.class.php:
|
228 |
msgid "%1$s is used %2$d times."
|
229 |
msgstr ""
|
230 |
|
231 |
#. Translators: %s = Post / Page / Category, etc.
|
232 |
|
233 |
-
#: inc/classes/doing-it-right.class.php:
|
234 |
msgid "%s is being indexed."
|
235 |
msgstr ""
|
236 |
|
237 |
-
#: inc/classes/doing-it-right.class.php:
|
238 |
msgid "But you've discouraged indexing for the whole site."
|
239 |
msgstr ""
|
240 |
|
241 |
#. translators: 1: But or And, 2: Current taxonomy term plural label
|
242 |
|
243 |
-
#: inc/classes/doing-it-right.class.php:
|
244 |
msgid "%1$s indexing for %2$s have been discouraged."
|
245 |
msgstr ""
|
246 |
|
247 |
#. translators: 1 = But or And, 1 = Post/Page
|
248 |
|
249 |
-
#: inc/classes/doing-it-right.class.php:
|
250 |
msgid "%1$s the %2$s is protected from public visibility. This means indexing is discouraged."
|
251 |
msgstr ""
|
252 |
|
253 |
#. translators: %s = But or And
|
254 |
|
255 |
-
#: inc/classes/doing-it-right.class.php:
|
256 |
msgid "%s the blog isn't set to public. This means WordPress discourages indexing."
|
257 |
msgstr ""
|
258 |
|
259 |
#. translators: %s = But or And
|
260 |
|
261 |
-
#: inc/classes/doing-it-right.class.php:
|
262 |
msgid "%s there are no posts in this term; therefore, indexing has been discouraged."
|
263 |
msgstr ""
|
264 |
|
265 |
-
#: inc/classes/doing-it-right.class.php:
|
266 |
msgid "%s links aren't being followed."
|
267 |
msgstr ""
|
268 |
|
269 |
-
#: inc/classes/doing-it-right.class.php:
|
270 |
msgid "%s links are being followed."
|
271 |
msgstr ""
|
272 |
|
273 |
#. translators: %s = But or And
|
274 |
|
275 |
-
#: inc/classes/doing-it-right.class.php:
|
276 |
msgid "%s you've discouraged the following of links for the whole site."
|
277 |
msgstr ""
|
278 |
|
279 |
#. translators: 1: But or And, 2: Current taxonomy term plural label
|
280 |
|
281 |
-
#: inc/classes/doing-it-right.class.php:
|
282 |
msgid "%1$s following for %2$s have been discouraged."
|
283 |
msgstr ""
|
284 |
|
285 |
#. translators: %s = But or And
|
286 |
|
287 |
-
#: inc/classes/doing-it-right.class.php:
|
288 |
msgid "%s the blog isn't set to public. This means WordPress allows the links to be followed regardless."
|
289 |
msgstr ""
|
290 |
|
291 |
-
#: inc/classes/doing-it-right.class.php:
|
292 |
msgid "Search Engines aren't allowed to archive this %s."
|
293 |
msgstr ""
|
294 |
|
295 |
-
#: inc/classes/doing-it-right.class.php:
|
296 |
msgid "Search Engines are allowed to archive this %s."
|
297 |
msgstr ""
|
298 |
|
299 |
-
#: inc/classes/doing-it-right.class.php:
|
300 |
msgid "But you've discouraged archiving for the whole site."
|
301 |
msgstr ""
|
302 |
|
303 |
#. translators: 1: But or And, 2: Current taxonomy term plural label
|
304 |
|
305 |
-
#: inc/classes/doing-it-right.class.php:
|
306 |
msgid "%1$s archiving for %2$s have been discouraged."
|
307 |
msgstr ""
|
308 |
|
309 |
#. translators: %s = But or And
|
310 |
|
311 |
-
#: inc/classes/doing-it-right.class.php:
|
312 |
msgid "%s the blog isn't set to public. This means WordPress allows the blog to be archived regardless."
|
313 |
msgstr ""
|
314 |
|
315 |
-
#: inc/classes/doing-it-right.class.php:
|
316 |
msgid "%s isn't being redirected."
|
317 |
msgstr ""
|
318 |
|
319 |
-
#: inc/classes/doing-it-right.class.php:
|
320 |
-
#: inc/classes/doing-it-right.class.php:
|
321 |
msgid "%s is being redirected. This means no SEO values have to be set."
|
322 |
msgstr ""
|
323 |
|
324 |
-
#: inc/classes/doing-it-right.class.php:
|
325 |
-
#: inc/classes/doing-it-right.class.php:
|
326 |
msgid "%s is not being indexed. This means no SEO values have to be set."
|
327 |
msgstr ""
|
328 |
|
329 |
-
#: inc/classes/doing-it-right.class.php:
|
330 |
msgid "Title:"
|
331 |
msgstr ""
|
332 |
|
333 |
-
#: inc/classes/doing-it-right.class.php:
|
334 |
msgid "Description:"
|
335 |
msgstr ""
|
336 |
|
337 |
-
#: inc/classes/doing-it-right.class.php:
|
338 |
msgid "Index:"
|
339 |
msgstr ""
|
340 |
|
341 |
-
#: inc/classes/doing-it-right.class.php:
|
342 |
msgid "Follow:"
|
343 |
msgstr ""
|
344 |
|
345 |
-
#: inc/classes/doing-it-right.class.php:
|
346 |
msgid "Archive:"
|
347 |
msgstr ""
|
348 |
|
349 |
-
#: inc/classes/doing-it-right.class.php:
|
350 |
msgid "Redirect:"
|
351 |
msgstr ""
|
352 |
|
353 |
-
#: inc/classes/doing-it-right.class.php:
|
354 |
msgid "Generated: Automatically generated."
|
355 |
msgstr ""
|
356 |
|
357 |
-
#: inc/classes/doing-it-right.class.php:
|
358 |
msgctxt "Generated"
|
359 |
msgid "G"
|
360 |
msgstr ""
|
361 |
|
362 |
-
#: inc/classes/doing-it-right.class.php:
|
363 |
msgctxt "Title"
|
364 |
msgid "T"
|
365 |
msgstr ""
|
366 |
|
367 |
-
#: inc/classes/doing-it-right.class.php:
|
368 |
msgctxt "Description"
|
369 |
msgid "D"
|
370 |
msgstr ""
|
371 |
|
372 |
-
#: inc/classes/doing-it-right.class.php:
|
373 |
msgctxt "no-Index"
|
374 |
msgid "I"
|
375 |
msgstr ""
|
376 |
|
377 |
-
#: inc/classes/doing-it-right.class.php:
|
378 |
msgctxt "no-Follow"
|
379 |
msgid "F"
|
380 |
msgstr ""
|
381 |
|
382 |
-
#: inc/classes/doing-it-right.class.php:
|
383 |
msgctxt "no-Archive"
|
384 |
msgid "A"
|
385 |
msgstr ""
|
386 |
|
387 |
-
#: inc/classes/doing-it-right.class.php:
|
388 |
msgctxt "Redirect"
|
389 |
msgid "R"
|
390 |
msgstr ""
|
391 |
|
392 |
-
#: inc/classes/doing-it-right.class.php:
|
393 |
msgctxt "But there are..."
|
394 |
msgid "But"
|
395 |
msgstr ""
|
396 |
|
397 |
-
#: inc/classes/doing-it-right.class.php:
|
398 |
msgctxt "And there are..."
|
399 |
msgid "And"
|
400 |
msgstr ""
|
401 |
|
402 |
-
#: inc/classes/doing-it-right.class.php:
|
403 |
msgid "Length is far too short."
|
404 |
msgstr ""
|
405 |
|
406 |
-
#: inc/classes/doing-it-right.class.php:
|
407 |
msgid "Length is too short."
|
408 |
msgstr ""
|
409 |
|
410 |
-
#: inc/classes/doing-it-right.class.php:
|
411 |
msgid "Length is too long."
|
412 |
msgstr ""
|
413 |
|
414 |
-
#: inc/classes/doing-it-right.class.php:
|
415 |
msgid "Length is far too long."
|
416 |
msgstr ""
|
417 |
|
418 |
-
#: inc/classes/doing-it-right.class.php:
|
419 |
msgid "Length is good."
|
420 |
msgstr ""
|
421 |
|
@@ -426,21 +441,21 @@ msgstr ""
|
|
426 |
|
427 |
#. translators: 1: Title, 2: Separator, 3: Excerpt
|
428 |
|
429 |
-
#: inc/classes/generate-description.class.php:
|
430 |
msgctxt "1: Title, 2: Separator, 3: Excerpt"
|
431 |
msgid "%1$s %2$s %3$s"
|
432 |
msgstr ""
|
433 |
|
434 |
#. translators: 1: Title, 2: on, 3: Blogname
|
435 |
|
436 |
-
#: inc/classes/generate-description.class.php:
|
437 |
msgctxt "1: Title, 2: on, 3: Blogname"
|
438 |
msgid "%1$s %2$s %3$s"
|
439 |
msgstr ""
|
440 |
|
441 |
#. translators: Front-end output.
|
442 |
|
443 |
-
#: inc/classes/generate-description.class.php:
|
444 |
#: inc/views/metaboxes/description-metabox.php:18
|
445 |
msgctxt "Placement. e.g. Post Title \"on\" Blog Name"
|
446 |
msgid "on"
|
@@ -448,7 +463,7 @@ msgstr ""
|
|
448 |
|
449 |
#. translators: Front-end output.
|
450 |
|
451 |
-
#: inc/classes/generate-description.class.php:
|
452 |
msgid "Latest posts:"
|
453 |
msgstr ""
|
454 |
|
@@ -462,175 +477,179 @@ msgstr ""
|
|
462 |
#. translators: Front-end output. 1: Taxonomy singular name, 2: Current
|
463 |
#. taxonomy term
|
464 |
|
465 |
-
#: inc/classes/generate-title.class.php:
|
466 |
-
#: inc/classes/generate-title.class.php:
|
467 |
msgid "%1$s: %2$s"
|
468 |
msgstr ""
|
469 |
|
470 |
#. translators: Front-end output.
|
471 |
|
472 |
-
#: inc/classes/generate-title.class.php:
|
473 |
msgid "Author: %s"
|
474 |
msgstr ""
|
475 |
|
476 |
#. translators: Front-end output.
|
477 |
|
478 |
-
#: inc/classes/generate-title.class.php:
|
479 |
msgctxt "yearly archives date format"
|
480 |
msgid "Y"
|
481 |
msgstr ""
|
482 |
|
483 |
#. translators: Front-end output.
|
484 |
|
485 |
-
#: inc/classes/generate-title.class.php:
|
486 |
msgid "Year: %s"
|
487 |
msgstr ""
|
488 |
|
489 |
#. translators: Front-end output.
|
490 |
|
491 |
-
#: inc/classes/generate-title.class.php:
|
492 |
msgctxt "monthly archives date format"
|
493 |
msgid "F Y"
|
494 |
msgstr ""
|
495 |
|
496 |
#. translators: Front-end output.
|
497 |
|
498 |
-
#: inc/classes/generate-title.class.php:
|
499 |
msgid "Month: %s"
|
500 |
msgstr ""
|
501 |
|
502 |
#. translators: Front-end output.
|
503 |
|
504 |
-
#: inc/classes/generate-title.class.php:
|
505 |
msgctxt "daily archives date format"
|
506 |
msgid "F j, Y"
|
507 |
msgstr ""
|
508 |
|
509 |
#. translators: Front-end output.
|
510 |
|
511 |
-
#: inc/classes/generate-title.class.php:
|
512 |
msgid "Day: %s"
|
513 |
msgstr ""
|
514 |
|
515 |
#. translators: Front-end output.
|
516 |
|
517 |
-
#: inc/classes/generate-title.class.php:
|
518 |
msgctxt "post format archive title"
|
519 |
msgid "Asides"
|
520 |
msgstr ""
|
521 |
|
522 |
#. translators: Front-end output.
|
523 |
|
524 |
-
#: inc/classes/generate-title.class.php:
|
525 |
msgctxt "post format archive title"
|
526 |
msgid "Galleries"
|
527 |
msgstr ""
|
528 |
|
529 |
#. translators: Front-end output.
|
530 |
|
531 |
-
#: inc/classes/generate-title.class.php:
|
532 |
msgctxt "post format archive title"
|
533 |
msgid "Images"
|
534 |
msgstr ""
|
535 |
|
536 |
#. translators: Front-end output.
|
537 |
|
538 |
-
#: inc/classes/generate-title.class.php:
|
539 |
msgctxt "post format archive title"
|
540 |
msgid "Videos"
|
541 |
msgstr ""
|
542 |
|
543 |
#. translators: Front-end output.
|
544 |
|
545 |
-
#: inc/classes/generate-title.class.php:
|
546 |
msgctxt "post format archive title"
|
547 |
msgid "Quotes"
|
548 |
msgstr ""
|
549 |
|
550 |
#. translators: Front-end output.
|
551 |
|
552 |
-
#: inc/classes/generate-title.class.php:
|
553 |
msgctxt "post format archive title"
|
554 |
msgid "Links"
|
555 |
msgstr ""
|
556 |
|
557 |
#. translators: Front-end output.
|
558 |
|
559 |
-
#: inc/classes/generate-title.class.php:
|
560 |
msgctxt "post format archive title"
|
561 |
msgid "Statuses"
|
562 |
msgstr ""
|
563 |
|
564 |
#. translators: Front-end output.
|
565 |
|
566 |
-
#: inc/classes/generate-title.class.php:
|
567 |
msgctxt "post format archive title"
|
568 |
msgid "Audio"
|
569 |
msgstr ""
|
570 |
|
571 |
#. translators: Front-end output.
|
572 |
|
573 |
-
#: inc/classes/generate-title.class.php:
|
574 |
msgctxt "post format archive title"
|
575 |
msgid "Chats"
|
576 |
msgstr ""
|
577 |
|
578 |
#. translators: Front-end output.
|
579 |
|
580 |
-
#: inc/classes/generate-title.class.php:
|
581 |
msgid "Archives: %s"
|
582 |
msgstr ""
|
583 |
|
584 |
#. translators: Front-end output.
|
585 |
|
586 |
-
#: inc/classes/generate-title.class.php:
|
587 |
msgid "Archives"
|
588 |
msgstr ""
|
589 |
|
590 |
#. translators: Front-end output.
|
591 |
|
592 |
-
#: inc/classes/generate-title.class.php:
|
593 |
msgid "Untitled"
|
594 |
msgstr ""
|
595 |
|
596 |
#. translators: Front-end output.
|
597 |
|
598 |
-
#: inc/classes/generate-title.class.php:
|
599 |
msgid "Search results for:"
|
600 |
msgstr ""
|
601 |
|
602 |
#. translators: Front-end output
|
603 |
|
604 |
-
#: inc/classes/generate-title.class.php:
|
605 |
msgid "Protected: %s"
|
606 |
msgstr ""
|
607 |
|
608 |
#. translators: Front-end output
|
609 |
|
610 |
-
#: inc/classes/generate-title.class.php:
|
611 |
msgid "Private: %s"
|
612 |
msgstr ""
|
613 |
|
614 |
#. translators: Front-end output.
|
615 |
|
616 |
-
#: inc/classes/generate-title.class.php:
|
617 |
msgid "Page %s"
|
618 |
msgstr ""
|
619 |
|
620 |
-
#: inc/classes/
|
621 |
-
msgid "
|
622 |
msgstr ""
|
623 |
|
624 |
-
|
625 |
-
|
|
|
|
|
626 |
msgstr ""
|
627 |
|
628 |
-
|
629 |
-
|
|
|
|
|
630 |
msgstr ""
|
631 |
|
632 |
-
#: inc/classes/
|
633 |
-
msgid "
|
634 |
msgstr ""
|
635 |
|
636 |
#: inc/classes/site-options.class.php:429
|
@@ -642,15 +661,15 @@ msgctxt "%s = here"
|
|
642 |
msgid "View the new options %s."
|
643 |
msgstr ""
|
644 |
|
645 |
-
#: inc/classes/sitemaps.class.php:
|
646 |
msgid "Sitemap is generated for this view"
|
647 |
msgstr ""
|
648 |
|
649 |
-
#: inc/classes/sitemaps.class.php:
|
650 |
msgid "Sitemap is served from cache"
|
651 |
msgstr ""
|
652 |
|
653 |
-
#: inc/classes/sitemaps.class.php:
|
654 |
msgid "Sitemap is generated on"
|
655 |
msgstr ""
|
656 |
|
@@ -668,7 +687,7 @@ msgstr ""
|
|
668 |
#: inc/views/metaboxes/homepage-metabox.php:32
|
669 |
#: inc/views/metaboxes/robots-metabox.php:57
|
670 |
#: inc/views/metaboxes/schema-metabox.php:37
|
671 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
672 |
#: inc/views/metaboxes/social-metabox.php:25
|
673 |
#: inc/views/metaboxes/title-metabox.php:61
|
674 |
msgid "General"
|
@@ -928,93 +947,93 @@ msgid "The feed can be found %s."
|
|
928 |
msgstr ""
|
929 |
|
930 |
#: inc/views/metaboxes/general-metabox.php:18
|
931 |
-
msgid "
|
932 |
msgstr ""
|
933 |
|
934 |
#: inc/views/metaboxes/general-metabox.php:23
|
935 |
-
msgid "
|
936 |
msgstr ""
|
937 |
|
938 |
#: inc/views/metaboxes/general-metabox.php:28
|
939 |
msgid "Canonical"
|
940 |
msgstr ""
|
941 |
|
|
|
|
|
|
|
|
|
942 |
#: inc/views/metaboxes/general-metabox.php:52
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
943 |
msgid "Performance Settings"
|
944 |
msgstr ""
|
945 |
|
946 |
-
#: inc/views/metaboxes/general-metabox.php:
|
947 |
msgid "In order to improve performance, generated SEO output can be stored in the database as transient cache."
|
948 |
msgstr ""
|
949 |
|
950 |
-
#: inc/views/metaboxes/general-metabox.php:
|
951 |
msgid "If your website has thousands of pages, or if other forms of caching are used, you might wish to adjust these options."
|
952 |
msgstr ""
|
953 |
|
954 |
-
#: inc/views/metaboxes/general-metabox.php:
|
955 |
msgid "Transient Cache Settings"
|
956 |
msgstr ""
|
957 |
|
958 |
-
#: inc/views/metaboxes/general-metabox.php:
|
959 |
msgid "Enable automated description output cache?"
|
960 |
msgstr ""
|
961 |
|
962 |
-
#: inc/views/metaboxes/general-metabox.php:
|
963 |
msgid "Description generation can use a lot of server resources when it reads the page content."
|
964 |
msgstr ""
|
965 |
|
966 |
-
#: inc/views/metaboxes/general-metabox.php:
|
967 |
msgid "Enable automated Schema output cache?"
|
968 |
msgstr ""
|
969 |
|
970 |
-
#: inc/views/metaboxes/general-metabox.php:
|
971 |
msgid "Schema.org output generally makes multiple calls to the database."
|
972 |
msgstr ""
|
973 |
|
974 |
-
#: inc/views/metaboxes/general-metabox.php:
|
975 |
msgid "Enable sitemap generation cache?"
|
976 |
msgstr ""
|
977 |
|
978 |
-
#: inc/views/metaboxes/general-metabox.php:
|
979 |
msgid "Generating the sitemap can use a lot of server resources."
|
980 |
msgstr ""
|
981 |
|
982 |
-
#: inc/views/metaboxes/general-metabox.php:
|
983 |
msgid "Object Cache Settings"
|
984 |
msgstr ""
|
985 |
|
986 |
-
#: inc/views/metaboxes/general-metabox.php:
|
987 |
msgid "Enable object cache?"
|
988 |
msgstr ""
|
989 |
|
990 |
-
#: inc/views/metaboxes/general-metabox.php:
|
991 |
msgid "Object cache generally works faster than transient cache"
|
992 |
msgstr ""
|
993 |
|
994 |
-
#: inc/views/metaboxes/general-metabox.php:
|
995 |
msgid "An object cache handler has been detected. If you enable this option, you might wish to disable description and Schema transient caching."
|
996 |
msgstr ""
|
997 |
|
998 |
-
#: inc/views/metaboxes/general-metabox.php:109
|
999 |
-
msgid "Administrative Layout Settings"
|
1000 |
-
msgstr ""
|
1001 |
-
|
1002 |
-
#: inc/views/metaboxes/general-metabox.php:110
|
1003 |
-
msgid "SEO hints can be visually displayed throughout the dashboard."
|
1004 |
-
msgstr ""
|
1005 |
-
|
1006 |
-
#: inc/views/metaboxes/general-metabox.php:115
|
1007 |
-
msgid "SEO Bar Settings"
|
1008 |
-
msgstr ""
|
1009 |
-
|
1010 |
-
#: inc/views/metaboxes/general-metabox.php:121
|
1011 |
-
msgid "Display the SEO Bar in overview tables?"
|
1012 |
-
msgstr ""
|
1013 |
-
|
1014 |
-
#: inc/views/metaboxes/general-metabox.php:127
|
1015 |
-
msgid "Display the SEO Bar in the SEO Settings metabox?"
|
1016 |
-
msgstr ""
|
1017 |
-
|
1018 |
#: inc/views/metaboxes/general-metabox.php:138
|
1019 |
msgid "Canonical URL Settings"
|
1020 |
msgstr ""
|
@@ -1028,7 +1047,7 @@ msgid "If the canonical URL meta tag represents the visited page, then the Searc
|
|
1028 |
msgstr ""
|
1029 |
|
1030 |
#: inc/views/metaboxes/general-metabox.php:141
|
1031 |
-
msgid "Only adjust these options if you are aware of
|
1032 |
msgstr ""
|
1033 |
|
1034 |
#: inc/views/metaboxes/general-metabox.php:146
|
@@ -1478,240 +1497,240 @@ msgstr ""
|
|
1478 |
msgid "Social Pages connected to this website"
|
1479 |
msgstr ""
|
1480 |
|
1481 |
-
#: inc/views/metaboxes/schema-metabox.php:
|
1482 |
msgid "Don't have a page at a site or is the profile only privately accessible? Leave that field empty. Unsure? Fill it in anyway."
|
1483 |
msgstr ""
|
1484 |
|
1485 |
-
#: inc/views/metaboxes/schema-metabox.php:
|
1486 |
msgid "Add the link that leads directly to the social page of this website."
|
1487 |
msgstr ""
|
1488 |
|
1489 |
-
#: inc/views/metaboxes/schema-metabox.php:
|
1490 |
msgctxt "No spaces. E.g. https://facebook.com/RelatedProfile"
|
1491 |
msgid "RelatedProfile"
|
1492 |
msgstr ""
|
1493 |
|
1494 |
-
#: inc/views/metaboxes/schema-metabox.php:
|
1495 |
msgctxt "Social Profile"
|
1496 |
msgid "Profile"
|
1497 |
msgstr ""
|
1498 |
|
1499 |
-
#: inc/views/metaboxes/schema-metabox.php:
|
1500 |
msgid "Blog"
|
1501 |
msgstr ""
|
1502 |
|
1503 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1504 |
-
msgid "Permalink Settings"
|
1505 |
-
msgstr ""
|
1506 |
-
|
1507 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:14
|
1508 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:130
|
1509 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:176
|
1510 |
-
msgctxt "The sitemap can be found %s."
|
1511 |
-
msgid "here"
|
1512 |
-
msgstr ""
|
1513 |
-
|
1514 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:16
|
1515 |
-
msgid "You're using the plain permalink structure."
|
1516 |
-
msgstr ""
|
1517 |
-
|
1518 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:17
|
1519 |
-
msgid "This means we can't output the sitemap through the WordPress rewrite rules."
|
1520 |
-
msgstr ""
|
1521 |
-
|
1522 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:19
|
1523 |
-
msgctxt "%s = here"
|
1524 |
-
msgid "Change your Permalink Settings %s (Recommended: 'postname')."
|
1525 |
-
msgstr ""
|
1526 |
-
|
1527 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:48
|
1528 |
msgid "Timestamps"
|
1529 |
msgstr ""
|
1530 |
|
1531 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1532 |
msgctxt "Ping or notify Search Engine"
|
1533 |
msgid "Ping"
|
1534 |
msgstr ""
|
1535 |
|
1536 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1537 |
msgid "Style"
|
1538 |
msgstr ""
|
1539 |
|
1540 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1541 |
msgid "Sitemap Integration Settings"
|
1542 |
msgstr ""
|
1543 |
|
1544 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1545 |
msgid "Another active sitemap plugin has been detected. This means that the sitemap functionality has been replaced."
|
1546 |
msgstr ""
|
1547 |
|
1548 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1549 |
msgid "A sitemap has been detected in the root folder of your website. This means that the sitemap functionality has no effect."
|
1550 |
msgstr ""
|
1551 |
|
1552 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1553 |
msgid "The Sitemap is an XML file that lists pages and posts for your website along with optional metadata about each post or page. This helps Search Engines crawl your website more easily."
|
1554 |
msgstr ""
|
1555 |
|
1556 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1557 |
msgid "The optional metadata include the post and page modified time and a page priority indication, which is automated."
|
1558 |
msgstr ""
|
1559 |
|
1560 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1561 |
msgid "Sitemap Output"
|
1562 |
msgstr ""
|
1563 |
|
1564 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1565 |
msgid "Output Sitemap?"
|
1566 |
msgstr ""
|
1567 |
|
1568 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1569 |
msgid "View sitemap"
|
1570 |
msgstr ""
|
1571 |
|
1572 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1573 |
msgctxt "%s = here"
|
1574 |
msgid "The sitemap can be found %s."
|
1575 |
msgstr ""
|
1576 |
|
1577 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1578 |
msgid "Robots.txt Settings"
|
1579 |
msgstr ""
|
1580 |
|
1581 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1582 |
msgid "A robots.txt file has been detected in the root folder of your website; therefore no settings are able to alter its output."
|
1583 |
msgstr ""
|
1584 |
|
1585 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1586 |
msgid "The robots.txt file is the first thing Search Engines look for. If you add the sitemap location in the robots.txt file, then Search Engines will look for and index the sitemap."
|
1587 |
msgstr ""
|
1588 |
|
1589 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1590 |
msgid "If you do not add the sitemap location to the robots.txt file, you will need to notify Search Engines manually through the Webmaster Console provided by the Search Engines."
|
1591 |
msgstr ""
|
1592 |
|
1593 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1594 |
msgid "Add sitemap location in robots.txt"
|
1595 |
msgstr ""
|
1596 |
|
1597 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1598 |
msgid "Add sitemap location in robots?"
|
1599 |
msgstr ""
|
1600 |
|
1601 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1602 |
msgid "This only has effect if the sitemap is active"
|
1603 |
msgstr ""
|
1604 |
|
1605 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1606 |
msgid "No robots.txt file can be generated on subdirectory installations."
|
1607 |
msgstr ""
|
1608 |
|
1609 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1610 |
msgid "Another robots.txt sitemap location addition has been detected."
|
1611 |
msgstr ""
|
1612 |
|
1613 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1614 |
msgid "View robots.txt"
|
1615 |
msgstr ""
|
1616 |
|
1617 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1618 |
msgctxt "%s = here"
|
1619 |
msgid "The robots.txt file can be found %s."
|
1620 |
msgstr ""
|
1621 |
|
1622 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1623 |
msgid "Timestamps Settings"
|
1624 |
msgstr ""
|
1625 |
|
1626 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1627 |
msgid "The modified time suggests to Search Engines where to look for content changes. It has no impact on the SEO value unless you drastically change pages or posts. It then depends on how well your content is constructed."
|
1628 |
msgstr ""
|
1629 |
|
1630 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1631 |
msgid "By default, the sitemap only outputs the modified date if you've enabled them within the Social Metabox. This setting overrides those settings for the Sitemap."
|
1632 |
msgstr ""
|
1633 |
|
1634 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1635 |
msgid "Output Modified Date"
|
1636 |
msgstr ""
|
1637 |
|
1638 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1639 |
msgid "Add %s to the sitemap?"
|
1640 |
msgstr ""
|
1641 |
|
1642 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1643 |
msgid "Timestamp Format Settings"
|
1644 |
msgstr ""
|
1645 |
|
1646 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1647 |
msgid "Determines how specific the modification timestamp is."
|
1648 |
msgstr ""
|
1649 |
|
1650 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1651 |
msgid "Complete date"
|
1652 |
msgstr ""
|
1653 |
|
1654 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1655 |
msgid "Complete date plus hours, minutes and timezone"
|
1656 |
msgstr ""
|
1657 |
|
1658 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1659 |
msgid "Ping Settings"
|
1660 |
msgstr ""
|
1661 |
|
1662 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1663 |
msgid "Notifying Search Engines of a sitemap change is helpful to get your content indexed as soon as possible."
|
1664 |
msgstr ""
|
1665 |
|
1666 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1667 |
msgid "By default this will happen at most once an hour."
|
1668 |
msgstr ""
|
1669 |
|
1670 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1671 |
msgid "Notify Search Engines"
|
1672 |
msgstr ""
|
1673 |
|
1674 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1675 |
msgid "Notify %s about sitemap changes?"
|
1676 |
msgstr ""
|
1677 |
|
1678 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1679 |
msgid "Sitemap Styling Settings"
|
1680 |
msgstr ""
|
1681 |
|
1682 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1683 |
msgid "You can style the sitemap to give it a more personal look. Styling the sitemap has no SEO value whatsoever."
|
1684 |
msgstr ""
|
1685 |
|
1686 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1687 |
msgid "Enable styling"
|
1688 |
msgstr ""
|
1689 |
|
1690 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1691 |
msgid "Style Sitemap?"
|
1692 |
msgstr ""
|
1693 |
|
1694 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1695 |
msgid "This makes the sitemap more readable for humans"
|
1696 |
msgstr ""
|
1697 |
|
1698 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1699 |
msgid "Style configuration"
|
1700 |
msgstr ""
|
1701 |
|
1702 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1703 |
msgid "Add site logo?"
|
1704 |
msgstr ""
|
1705 |
|
1706 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1707 |
msgid "The logo is set in Customizer"
|
1708 |
msgstr ""
|
1709 |
|
1710 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1711 |
msgid "Sitemap header background color"
|
1712 |
msgstr ""
|
1713 |
|
1714 |
-
#: inc/views/metaboxes/sitemaps-metabox.php:
|
1715 |
msgid "Sitemap title and lines color"
|
1716 |
msgstr ""
|
1717 |
|
@@ -2029,37 +2048,37 @@ msgid "Get the Pinterest Verification Code"
|
|
2029 |
msgstr ""
|
2030 |
|
2031 |
#: inc/views/sitemap/xsl-stylesheet.php:8
|
2032 |
-
#: inc/views/sitemap/xsl-stylesheet.php:
|
2033 |
msgid "XML Sitemap"
|
2034 |
msgstr ""
|
2035 |
|
2036 |
-
#. translators: URLs are in Markdown.
|
2037 |
|
2038 |
-
#: inc/views/sitemap/xsl-stylesheet.php:
|
2039 |
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/)."
|
2040 |
msgstr ""
|
2041 |
|
2042 |
-
#. translators: URLs are in Markdown.
|
2043 |
|
2044 |
-
#: inc/views/sitemap/xsl-stylesheet.php:
|
2045 |
msgid "You can find more information on XML sitemaps at [sitemaps.org](https://www.sitemaps.org/)."
|
2046 |
msgstr ""
|
2047 |
|
2048 |
-
#: inc/views/sitemap/xsl-stylesheet.php:
|
2049 |
msgid "URL"
|
2050 |
msgstr ""
|
2051 |
|
2052 |
-
#: inc/views/sitemap/xsl-stylesheet.php:
|
2053 |
msgid "Last Updated"
|
2054 |
msgstr ""
|
2055 |
|
2056 |
-
#: inc/views/sitemap/xsl-stylesheet.php:
|
2057 |
msgid "Priority"
|
2058 |
msgstr ""
|
2059 |
|
2060 |
#. translators: URLs are in Markdown.
|
2061 |
|
2062 |
-
#: inc/views/sitemap/xsl-stylesheet.php:
|
2063 |
msgid "Generated by [The SEO Framework](https://wordpress.org/plugins/autodescription/)"
|
2064 |
msgstr ""
|
2065 |
#. Plugin Name of the plugin/theme
|
@@ -2079,5 +2098,5 @@ msgid "Sybre Waaijer"
|
|
2079 |
msgstr ""
|
2080 |
|
2081 |
#. Author URI of the plugin/theme
|
2082 |
-
msgid "https://
|
2083 |
msgstr ""
|
2 |
# This file is distributed under the same license as the The SEO Framework package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
+
"Project-Id-Version: The SEO Framework 2.9.2-dev-2017.05.05.2\n"
|
6 |
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/autodescription\n"
|
7 |
+
"POT-Creation-Date: 2017-05-07 05:43:12+00:00\n"
|
8 |
"MIME-Version: 1.0\n"
|
9 |
"Content-Type: text/plain; charset=UTF-8\n"
|
10 |
"Content-Transfer-Encoding: 8bit\n"
|
12 |
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
13 |
"Language-Team: LANGUAGE <LL@li.org>\n"
|
14 |
|
15 |
+
#: inc/classes/admin-init.class.php:233
|
16 |
msgid "Good"
|
17 |
msgstr ""
|
18 |
|
19 |
+
#: inc/classes/admin-init.class.php:234
|
20 |
msgid "Okay"
|
21 |
msgstr ""
|
22 |
|
23 |
+
#: inc/classes/admin-init.class.php:235
|
24 |
msgid "Bad"
|
25 |
msgstr ""
|
26 |
|
27 |
+
#: inc/classes/admin-init.class.php:236
|
28 |
msgid "Unknown"
|
29 |
msgstr ""
|
30 |
|
31 |
+
#: inc/classes/admin-init.class.php:327
|
32 |
msgid "The changes you made will be lost if you navigate away from this page."
|
33 |
msgstr ""
|
34 |
|
35 |
+
#: inc/classes/admin-init.class.php:328
|
36 |
msgid "Are you sure you want to reset all SEO settings to their defaults?"
|
37 |
msgstr ""
|
38 |
|
39 |
+
#. translators: %s = Redirect URL markdown
|
40 |
+
|
41 |
+
#: inc/classes/admin-init.class.php:593
|
42 |
+
msgid "There has been an error redirecting. Refresh the page or follow [this link](%s)."
|
43 |
+
msgstr ""
|
44 |
+
|
45 |
#: inc/classes/admin-pages.class.php:82
|
46 |
msgid "Save Settings"
|
47 |
msgstr ""
|
66 |
msgid "New SEO Settings have been updated."
|
67 |
msgstr ""
|
68 |
|
69 |
+
#: inc/classes/admin-pages.class.php:109 inc/classes/core.class.php:253
|
70 |
#: inc/classes/site-options.class.php:429
|
71 |
msgid "SEO Settings"
|
72 |
msgstr ""
|
73 |
|
74 |
+
#: inc/classes/admin-pages.class.php:110
|
75 |
msgid "SEO"
|
76 |
msgstr ""
|
77 |
|
78 |
+
#: inc/classes/admin-pages.class.php:243
|
79 |
msgid "General Settings"
|
80 |
msgstr ""
|
81 |
|
82 |
+
#: inc/classes/admin-pages.class.php:254
|
83 |
msgid "Title Settings"
|
84 |
msgstr ""
|
85 |
|
86 |
+
#: inc/classes/admin-pages.class.php:265
|
87 |
msgid "Description Meta Settings"
|
88 |
msgstr ""
|
89 |
|
90 |
+
#: inc/classes/admin-pages.class.php:276
|
91 |
msgid "Home Page Settings"
|
92 |
msgstr ""
|
93 |
|
94 |
+
#: inc/classes/admin-pages.class.php:287
|
95 |
msgid "Social Meta Settings"
|
96 |
msgstr ""
|
97 |
|
98 |
+
#: inc/classes/admin-pages.class.php:298
|
99 |
msgid "Schema Settings"
|
100 |
msgstr ""
|
101 |
|
102 |
+
#: inc/classes/admin-pages.class.php:309
|
103 |
#: inc/views/inpost/seo-settings-singular.php:167
|
104 |
#: inc/views/inpost/seo-settings-tt.php:119
|
105 |
msgid "Robots Meta Settings"
|
106 |
msgstr ""
|
107 |
|
108 |
+
#: inc/classes/admin-pages.class.php:320
|
109 |
msgid "Webmaster Meta Settings"
|
110 |
msgstr ""
|
111 |
|
112 |
+
#: inc/classes/admin-pages.class.php:331
|
113 |
msgid "Sitemap Settings"
|
114 |
msgstr ""
|
115 |
|
116 |
+
#: inc/classes/admin-pages.class.php:342
|
117 |
msgid "Feed Settings"
|
118 |
msgstr ""
|
119 |
|
120 |
+
#: inc/classes/admin-pages.class.php:846 inc/classes/admin-pages.class.php:853
|
121 |
msgctxt "Button hover"
|
122 |
msgid "Select social image"
|
123 |
msgstr ""
|
124 |
|
125 |
+
#: inc/classes/admin-pages.class.php:848 inc/classes/admin-pages.class.php:852
|
126 |
msgid "Select Image"
|
127 |
msgstr ""
|
128 |
|
129 |
+
#: inc/classes/admin-pages.class.php:854
|
130 |
msgid "Change Image"
|
131 |
msgstr ""
|
132 |
|
133 |
+
#: inc/classes/admin-pages.class.php:855
|
134 |
msgid "Remove Image"
|
135 |
msgstr ""
|
136 |
|
137 |
+
#: inc/classes/admin-pages.class.php:856
|
138 |
msgid "Remove selected social image"
|
139 |
msgstr ""
|
140 |
|
141 |
+
#: inc/classes/admin-pages.class.php:857
|
142 |
msgctxt "Frame title"
|
143 |
msgid "Select Social Image"
|
144 |
msgstr ""
|
145 |
|
146 |
+
#: inc/classes/admin-pages.class.php:858
|
147 |
msgid "Use this image"
|
148 |
msgstr ""
|
149 |
|
150 |
+
#: inc/classes/core.class.php:255
|
151 |
msgctxt "As in: The Plugin Home Page"
|
152 |
msgid "Plugin Home"
|
153 |
msgstr ""
|
154 |
|
155 |
+
#: inc/classes/core.class.php:264
|
156 |
+
msgid "https://wordpress.org/plugins/the-seo-framework-extension-manager/"
|
157 |
+
msgstr ""
|
158 |
+
|
159 |
+
#: inc/classes/core.class.php:264
|
160 |
+
msgctxt "Plugin extensions"
|
161 |
+
msgid "Extensions"
|
162 |
+
msgstr ""
|
163 |
+
|
164 |
+
#: inc/classes/core.class.php:316
|
165 |
msgid "Dismiss"
|
166 |
msgstr ""
|
167 |
|
168 |
+
#: inc/classes/core.class.php:413
|
169 |
msgctxt "e.g. en for English, nl for Dutch, fi for Finish, de for German"
|
170 |
msgid "en"
|
171 |
msgstr ""
|
213 |
msgid "No Search"
|
214 |
msgstr ""
|
215 |
|
216 |
+
#: inc/classes/doing-it-right.class.php:361
|
217 |
msgid "Refresh to see the SEO Bar status."
|
218 |
msgstr ""
|
219 |
|
220 |
+
#: inc/classes/doing-it-right.class.php:445
|
221 |
msgid "Post"
|
222 |
msgstr ""
|
223 |
|
224 |
+
#: inc/classes/doing-it-right.class.php:449 inc/classes/inpost.class.php:379
|
225 |
#: inc/classes/term-data.class.php:332
|
226 |
+
#: inc/views/metaboxes/schema-metabox.php:204
|
227 |
msgid "Page"
|
228 |
msgstr ""
|
229 |
|
230 |
+
#: inc/classes/doing-it-right.class.php:493
|
231 |
msgid "Failed to fetch post ID."
|
232 |
msgstr ""
|
233 |
|
234 |
#. translators: %s = But or And
|
235 |
|
236 |
+
#: inc/classes/doing-it-right.class.php:881
|
237 |
msgid "%s the Title contains the Blogname multiple times."
|
238 |
msgstr ""
|
239 |
|
240 |
+
#. translators: 1: Word, 2: Occurrences
|
241 |
|
242 |
+
#: inc/classes/doing-it-right.class.php:1052
|
243 |
msgid "%1$s is used %2$d times."
|
244 |
msgstr ""
|
245 |
|
246 |
#. Translators: %s = Post / Page / Category, etc.
|
247 |
|
248 |
+
#: inc/classes/doing-it-right.class.php:1097
|
249 |
msgid "%s is being indexed."
|
250 |
msgstr ""
|
251 |
|
252 |
+
#: inc/classes/doing-it-right.class.php:1106
|
253 |
msgid "But you've discouraged indexing for the whole site."
|
254 |
msgstr ""
|
255 |
|
256 |
#. translators: 1: But or And, 2: Current taxonomy term plural label
|
257 |
|
258 |
+
#: inc/classes/doing-it-right.class.php:1130
|
259 |
msgid "%1$s indexing for %2$s have been discouraged."
|
260 |
msgstr ""
|
261 |
|
262 |
#. translators: 1 = But or And, 1 = Post/Page
|
263 |
|
264 |
+
#: inc/classes/doing-it-right.class.php:1143
|
265 |
msgid "%1$s the %2$s is protected from public visibility. This means indexing is discouraged."
|
266 |
msgstr ""
|
267 |
|
268 |
#. translators: %s = But or And
|
269 |
|
270 |
+
#: inc/classes/doing-it-right.class.php:1152
|
271 |
msgid "%s the blog isn't set to public. This means WordPress discourages indexing."
|
272 |
msgstr ""
|
273 |
|
274 |
#. translators: %s = But or And
|
275 |
|
276 |
+
#: inc/classes/doing-it-right.class.php:1166
|
277 |
msgid "%s there are no posts in this term; therefore, indexing has been discouraged."
|
278 |
msgstr ""
|
279 |
|
280 |
+
#: inc/classes/doing-it-right.class.php:1250
|
281 |
msgid "%s links aren't being followed."
|
282 |
msgstr ""
|
283 |
|
284 |
+
#: inc/classes/doing-it-right.class.php:1256
|
285 |
msgid "%s links are being followed."
|
286 |
msgstr ""
|
287 |
|
288 |
#. translators: %s = But or And
|
289 |
|
290 |
+
#: inc/classes/doing-it-right.class.php:1268
|
291 |
msgid "%s you've discouraged the following of links for the whole site."
|
292 |
msgstr ""
|
293 |
|
294 |
#. translators: 1: But or And, 2: Current taxonomy term plural label
|
295 |
|
296 |
+
#: inc/classes/doing-it-right.class.php:1294
|
297 |
msgid "%1$s following for %2$s have been discouraged."
|
298 |
msgstr ""
|
299 |
|
300 |
#. translators: %s = But or And
|
301 |
|
302 |
+
#: inc/classes/doing-it-right.class.php:1306
|
303 |
msgid "%s the blog isn't set to public. This means WordPress allows the links to be followed regardless."
|
304 |
msgstr ""
|
305 |
|
306 |
+
#: inc/classes/doing-it-right.class.php:1358
|
307 |
msgid "Search Engines aren't allowed to archive this %s."
|
308 |
msgstr ""
|
309 |
|
310 |
+
#: inc/classes/doing-it-right.class.php:1363
|
311 |
msgid "Search Engines are allowed to archive this %s."
|
312 |
msgstr ""
|
313 |
|
314 |
+
#: inc/classes/doing-it-right.class.php:1375
|
315 |
msgid "But you've discouraged archiving for the whole site."
|
316 |
msgstr ""
|
317 |
|
318 |
#. translators: 1: But or And, 2: Current taxonomy term plural label
|
319 |
|
320 |
+
#: inc/classes/doing-it-right.class.php:1401
|
321 |
msgid "%1$s archiving for %2$s have been discouraged."
|
322 |
msgstr ""
|
323 |
|
324 |
#. translators: %s = But or And
|
325 |
|
326 |
+
#: inc/classes/doing-it-right.class.php:1414
|
327 |
msgid "%s the blog isn't set to public. This means WordPress allows the blog to be archived regardless."
|
328 |
msgstr ""
|
329 |
|
330 |
+
#: inc/classes/doing-it-right.class.php:1460
|
331 |
msgid "%s isn't being redirected."
|
332 |
msgstr ""
|
333 |
|
334 |
+
#: inc/classes/doing-it-right.class.php:1502
|
335 |
+
#: inc/classes/doing-it-right.class.php:1531
|
336 |
msgid "%s is being redirected. This means no SEO values have to be set."
|
337 |
msgstr ""
|
338 |
|
339 |
+
#: inc/classes/doing-it-right.class.php:1505
|
340 |
+
#: inc/classes/doing-it-right.class.php:1547
|
341 |
msgid "%s is not being indexed. This means no SEO values have to be set."
|
342 |
msgstr ""
|
343 |
|
344 |
+
#: inc/classes/doing-it-right.class.php:1661
|
345 |
msgid "Title:"
|
346 |
msgstr ""
|
347 |
|
348 |
+
#: inc/classes/doing-it-right.class.php:1662
|
349 |
msgid "Description:"
|
350 |
msgstr ""
|
351 |
|
352 |
+
#: inc/classes/doing-it-right.class.php:1663
|
353 |
msgid "Index:"
|
354 |
msgstr ""
|
355 |
|
356 |
+
#: inc/classes/doing-it-right.class.php:1664
|
357 |
msgid "Follow:"
|
358 |
msgstr ""
|
359 |
|
360 |
+
#: inc/classes/doing-it-right.class.php:1665
|
361 |
msgid "Archive:"
|
362 |
msgstr ""
|
363 |
|
364 |
+
#: inc/classes/doing-it-right.class.php:1666
|
365 |
msgid "Redirect:"
|
366 |
msgstr ""
|
367 |
|
368 |
+
#: inc/classes/doing-it-right.class.php:1668
|
369 |
msgid "Generated: Automatically generated."
|
370 |
msgstr ""
|
371 |
|
372 |
+
#: inc/classes/doing-it-right.class.php:1670
|
373 |
msgctxt "Generated"
|
374 |
msgid "G"
|
375 |
msgstr ""
|
376 |
|
377 |
+
#: inc/classes/doing-it-right.class.php:1671
|
378 |
msgctxt "Title"
|
379 |
msgid "T"
|
380 |
msgstr ""
|
381 |
|
382 |
+
#: inc/classes/doing-it-right.class.php:1672
|
383 |
msgctxt "Description"
|
384 |
msgid "D"
|
385 |
msgstr ""
|
386 |
|
387 |
+
#: inc/classes/doing-it-right.class.php:1673
|
388 |
msgctxt "no-Index"
|
389 |
msgid "I"
|
390 |
msgstr ""
|
391 |
|
392 |
+
#: inc/classes/doing-it-right.class.php:1674
|
393 |
msgctxt "no-Follow"
|
394 |
msgid "F"
|
395 |
msgstr ""
|
396 |
|
397 |
+
#: inc/classes/doing-it-right.class.php:1675
|
398 |
msgctxt "no-Archive"
|
399 |
msgid "A"
|
400 |
msgstr ""
|
401 |
|
402 |
+
#: inc/classes/doing-it-right.class.php:1676
|
403 |
msgctxt "Redirect"
|
404 |
msgid "R"
|
405 |
msgstr ""
|
406 |
|
407 |
+
#: inc/classes/doing-it-right.class.php:1678
|
408 |
msgctxt "But there are..."
|
409 |
msgid "But"
|
410 |
msgstr ""
|
411 |
|
412 |
+
#: inc/classes/doing-it-right.class.php:1679
|
413 |
msgctxt "And there are..."
|
414 |
msgid "And"
|
415 |
msgstr ""
|
416 |
|
417 |
+
#: inc/classes/doing-it-right.class.php:1681
|
418 |
msgid "Length is far too short."
|
419 |
msgstr ""
|
420 |
|
421 |
+
#: inc/classes/doing-it-right.class.php:1682
|
422 |
msgid "Length is too short."
|
423 |
msgstr ""
|
424 |
|
425 |
+
#: inc/classes/doing-it-right.class.php:1683
|
426 |
msgid "Length is too long."
|
427 |
msgstr ""
|
428 |
|
429 |
+
#: inc/classes/doing-it-right.class.php:1684
|
430 |
msgid "Length is far too long."
|
431 |
msgstr ""
|
432 |
|
433 |
+
#: inc/classes/doing-it-right.class.php:1685
|
434 |
msgid "Length is good."
|
435 |
msgstr ""
|
436 |
|
441 |
|
442 |
#. translators: 1: Title, 2: Separator, 3: Excerpt
|
443 |
|
444 |
+
#: inc/classes/generate-description.class.php:441
|
445 |
msgctxt "1: Title, 2: Separator, 3: Excerpt"
|
446 |
msgid "%1$s %2$s %3$s"
|
447 |
msgstr ""
|
448 |
|
449 |
#. translators: 1: Title, 2: on, 3: Blogname
|
450 |
|
451 |
+
#: inc/classes/generate-description.class.php:648
|
452 |
msgctxt "1: Title, 2: on, 3: Blogname"
|
453 |
msgid "%1$s %2$s %3$s"
|
454 |
msgstr ""
|
455 |
|
456 |
#. translators: Front-end output.
|
457 |
|
458 |
+
#: inc/classes/generate-description.class.php:684
|
459 |
#: inc/views/metaboxes/description-metabox.php:18
|
460 |
msgctxt "Placement. e.g. Post Title \"on\" Blog Name"
|
461 |
msgid "on"
|
463 |
|
464 |
#. translators: Front-end output.
|
465 |
|
466 |
+
#: inc/classes/generate-description.class.php:746
|
467 |
msgid "Latest posts:"
|
468 |
msgstr ""
|
469 |
|
477 |
#. translators: Front-end output. 1: Taxonomy singular name, 2: Current
|
478 |
#. taxonomy term
|
479 |
|
480 |
+
#: inc/classes/generate-title.class.php:825
|
481 |
+
#: inc/classes/generate-title.class.php:885
|
482 |
msgid "%1$s: %2$s"
|
483 |
msgstr ""
|
484 |
|
485 |
#. translators: Front-end output.
|
486 |
|
487 |
+
#: inc/classes/generate-title.class.php:829
|
488 |
msgid "Author: %s"
|
489 |
msgstr ""
|
490 |
|
491 |
#. translators: Front-end output.
|
492 |
|
493 |
+
#: inc/classes/generate-title.class.php:833
|
494 |
msgctxt "yearly archives date format"
|
495 |
msgid "Y"
|
496 |
msgstr ""
|
497 |
|
498 |
#. translators: Front-end output.
|
499 |
|
500 |
+
#: inc/classes/generate-title.class.php:835
|
501 |
msgid "Year: %s"
|
502 |
msgstr ""
|
503 |
|
504 |
#. translators: Front-end output.
|
505 |
|
506 |
+
#: inc/classes/generate-title.class.php:838
|
507 |
msgctxt "monthly archives date format"
|
508 |
msgid "F Y"
|
509 |
msgstr ""
|
510 |
|
511 |
#. translators: Front-end output.
|
512 |
|
513 |
+
#: inc/classes/generate-title.class.php:840
|
514 |
msgid "Month: %s"
|
515 |
msgstr ""
|
516 |
|
517 |
#. translators: Front-end output.
|
518 |
|
519 |
+
#: inc/classes/generate-title.class.php:843
|
520 |
msgctxt "daily archives date format"
|
521 |
msgid "F j, Y"
|
522 |
msgstr ""
|
523 |
|
524 |
#. translators: Front-end output.
|
525 |
|
526 |
+
#: inc/classes/generate-title.class.php:845
|
527 |
msgid "Day: %s"
|
528 |
msgstr ""
|
529 |
|
530 |
#. translators: Front-end output.
|
531 |
|
532 |
+
#: inc/classes/generate-title.class.php:850
|
533 |
msgctxt "post format archive title"
|
534 |
msgid "Asides"
|
535 |
msgstr ""
|
536 |
|
537 |
#. translators: Front-end output.
|
538 |
|
539 |
+
#: inc/classes/generate-title.class.php:853
|
540 |
msgctxt "post format archive title"
|
541 |
msgid "Galleries"
|
542 |
msgstr ""
|
543 |
|
544 |
#. translators: Front-end output.
|
545 |
|
546 |
+
#: inc/classes/generate-title.class.php:856
|
547 |
msgctxt "post format archive title"
|
548 |
msgid "Images"
|
549 |
msgstr ""
|
550 |
|
551 |
#. translators: Front-end output.
|
552 |
|
553 |
+
#: inc/classes/generate-title.class.php:859
|
554 |
msgctxt "post format archive title"
|
555 |
msgid "Videos"
|
556 |
msgstr ""
|
557 |
|
558 |
#. translators: Front-end output.
|
559 |
|
560 |
+
#: inc/classes/generate-title.class.php:862
|
561 |
msgctxt "post format archive title"
|
562 |
msgid "Quotes"
|
563 |
msgstr ""
|
564 |
|
565 |
#. translators: Front-end output.
|
566 |
|
567 |
+
#: inc/classes/generate-title.class.php:865
|
568 |
msgctxt "post format archive title"
|
569 |
msgid "Links"
|
570 |
msgstr ""
|
571 |
|
572 |
#. translators: Front-end output.
|
573 |
|
574 |
+
#: inc/classes/generate-title.class.php:868
|
575 |
msgctxt "post format archive title"
|
576 |
msgid "Statuses"
|
577 |
msgstr ""
|
578 |
|
579 |
#. translators: Front-end output.
|
580 |
|
581 |
+
#: inc/classes/generate-title.class.php:871
|
582 |
msgctxt "post format archive title"
|
583 |
msgid "Audio"
|
584 |
msgstr ""
|
585 |
|
586 |
#. translators: Front-end output.
|
587 |
|
588 |
+
#: inc/classes/generate-title.class.php:874
|
589 |
msgctxt "post format archive title"
|
590 |
msgid "Chats"
|
591 |
msgstr ""
|
592 |
|
593 |
#. translators: Front-end output.
|
594 |
|
595 |
+
#: inc/classes/generate-title.class.php:879
|
596 |
msgid "Archives: %s"
|
597 |
msgstr ""
|
598 |
|
599 |
#. translators: Front-end output.
|
600 |
|
601 |
+
#: inc/classes/generate-title.class.php:889
|
602 |
msgid "Archives"
|
603 |
msgstr ""
|
604 |
|
605 |
#. translators: Front-end output.
|
606 |
|
607 |
+
#: inc/classes/generate-title.class.php:1003
|
608 |
msgid "Untitled"
|
609 |
msgstr ""
|
610 |
|
611 |
#. translators: Front-end output.
|
612 |
|
613 |
+
#: inc/classes/generate-title.class.php:1038
|
614 |
msgid "Search results for:"
|
615 |
msgstr ""
|
616 |
|
617 |
#. translators: Front-end output
|
618 |
|
619 |
+
#: inc/classes/generate-title.class.php:1214
|
620 |
msgid "Protected: %s"
|
621 |
msgstr ""
|
622 |
|
623 |
#. translators: Front-end output
|
624 |
|
625 |
+
#: inc/classes/generate-title.class.php:1218
|
626 |
msgid "Private: %s"
|
627 |
msgstr ""
|
628 |
|
629 |
#. translators: Front-end output.
|
630 |
|
631 |
+
#: inc/classes/generate-title.class.php:1251
|
632 |
msgid "Page %s"
|
633 |
msgstr ""
|
634 |
|
635 |
+
#: inc/classes/inpost.class.php:302 inc/views/inpost/seo-settings-tt.php:70
|
636 |
+
msgid "%s SEO Settings"
|
637 |
msgstr ""
|
638 |
|
639 |
+
#. translators: %s = 'The SEO Framework'
|
640 |
+
|
641 |
+
#: inc/classes/render.class.php:1089
|
642 |
+
msgid "Start %s"
|
643 |
msgstr ""
|
644 |
|
645 |
+
#. translators: %s = 'The SEO Framework'
|
646 |
+
|
647 |
+
#: inc/classes/render.class.php:1091
|
648 |
+
msgid "End %s"
|
649 |
msgstr ""
|
650 |
|
651 |
+
#: inc/classes/render.class.php:1092
|
652 |
+
msgid "by Sybre Waaijer"
|
653 |
msgstr ""
|
654 |
|
655 |
#: inc/classes/site-options.class.php:429
|
661 |
msgid "View the new options %s."
|
662 |
msgstr ""
|
663 |
|
664 |
+
#: inc/classes/sitemaps.class.php:297
|
665 |
msgid "Sitemap is generated for this view"
|
666 |
msgstr ""
|
667 |
|
668 |
+
#: inc/classes/sitemaps.class.php:299
|
669 |
msgid "Sitemap is served from cache"
|
670 |
msgstr ""
|
671 |
|
672 |
+
#: inc/classes/sitemaps.class.php:592
|
673 |
msgid "Sitemap is generated on"
|
674 |
msgstr ""
|
675 |
|
687 |
#: inc/views/metaboxes/homepage-metabox.php:32
|
688 |
#: inc/views/metaboxes/robots-metabox.php:57
|
689 |
#: inc/views/metaboxes/schema-metabox.php:37
|
690 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:26
|
691 |
#: inc/views/metaboxes/social-metabox.php:25
|
692 |
#: inc/views/metaboxes/title-metabox.php:61
|
693 |
msgid "General"
|
947 |
msgstr ""
|
948 |
|
949 |
#: inc/views/metaboxes/general-metabox.php:18
|
950 |
+
msgid "Layout"
|
951 |
msgstr ""
|
952 |
|
953 |
#: inc/views/metaboxes/general-metabox.php:23
|
954 |
+
msgid "Performance"
|
955 |
msgstr ""
|
956 |
|
957 |
#: inc/views/metaboxes/general-metabox.php:28
|
958 |
msgid "Canonical"
|
959 |
msgstr ""
|
960 |
|
961 |
+
#: inc/views/metaboxes/general-metabox.php:51
|
962 |
+
msgid "Administrative Layout Settings"
|
963 |
+
msgstr ""
|
964 |
+
|
965 |
#: inc/views/metaboxes/general-metabox.php:52
|
966 |
+
msgid "SEO hints can be visually displayed throughout the dashboard."
|
967 |
+
msgstr ""
|
968 |
+
|
969 |
+
#: inc/views/metaboxes/general-metabox.php:57
|
970 |
+
msgid "SEO Bar Settings"
|
971 |
+
msgstr ""
|
972 |
+
|
973 |
+
#: inc/views/metaboxes/general-metabox.php:63
|
974 |
+
msgid "Display the SEO Bar in overview tables?"
|
975 |
+
msgstr ""
|
976 |
+
|
977 |
+
#: inc/views/metaboxes/general-metabox.php:69
|
978 |
+
msgid "Display the SEO Bar in the SEO Settings metabox?"
|
979 |
+
msgstr ""
|
980 |
+
|
981 |
+
#: inc/views/metaboxes/general-metabox.php:80
|
982 |
msgid "Performance Settings"
|
983 |
msgstr ""
|
984 |
|
985 |
+
#: inc/views/metaboxes/general-metabox.php:81
|
986 |
msgid "In order to improve performance, generated SEO output can be stored in the database as transient cache."
|
987 |
msgstr ""
|
988 |
|
989 |
+
#: inc/views/metaboxes/general-metabox.php:82
|
990 |
msgid "If your website has thousands of pages, or if other forms of caching are used, you might wish to adjust these options."
|
991 |
msgstr ""
|
992 |
|
993 |
+
#: inc/views/metaboxes/general-metabox.php:87
|
994 |
msgid "Transient Cache Settings"
|
995 |
msgstr ""
|
996 |
|
997 |
+
#: inc/views/metaboxes/general-metabox.php:93
|
998 |
msgid "Enable automated description output cache?"
|
999 |
msgstr ""
|
1000 |
|
1001 |
+
#: inc/views/metaboxes/general-metabox.php:94
|
1002 |
msgid "Description generation can use a lot of server resources when it reads the page content."
|
1003 |
msgstr ""
|
1004 |
|
1005 |
+
#: inc/views/metaboxes/general-metabox.php:100
|
1006 |
msgid "Enable automated Schema output cache?"
|
1007 |
msgstr ""
|
1008 |
|
1009 |
+
#: inc/views/metaboxes/general-metabox.php:101
|
1010 |
msgid "Schema.org output generally makes multiple calls to the database."
|
1011 |
msgstr ""
|
1012 |
|
1013 |
+
#: inc/views/metaboxes/general-metabox.php:107
|
1014 |
msgid "Enable sitemap generation cache?"
|
1015 |
msgstr ""
|
1016 |
|
1017 |
+
#: inc/views/metaboxes/general-metabox.php:108
|
1018 |
msgid "Generating the sitemap can use a lot of server resources."
|
1019 |
msgstr ""
|
1020 |
|
1021 |
+
#: inc/views/metaboxes/general-metabox.php:120
|
1022 |
msgid "Object Cache Settings"
|
1023 |
msgstr ""
|
1024 |
|
1025 |
+
#: inc/views/metaboxes/general-metabox.php:126
|
1026 |
msgid "Enable object cache?"
|
1027 |
msgstr ""
|
1028 |
|
1029 |
+
#: inc/views/metaboxes/general-metabox.php:127
|
1030 |
msgid "Object cache generally works faster than transient cache"
|
1031 |
msgstr ""
|
1032 |
|
1033 |
+
#: inc/views/metaboxes/general-metabox.php:128
|
1034 |
msgid "An object cache handler has been detected. If you enable this option, you might wish to disable description and Schema transient caching."
|
1035 |
msgstr ""
|
1036 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1037 |
#: inc/views/metaboxes/general-metabox.php:138
|
1038 |
msgid "Canonical URL Settings"
|
1039 |
msgstr ""
|
1047 |
msgstr ""
|
1048 |
|
1049 |
#: inc/views/metaboxes/general-metabox.php:141
|
1050 |
+
msgid "Only adjust these options if you are aware of their SEO effects."
|
1051 |
msgstr ""
|
1052 |
|
1053 |
#: inc/views/metaboxes/general-metabox.php:146
|
1497 |
msgid "Social Pages connected to this website"
|
1498 |
msgstr ""
|
1499 |
|
1500 |
+
#: inc/views/metaboxes/schema-metabox.php:191
|
1501 |
msgid "Don't have a page at a site or is the profile only privately accessible? Leave that field empty. Unsure? Fill it in anyway."
|
1502 |
msgstr ""
|
1503 |
|
1504 |
+
#: inc/views/metaboxes/schema-metabox.php:192
|
1505 |
msgid "Add the link that leads directly to the social page of this website."
|
1506 |
msgstr ""
|
1507 |
|
1508 |
+
#: inc/views/metaboxes/schema-metabox.php:194
|
1509 |
msgctxt "No spaces. E.g. https://facebook.com/RelatedProfile"
|
1510 |
msgid "RelatedProfile"
|
1511 |
msgstr ""
|
1512 |
|
1513 |
+
#: inc/views/metaboxes/schema-metabox.php:195
|
1514 |
msgctxt "Social Profile"
|
1515 |
msgid "Profile"
|
1516 |
msgstr ""
|
1517 |
|
1518 |
+
#: inc/views/metaboxes/schema-metabox.php:260
|
1519 |
msgid "Blog"
|
1520 |
msgstr ""
|
1521 |
|
1522 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:36
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1523 |
msgid "Timestamps"
|
1524 |
msgstr ""
|
1525 |
|
1526 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:41
|
1527 |
msgctxt "Ping or notify Search Engine"
|
1528 |
msgid "Ping"
|
1529 |
msgstr ""
|
1530 |
|
1531 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:46
|
1532 |
msgid "Style"
|
1533 |
msgstr ""
|
1534 |
|
1535 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:85
|
1536 |
msgid "Sitemap Integration Settings"
|
1537 |
msgstr ""
|
1538 |
|
1539 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:89
|
1540 |
msgid "Another active sitemap plugin has been detected. This means that the sitemap functionality has been replaced."
|
1541 |
msgstr ""
|
1542 |
|
1543 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:91
|
1544 |
msgid "A sitemap has been detected in the root folder of your website. This means that the sitemap functionality has no effect."
|
1545 |
msgstr ""
|
1546 |
|
1547 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:93
|
1548 |
msgid "The Sitemap is an XML file that lists pages and posts for your website along with optional metadata about each post or page. This helps Search Engines crawl your website more easily."
|
1549 |
msgstr ""
|
1550 |
|
1551 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:94
|
1552 |
msgid "The optional metadata include the post and page modified time and a page priority indication, which is automated."
|
1553 |
msgstr ""
|
1554 |
|
1555 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:99
|
1556 |
msgid "Sitemap Output"
|
1557 |
msgstr ""
|
1558 |
|
1559 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:106
|
1560 |
msgid "Output Sitemap?"
|
1561 |
msgstr ""
|
1562 |
|
1563 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:114
|
1564 |
msgid "View sitemap"
|
1565 |
msgstr ""
|
1566 |
|
1567 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:114
|
1568 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:132
|
1569 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:170
|
1570 |
+
msgctxt "The sitemap can be found %s."
|
1571 |
+
msgid "here"
|
1572 |
+
msgstr ""
|
1573 |
+
|
1574 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:115
|
1575 |
msgctxt "%s = here"
|
1576 |
msgid "The sitemap can be found %s."
|
1577 |
msgstr ""
|
1578 |
|
1579 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:124
|
1580 |
msgid "Robots.txt Settings"
|
1581 |
msgstr ""
|
1582 |
|
1583 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:128
|
1584 |
msgid "A robots.txt file has been detected in the root folder of your website; therefore no settings are able to alter its output."
|
1585 |
msgstr ""
|
1586 |
|
1587 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:132
|
1588 |
+
msgid "Permalink Settings"
|
1589 |
+
msgstr ""
|
1590 |
+
|
1591 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:134
|
1592 |
+
msgid "You're using the plain permalink structure."
|
1593 |
+
msgstr ""
|
1594 |
+
|
1595 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:135
|
1596 |
+
msgid "This means the robots.txt file can't be outputted through the WordPress rewrite rules."
|
1597 |
+
msgstr ""
|
1598 |
+
|
1599 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:137
|
1600 |
+
msgctxt "%s = here"
|
1601 |
+
msgid "Change your Permalink Settings %s (Recommended: \"Post name\")."
|
1602 |
+
msgstr ""
|
1603 |
+
|
1604 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:141
|
1605 |
msgid "The robots.txt file is the first thing Search Engines look for. If you add the sitemap location in the robots.txt file, then Search Engines will look for and index the sitemap."
|
1606 |
msgstr ""
|
1607 |
|
1608 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:142
|
1609 |
msgid "If you do not add the sitemap location to the robots.txt file, you will need to notify Search Engines manually through the Webmaster Console provided by the Search Engines."
|
1610 |
msgstr ""
|
1611 |
|
1612 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:147
|
1613 |
msgid "Add sitemap location in robots.txt"
|
1614 |
msgstr ""
|
1615 |
|
1616 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:154
|
1617 |
msgid "Add sitemap location in robots?"
|
1618 |
msgstr ""
|
1619 |
|
1620 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:154
|
1621 |
msgid "This only has effect if the sitemap is active"
|
1622 |
msgstr ""
|
1623 |
|
1624 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:161
|
1625 |
msgid "No robots.txt file can be generated on subdirectory installations."
|
1626 |
msgstr ""
|
1627 |
|
1628 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:164
|
1629 |
msgid "Another robots.txt sitemap location addition has been detected."
|
1630 |
msgstr ""
|
1631 |
|
1632 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:170
|
1633 |
msgid "View robots.txt"
|
1634 |
msgstr ""
|
1635 |
|
1636 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:172
|
1637 |
msgctxt "%s = here"
|
1638 |
msgid "The robots.txt file can be found %s."
|
1639 |
msgstr ""
|
1640 |
|
1641 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:192
|
1642 |
msgid "Timestamps Settings"
|
1643 |
msgstr ""
|
1644 |
|
1645 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:193
|
1646 |
msgid "The modified time suggests to Search Engines where to look for content changes. It has no impact on the SEO value unless you drastically change pages or posts. It then depends on how well your content is constructed."
|
1647 |
msgstr ""
|
1648 |
|
1649 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:194
|
1650 |
msgid "By default, the sitemap only outputs the modified date if you've enabled them within the Social Metabox. This setting overrides those settings for the Sitemap."
|
1651 |
msgstr ""
|
1652 |
|
1653 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:199
|
1654 |
msgid "Output Modified Date"
|
1655 |
msgstr ""
|
1656 |
|
1657 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:206
|
1658 |
msgid "Add %s to the sitemap?"
|
1659 |
msgstr ""
|
1660 |
|
1661 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:216
|
1662 |
msgid "Timestamp Format Settings"
|
1663 |
msgstr ""
|
1664 |
|
1665 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:217
|
1666 |
msgid "Determines how specific the modification timestamp is."
|
1667 |
msgstr ""
|
1668 |
|
1669 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:223
|
1670 |
msgid "Complete date"
|
1671 |
msgstr ""
|
1672 |
|
1673 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:229
|
1674 |
msgid "Complete date plus hours, minutes and timezone"
|
1675 |
msgstr ""
|
1676 |
|
1677 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:239
|
1678 |
msgid "Ping Settings"
|
1679 |
msgstr ""
|
1680 |
|
1681 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:240
|
1682 |
msgid "Notifying Search Engines of a sitemap change is helpful to get your content indexed as soon as possible."
|
1683 |
msgstr ""
|
1684 |
|
1685 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:241
|
1686 |
msgid "By default this will happen at most once an hour."
|
1687 |
msgstr ""
|
1688 |
|
1689 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:246
|
1690 |
msgid "Notify Search Engines"
|
1691 |
msgstr ""
|
1692 |
|
1693 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:258
|
1694 |
msgid "Notify %s about sitemap changes?"
|
1695 |
msgstr ""
|
1696 |
|
1697 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:269
|
1698 |
msgid "Sitemap Styling Settings"
|
1699 |
msgstr ""
|
1700 |
|
1701 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:272
|
1702 |
msgid "You can style the sitemap to give it a more personal look. Styling the sitemap has no SEO value whatsoever."
|
1703 |
msgstr ""
|
1704 |
|
1705 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:277
|
1706 |
msgid "Enable styling"
|
1707 |
msgstr ""
|
1708 |
|
1709 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:284
|
1710 |
msgid "Style Sitemap?"
|
1711 |
msgstr ""
|
1712 |
|
1713 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:284
|
1714 |
msgid "This makes the sitemap more readable for humans"
|
1715 |
msgstr ""
|
1716 |
|
1717 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:293
|
1718 |
msgid "Style configuration"
|
1719 |
msgstr ""
|
1720 |
|
1721 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:301
|
1722 |
msgid "Add site logo?"
|
1723 |
msgstr ""
|
1724 |
|
1725 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:301
|
1726 |
msgid "The logo is set in Customizer"
|
1727 |
msgstr ""
|
1728 |
|
1729 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:314
|
1730 |
msgid "Sitemap header background color"
|
1731 |
msgstr ""
|
1732 |
|
1733 |
+
#: inc/views/metaboxes/sitemaps-metabox.php:323
|
1734 |
msgid "Sitemap title and lines color"
|
1735 |
msgstr ""
|
1736 |
|
2048 |
msgstr ""
|
2049 |
|
2050 |
#: inc/views/sitemap/xsl-stylesheet.php:8
|
2051 |
+
#: inc/views/sitemap/xsl-stylesheet.php:142
|
2052 |
msgid "XML Sitemap"
|
2053 |
msgstr ""
|
2054 |
|
2055 |
+
#. translators: URLs are in Markdown. Don't forget to localize the URLs.
|
2056 |
|
2057 |
+
#: inc/views/sitemap/xsl-stylesheet.php:148
|
2058 |
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/)."
|
2059 |
msgstr ""
|
2060 |
|
2061 |
+
#. translators: URLs are in Markdown. Don't localize this URL.
|
2062 |
|
2063 |
+
#: inc/views/sitemap/xsl-stylesheet.php:164
|
2064 |
msgid "You can find more information on XML sitemaps at [sitemaps.org](https://www.sitemaps.org/)."
|
2065 |
msgstr ""
|
2066 |
|
2067 |
+
#: inc/views/sitemap/xsl-stylesheet.php:179
|
2068 |
msgid "URL"
|
2069 |
msgstr ""
|
2070 |
|
2071 |
+
#: inc/views/sitemap/xsl-stylesheet.php:183
|
2072 |
msgid "Last Updated"
|
2073 |
msgstr ""
|
2074 |
|
2075 |
+
#: inc/views/sitemap/xsl-stylesheet.php:187
|
2076 |
msgid "Priority"
|
2077 |
msgstr ""
|
2078 |
|
2079 |
#. translators: URLs are in Markdown.
|
2080 |
|
2081 |
+
#: inc/views/sitemap/xsl-stylesheet.php:231
|
2082 |
msgid "Generated by [The SEO Framework](https://wordpress.org/plugins/autodescription/)"
|
2083 |
msgstr ""
|
2084 |
#. Plugin Name of the plugin/theme
|
2098 |
msgstr ""
|
2099 |
|
2100 |
#. Author URI of the plugin/theme
|
2101 |
+
msgid "https://theseoframework.com/"
|
2102 |
msgstr ""
|
lib/css/tsf-rtl.css
CHANGED
@@ -734,6 +734,8 @@ input[type="radio"].tsf-flex-nav-tab-radio {
|
|
734 |
.tsf-flex-tab-content {
|
735 |
-webkit-flex: 1 0 100%;
|
736 |
flex: 1 0 100%;
|
|
|
|
|
737 |
-webkit-flex-wrap: nowrap;
|
738 |
-ms-flex-wrap: nowrap;
|
739 |
flex-wrap: nowrap;
|
734 |
.tsf-flex-tab-content {
|
735 |
-webkit-flex: 1 0 100%;
|
736 |
flex: 1 0 100%;
|
737 |
+
/* EdgeHTML overflow fix */
|
738 |
+
max-width: 100%;
|
739 |
-webkit-flex-wrap: nowrap;
|
740 |
-ms-flex-wrap: nowrap;
|
741 |
flex-wrap: nowrap;
|
lib/css/tsf-rtl.min.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
#tsf-title-offset,#tsf-title-placeholder{right:0;white-space:pre;position:absolute}.tsf-metaboxes .tsf-top-buttons,.tsf-metaboxes .tsf-top-wrap>h1,.tsf-metaboxes .tsf-top-wrap>h2{float:left}.tsf-notice{position:relative;clear:both}.tsf-notice.tsf-show-icon p:before{content:'';margin-left:12px;background:0 0;display:inline-block;font:400 14px/16px dashicons;speak:none;height:16px;text-align:center;vertical-align:middle;width:16px;line-height:14px;-webkit-font-smoothing:antialiased}.error.tsf-notice.tsf-show-icon p:before{color:#dd3811;content:"\f534"}.notice-warning.tsf-notice.tsf-show-icon p:before{color:#ffa01b;content:"\f227"}.updated.tsf-notice.tsf-show-icon p:before{color:#0cc34b;font-size:16px;content:"\f147"}a.tsf-dismiss{position:absolute;top:0;left:1px;border:none;margin:0;padding:9px;background:0 0;color:#b4b9be;cursor:pointer;text-decoration:none}a.tsf-dismiss:before{background:0 0;content:"\f153";display:block;font:400 16px/20px dashicons;speak:none;height:20px;text-align:center;width:20px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a.tsf-dismiss:hover{color:#c00}table.wp-list-table .column-name{width:15%}table.wp-list-table .column-icl_translations,table.wp-list-table .column-is_in_stock,table.wp-list-table .column-price,table.wp-list-table .column-sku,th.column-tsf-seo-bar-wrap~th{width:8%}.tsf-seo-bar a{text-decoration:none;font-size:13px}#tsf-title-wrap{position:relative;display:block;padding:0;height:auto;width:auto;overflow:hidden}#tsf-title-offset{visibility:hidden;height:0;display:inline-block;color:transparent}#tsf-title-placeholder{color:#777;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;box-sizing:content-box;top:0;overflow:hidden;text-overflow:ellipsis}.tsf-counter{font-weight:600;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}span.tsf-count-bad{color:#dd3811}span.tsf-count-okay{color:#ffa700}span.tsf-count-good{color:#0cc34b}span.tsf-counter-one{color:#fff;border-radius:4em;padding:0 .5em;min-width:2em;display:inline-block;text-align:center;vertical-align:baseline}span.tsf-counter-one.tsf-count-bad{background-color:#dd3811}span.tsf-counter-one.tsf-count-okay{background-color:#ffa700}span.tsf-counter-one.tsf-count-good{background-color:#0cc34b}#tsf-seo-bar-wrap{width:18%}th:last-of-type#tsf-seo-bar-wrap{width:160px}span.tsf-seo-bar{display:block;width:95%;max-width:220px;border-radius:0;padding:3px;text-shadow:0 0 3px rgba(0,0,0,.3)}span.tsf-seo-bar.tsf-100{width:100%}span.tsf-seo-bar-inner-wrap{display:table;width:100%;border-radius:0;margin:0 auto;border-collapse:separate;border-spacing:0;vertical-align:middle;position:relative}span.tsf-seo-bar-section-wrap{display:table-cell;border-collapse:collapse}.tsf-seo-bar-inner-wrap a{display:table;width:100%;color:#fff;text-align:center;cursor:help;height:100%;min-width:12px;vertical-align:top;line-height:1.625em;box-shadow:2px 0 0 -1px rgba(0,0,0,.1) inset,-2px 0 0 -1px rgba(0,0,0,.1) inset}span.tsf-seo-bar.pill,span.tsf-seo-bar.pill span.tsf-seo-bar-inner-wrap{border-radius:30px}span.tsf-seo-bar.pill span.tsf-seo-bar-inner-wrap a{box-shadow:2px 6px 3px -2px rgba(255,255,255,.2) inset,-2px -6px 3px -2px rgba(41,41,41,.2) inset,0 0 1px rgba(41,41,41,.6)}.tsf-seo-bar.pill .tsf-seo-bar-inner-wrap span.tsf-seo-bar-section-wrap:last-of-type,.tsf-seo-bar.pill .tsf-seo-bar-inner-wrap span.tsf-seo-bar-section-wrap:last-of-type a{border-top-left-radius:30px;border-bottom-left-radius:30px}.tsf-seo-bar.pill .tsf-seo-bar-inner-wrap span.tsf-seo-bar-section-wrap:first-of-type,.tsf-seo-bar.pill .tsf-seo-bar-inner-wrap span.tsf-seo-bar-section-wrap:first-of-type a{border-top-right-radius:30px;border-bottom-right-radius:30px}.tsf-100{width:100%}.tsf-60{width:60%}.tsf-50{width:50%}.tsf-40{width:40%}.tsf-33{width:33.333%}.tsf-25{width:25%}.tsf-20{width:20%}.tsf-16{width:16.666%}.tsf-12-5{width:12.5%}.tsf-11{width:11.333%}.tsf-10{width:10%}.tsf-seo-bar-bad{background-color:#dd3811}.tsf-seo-bar-okay{background-color:#ffa700}.tsf-seo-bar-good{background-color:#0cc34b}.tsf-seo-bar-unknown{background-color:#007bd2}span.tsf-seo-bar .tsf-explanation-desc{position:absolute;width:auto;min-width:90%;max-width:220px;font-weight:600;background:#007bd2;padding:8px 12px;color:#fdfdfd;border-radius:0;z-index:900142;box-shadow:0 0 2px rgba(0,0,0,.6);left:0;right:0;text-align:left;pointer-events:none}span.tsf-seo-bar .tsf-explanation-desc span{text-decoration:underline}span.tsf-seo-bar .tsf-explanation-desc div{width:0;height:0;border-left:12px solid transparent;border-right:12px solid transparent;border-top:12px solid #007bd2;position:absolute;bottom:-8px;z-index:9999999;left:0}.tsf-seo-bar-wrap.column-tsf-seo-bar-temp{overflow:initial!important;min-width:160px}#col-container,#col-right{overflow:initial}.tsf-metaboxes{box-sizing:border-box;max-width:690px;padding-bottom:20px}.tsf-metaboxes .tsf-top-wrap{width:100%;display:inline-block;vertical-align:top}.tsf-metaboxes .metabox-holder{clear:both}.tsf-metaboxes .tsf-bottom-buttons{text-align:left}.tsf-metaboxes .tsf-bottom-buttons input,.tsf-metaboxes .tsf-top-buttons input{margin-left:10px}.tsf-metaboxes #tsf-description-separator,.tsf-metaboxes #tsf-title-separator{display:table;width:100%;border-collapse:collapse;border-spacing:0}.tsf-metaboxes #tsf-description-separator input,.tsf-metaboxes #tsf-title-separator input{display:none;float:left;width:0;min-width:0;opacity:0}.tsf-metaboxes #tsf-description-separator label,.tsf-metaboxes #tsf-title-separator label{display:inline-block;width:auto;min-width:28px;min-height:28px;margin:3px;-moz-margin-end:1.5px;-moz-margin-start:1.5px;padding:0 4px;border:1px solid #ccc;line-height:28px;text-align:center;cursor:pointer;box-shadow:-1px -1px 1px #aaa inset;font-size:16px}.tsf-metaboxes #tsf-description-separator label.tsf-recommended,.tsf-metaboxes #tsf-title-separator label.tsf-recommended{border:1px solid #0cc34b;box-shadow:-1px -1px 1px #0cc34b inset}.tsf-metaboxes #tsf-description-separator input:hover+label,.tsf-metaboxes #tsf-description-separator label:hover,.tsf-metaboxes #tsf-title-separator input:hover+label,.tsf-metaboxes #tsf-title-separator label:hover{box-shadow:1px 1px 1px #aaa inset;background-color:#fff}.tsf-metaboxes #tsf-description-separator input:checked+label,.tsf-metaboxes #tsf-title-separator input:checked+label{box-shadow:1px 1px 1px #333 inset;background-color:#fff}.tsf-metaboxes #tsf-home-title-location,.tsf-metaboxes #tsf-title-location{display:block}.tsf-metaboxes #tsf-home-title-location label span,.tsf-metaboxes #tsf-title-location label span,.tsf-metaboxes #tsf-twitter-cards label span{display:inline-block;min-width:60px;vertical-align:baseline}.tsf-metaboxes #tsf-twitter-cards label span{min-width:150px}.tsf-metaboxes #tsf-home-title-location label .tsf-sep-js,.tsf-metaboxes #tsf-home-title-location label span.tsf-custom-blogname-js,.tsf-metaboxes #tsf-home-title-location label span.tsf-custom-tagline-js,.tsf-metaboxes #tsf-home-title-location label span.tsf-custom-title-js,.tsf-metaboxes #tsf-title-location label .tsf-sep-js{display:inline;min-width:0;white-space:pre}.tsf-metaboxes .tsf-nav-tab-wrapper,.tsf-metaboxes .tsf-tab-no-js{position:relative;clear:both;width:100%;display:inline-block;border-bottom:1px solid #ccc;line-height:inherit;padding:8px 12px 0;margin:-4px -12px}.tsf-metaboxes .tsf-nav-tab{float:right;border:1px solid #ccc;margin-right:.5em;margin-bottom:-1px;padding:5px 14px;font-size:12px;line-height:16px;background:#f1f1f1;color:#555;font-weight:600}.tsf-metaboxes .tsf-dashicons-tabs{font-size:initial;display:inline;vertical-align:text-bottom}.tsf-metaboxes .tsf-tabs-radio{display:none;width:0;height:0;position:absolute;left:-9001px}.tsf-metaboxes .tsf-active-tab,.tsf-metaboxes .tsf-tabs-radio:checked+label{background-color:inherit;border-bottom-color:#fff;color:#000}.tsf-metaboxes .tsf-tabs-content{margin:1.33em auto 0}.tsf-metaboxes .tsf-content-no-js{margin:1.33em auto}body.js .tsf-metaboxes .tsf-tabs-content{display:none}body.js .tsf-metaboxes .tsf-tabs-content.tsf-active-tab-content{display:block}#tsf-inpost-box .inside,.tsf-flex{box-sizing:border-box;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex:1 1 auto;flex:1 1 auto;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-flex-direction:column;flex-direction:column;-webkit-justify-content:flex-start;justify-content:flex-start}#tsf-inpost-box.closed .inside,body.js .tsf-flex-tab-content{display:none}#tsf-inpost-box .inside{margin:0;padding:0;-webkit-flex:1 0 100%;flex:1 0 100%;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.tsf-flex-inside-wrap{-webkit-flex-direction:row;flex-direction:row;-webkit-flex:1 1 auto;flex:1 1 auto}.tsf-flex-setting{width:100%;-webkit-flex-direction:row;flex-direction:row}.tsf-flex-setting-input,.tsf-flex-setting-label{background-color:#fff;padding:15px 12px;-webkit-flex:10 1 350px;flex:10 1 350px;box-shadow:0 0 0 1px #e9e9e9}.tsf-flex-setting-label{background-color:#f9f9f9;-webkit-flex:1 1 200px;flex:1 1 200px}.tsf-flex-setting-input{-webkit-justify-content:center;justify-content:center}.tsf-flex-setting-label-item{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex-direction:row;flex-direction:row;-webkit-justify-content:space-between;justify-content:space-between;-webkit-flex-grow:0;flex-grow:0}.tsf-flex-setting-label-inner-wrap{-webkit-justify-content:center;justify-content:center}.tsf-flex-setting-label-item>*{margin-right:4px}.tsf-flex-setting-label-item>:last-child{margin-right:0}.tsf-flex-setting-label .tsf-counter{font-weight:400;color:#666;margin-top:15px}.tsf-social-image-buttons{margin-top:15px;margin-left:1px}.tsf-flex-setting-input textarea{max-height:250px}input[type=radio].tsf-flex-nav-tab-radio{display:none;width:0;height:0;margin:0;padding:0;position:absolute;left:-9001px}.tsf-flex-nav-tab-wrapper{background-color:#fcfcfc;border-bottom:2px solid #dadada;-webkit-align-items:baseline;align-items:baseline;-webkit-flex-direction:row;flex-direction:row;-webkit-flex:1 1 100%;flex:1 1 100%;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;max-width:100%}.tsf-flex-nav-tab-inner{-webkit-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex:1 0 auto;flex:1 0 auto}.tsf-flex-nav-tab{-webkit-flex-direction:row;flex-direction:row;-webkit-flex:1 1 auto;flex:1 1 auto;max-width:125px}.tsf-flex-nav-tab-label{padding:12px;text-align:center;-webkit-flex-direction:row;flex-direction:row;box-shadow:0 0 0 0 transparent inset;-webkit-transition:box-shadow .15s ease-out;-o-transition:box-shadow .15s ease-out;transition:box-shadow .15s ease-out;-webkit-align-items:center;align-items:center;-webkit-align-content:space-between;align-content:space-between}.tsf-flex-nav-dashicon,.tsf-flex-nav-name{-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center}.tsf-flex-nav-tab .tsf-flex-nav-tab-radio:checked+.tsf-flex-nav-tab-label{box-shadow:0 -2px 0 0 #007bd2 inset;-webkit-transition:box-shadow .25s ease-in;-o-transition:box-shadow .25s ease-in;transition:box-shadow .25s ease-in}.tsf-flex-tab-content{-webkit-flex:1 0 100%;flex:1 0 100%;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}body.js .tsf-flex-tab-content.tsf-flex-tab-content-active{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.tsf-flex-tabs-content-no-js{background-color:#f3f3f3;border-bottom:1px solid #dadada;box-shadow:0 2px 0 0 #dadada inset}.tsf-flex-tab-no-js{-webkit-align-items:baseline;align-items:baseline;-webkit-flex-direction:row;flex-direction:row;flex:1 1 100%}.tsf-flex-tab-no-js .tsf-flex-nav-tab{padding:12px;min-width:125px;box-shadow:0 -2px 0 0 #007bd2 inset;-webkit-flex-direction:row;flex-direction:row;-webkit-flex:0 1 auto;flex:0 1 auto}.tsf-metaboxes .tsf-default-selected{border-color:#1c9d38}.tsf-metaboxes .tsf-default-selected:checked:before{color:#1c9d38}.tsf-metaboxes .tsf-warning-selected{border-color:#dd3811}.tsf-metaboxes .tsf-warning-selected:checked:before{color:#dd3811}.tsf-fields{font-size:13px;line-height:1.5;margin:1em 0}.tsf-fields .tsf-toblock{display:block;width:100%;margin-bottom:4px}.tsf-fields p.description{margin:7px 0 5px;color:#666}.tsf-option-spacer{margin:1em 0}.tsf-checkbox-wrapper{margin-top:15px}.tsf-checkbox-wrapper:first-child{margin-top:0}.tsf-counter .tsf-ajax{margin-right:3px}.tsf-ajax:before{display:inline-block;line-height:1;font-family:dashicons;font-style:normal;font-weight:400;font-size:1.225em;vertical-align:middle;content:""}.tsf-ajax.tsf-loading:before{content:"\f463";color:#007bd2;-webkit-animation:tsf-spin 1.5s linear infinite;-moz-animation:tsf-spin 1.5s linear infinite;-o-animation:tsf-spin 1.5s linear infinite;animation:tsf-spin 1.5s linear infinite}.tsf-ajax.tsf-error:before{content:"\f158";color:#dd3811}.tsf-ajax.tsf-success:before{content:"\f147";color:#0cc34b}a.tsf-set-social-image.button{margin-left:7px}#tsf-inpost-box input[type=text]::-webkit-input-placeholder,#tsf-inpost-box textarea::-webkit-input-placeholder,.tsf-metaboxes input[type=text]::-webkit-input-placeholder,.tsf-metaboxes textarea::-webkit-input-placeholder{-webkit-transition:color .33s ease-in,text-shadow .33s ease-in;-o-transition:color .33s ease-in,text-shadow .33s ease-in;transition:color .33s ease-in,text-shadow .33s ease-in}#tsf-inpost-box input[type=text]::-moz-placeholder,#tsf-inpost-box textarea::-moz-placeholder,.tsf-metaboxes input[type=text]::-moz-placeholder,.tsf-metaboxes textarea::-moz-placeholder{-moz-transition:color .33s ease-in,text-shadow .33s ease-in;transition:color .33s ease-in,text-shadow .33s ease-in}#tsf-inpost-box input[type=text]:-ms-input-placeholder,#tsf-inpost-box textarea:-ms-input-placeholder,.tsf-metaboxes input[type=text]:-ms-input-placeholder,.tsf-metaboxes textarea:-ms-input-placeholder{transition:color .33s ease-in,text-shadow .33s ease-in}#tsf-inpost-box input[type=text]:focus::-webkit-input-placeholder,#tsf-inpost-box textarea:focus::-webkit-input-placeholder,.tsf-metaboxes input[type=text]:focus::-webkit-input-placeholder,.tsf-metaboxes textarea:focus::-webkit-input-placeholder{color:transparent;text-shadow:0 0 1px rgba(114,119,124,.75)}#tsf-inpost-box input[type=text]:focus::-moz-placeholder,#tsf-inpost-box textarea:focus::-moz-placeholder,.tsf-metaboxe textarea:focus::-moz-placeholder,.tsf-metaboxes input[type=text]:focus::-moz-placeholder{color:transparent;text-shadow:0 0 1px rgba(114,119,124,.75)}#tsf-inpost-box input[type=text]:focus:-ms-input-placeholder,#tsf-inpost-box textarea:focus:-ms-input-placeholder,.tsf-metaboxes input[type=text]:focus:-ms-input-placeholder,.tsf-metaboxes textarea:focus:-ms-input-placeholder{color:transparent;text-shadow:0 0 1px rgba(114,119,124,.75)}@-webkit-keyframes tsf-spin{0%{-webkit-transform:rotate(0)}100%{-webkit-transform:rotate(360deg)}}@keyframes tsf-spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@media screen and (max-width:782px){.tsf-inpost-box p.tsf-fields,.tsf-metaboxes p.tsf-fields{line-height:2.8}.tsf-metaboxes #tsf-home-title-location label span,.tsf-metaboxes #tsf-title-location label span{min-width:40px}.wp-list-table .is-expanded td.tsf-seo-bar-wrap:not(.hidden){overflow:initial!important}}@media screen and (max-width:642px){.tsf-metaboxes span.tsf-nav-desktop{display:none}}@media screen and (max-width:510px){span.tsf-seo-bar.tsf-100{width:inherit}}@-moz-document url-prefix(){.tsf-metaboxes #tsf-description-separator label,.tsf-metaboxes #tsf-title-separator label{margin:3px 1px}@media only screen and (min-width:768px){.widefat tr td.column-title:nth-child(2):nth-last-child(n+6),.widefat tr td.title:nth-child(2):nth-last-child(n+6),.widefat tr th.column-title:nth-child(2):nth-last-child(n+6),.widefat tr th.title:nth-child(2):nth-last-child(n+6){min-width:1em;width:25%;max-width:100%;white-space:unset}}.tsf-metaboxes .tsf-default-selected{box-shadow:0 0 2px 0 #1c9d38}.tsf-metaboxes .tsf-warning-selected{box-shadow:0 0 2px 0 #dd3811}.tsf-metaboxes legend h4{margin:2px 0}}.tsf-flex-hide-if-no-js,body.js .tsf-flex-hide-if-js{display:none}body.js .tsf-flex-hide-if-no-js{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}
|
1 |
+
#tsf-title-offset,#tsf-title-placeholder{right:0;white-space:pre;position:absolute}.tsf-metaboxes .tsf-top-buttons,.tsf-metaboxes .tsf-top-wrap>h1,.tsf-metaboxes .tsf-top-wrap>h2{float:left}.tsf-notice{position:relative;clear:both}.tsf-notice.tsf-show-icon p:before{content:'';margin-left:12px;background:0 0;display:inline-block;font:400 14px/16px dashicons;speak:none;height:16px;text-align:center;vertical-align:middle;width:16px;line-height:14px;-webkit-font-smoothing:antialiased}.error.tsf-notice.tsf-show-icon p:before{color:#dd3811;content:"\f534"}.notice-warning.tsf-notice.tsf-show-icon p:before{color:#ffa01b;content:"\f227"}.updated.tsf-notice.tsf-show-icon p:before{color:#0cc34b;font-size:16px;content:"\f147"}a.tsf-dismiss{position:absolute;top:0;left:1px;border:none;margin:0;padding:9px;background:0 0;color:#b4b9be;cursor:pointer;text-decoration:none}a.tsf-dismiss:before{background:0 0;content:"\f153";display:block;font:400 16px/20px dashicons;speak:none;height:20px;text-align:center;width:20px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a.tsf-dismiss:hover{color:#c00}table.wp-list-table .column-name{width:15%}table.wp-list-table .column-icl_translations,table.wp-list-table .column-is_in_stock,table.wp-list-table .column-price,table.wp-list-table .column-sku,th.column-tsf-seo-bar-wrap~th{width:8%}.tsf-seo-bar a{text-decoration:none;font-size:13px}#tsf-title-wrap{position:relative;display:block;padding:0;height:auto;width:auto;overflow:hidden}#tsf-title-offset{visibility:hidden;height:0;display:inline-block;color:transparent}#tsf-title-placeholder{color:#777;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;box-sizing:content-box;top:0;overflow:hidden;text-overflow:ellipsis}.tsf-counter{font-weight:600;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}span.tsf-count-bad{color:#dd3811}span.tsf-count-okay{color:#ffa700}span.tsf-count-good{color:#0cc34b}span.tsf-counter-one{color:#fff;border-radius:4em;padding:0 .5em;min-width:2em;display:inline-block;text-align:center;vertical-align:baseline}span.tsf-counter-one.tsf-count-bad{background-color:#dd3811}span.tsf-counter-one.tsf-count-okay{background-color:#ffa700}span.tsf-counter-one.tsf-count-good{background-color:#0cc34b}#tsf-seo-bar-wrap{width:18%}th:last-of-type#tsf-seo-bar-wrap{width:160px}span.tsf-seo-bar{display:block;width:95%;max-width:220px;border-radius:0;padding:3px;text-shadow:0 0 3px rgba(0,0,0,.3)}span.tsf-seo-bar.tsf-100{width:100%}span.tsf-seo-bar-inner-wrap{display:table;width:100%;border-radius:0;margin:0 auto;border-collapse:separate;border-spacing:0;vertical-align:middle;position:relative}span.tsf-seo-bar-section-wrap{display:table-cell;border-collapse:collapse}.tsf-seo-bar-inner-wrap a{display:table;width:100%;color:#fff;text-align:center;cursor:help;height:100%;min-width:12px;vertical-align:top;line-height:1.625em;box-shadow:2px 0 0 -1px rgba(0,0,0,.1) inset,-2px 0 0 -1px rgba(0,0,0,.1) inset}span.tsf-seo-bar.pill,span.tsf-seo-bar.pill span.tsf-seo-bar-inner-wrap{border-radius:30px}span.tsf-seo-bar.pill span.tsf-seo-bar-inner-wrap a{box-shadow:2px 6px 3px -2px rgba(255,255,255,.2) inset,-2px -6px 3px -2px rgba(41,41,41,.2) inset,0 0 1px rgba(41,41,41,.6)}.tsf-seo-bar.pill .tsf-seo-bar-inner-wrap span.tsf-seo-bar-section-wrap:last-of-type,.tsf-seo-bar.pill .tsf-seo-bar-inner-wrap span.tsf-seo-bar-section-wrap:last-of-type a{border-top-left-radius:30px;border-bottom-left-radius:30px}.tsf-seo-bar.pill .tsf-seo-bar-inner-wrap span.tsf-seo-bar-section-wrap:first-of-type,.tsf-seo-bar.pill .tsf-seo-bar-inner-wrap span.tsf-seo-bar-section-wrap:first-of-type a{border-top-right-radius:30px;border-bottom-right-radius:30px}.tsf-100{width:100%}.tsf-60{width:60%}.tsf-50{width:50%}.tsf-40{width:40%}.tsf-33{width:33.333%}.tsf-25{width:25%}.tsf-20{width:20%}.tsf-16{width:16.666%}.tsf-12-5{width:12.5%}.tsf-11{width:11.333%}.tsf-10{width:10%}.tsf-seo-bar-bad{background-color:#dd3811}.tsf-seo-bar-okay{background-color:#ffa700}.tsf-seo-bar-good{background-color:#0cc34b}.tsf-seo-bar-unknown{background-color:#007bd2}span.tsf-seo-bar .tsf-explanation-desc{position:absolute;width:auto;min-width:90%;max-width:220px;font-weight:600;background:#007bd2;padding:8px 12px;color:#fdfdfd;border-radius:0;z-index:900142;box-shadow:0 0 2px rgba(0,0,0,.6);left:0;right:0;text-align:left;pointer-events:none}span.tsf-seo-bar .tsf-explanation-desc span{text-decoration:underline}span.tsf-seo-bar .tsf-explanation-desc div{width:0;height:0;border-left:12px solid transparent;border-right:12px solid transparent;border-top:12px solid #007bd2;position:absolute;bottom:-8px;z-index:9999999;left:0}.tsf-seo-bar-wrap.column-tsf-seo-bar-temp{overflow:initial!important;min-width:160px}#col-container,#col-right{overflow:initial}.tsf-metaboxes{box-sizing:border-box;max-width:690px;padding-bottom:20px}.tsf-metaboxes .tsf-top-wrap{width:100%;display:inline-block;vertical-align:top}.tsf-metaboxes .metabox-holder{clear:both}.tsf-metaboxes .tsf-bottom-buttons{text-align:left}.tsf-metaboxes .tsf-bottom-buttons input,.tsf-metaboxes .tsf-top-buttons input{margin-left:10px}.tsf-metaboxes #tsf-description-separator,.tsf-metaboxes #tsf-title-separator{display:table;width:100%;border-collapse:collapse;border-spacing:0}.tsf-metaboxes #tsf-description-separator input,.tsf-metaboxes #tsf-title-separator input{display:none;float:left;width:0;min-width:0;opacity:0}.tsf-metaboxes #tsf-description-separator label,.tsf-metaboxes #tsf-title-separator label{display:inline-block;width:auto;min-width:28px;min-height:28px;margin:3px;-moz-margin-end:1.5px;-moz-margin-start:1.5px;padding:0 4px;border:1px solid #ccc;line-height:28px;text-align:center;cursor:pointer;box-shadow:-1px -1px 1px #aaa inset;font-size:16px}.tsf-metaboxes #tsf-description-separator label.tsf-recommended,.tsf-metaboxes #tsf-title-separator label.tsf-recommended{border:1px solid #0cc34b;box-shadow:-1px -1px 1px #0cc34b inset}.tsf-metaboxes #tsf-description-separator input:hover+label,.tsf-metaboxes #tsf-description-separator label:hover,.tsf-metaboxes #tsf-title-separator input:hover+label,.tsf-metaboxes #tsf-title-separator label:hover{box-shadow:1px 1px 1px #aaa inset;background-color:#fff}.tsf-metaboxes #tsf-description-separator input:checked+label,.tsf-metaboxes #tsf-title-separator input:checked+label{box-shadow:1px 1px 1px #333 inset;background-color:#fff}.tsf-metaboxes #tsf-home-title-location,.tsf-metaboxes #tsf-title-location{display:block}.tsf-metaboxes #tsf-home-title-location label span,.tsf-metaboxes #tsf-title-location label span,.tsf-metaboxes #tsf-twitter-cards label span{display:inline-block;min-width:60px;vertical-align:baseline}.tsf-metaboxes #tsf-twitter-cards label span{min-width:150px}.tsf-metaboxes #tsf-home-title-location label .tsf-sep-js,.tsf-metaboxes #tsf-home-title-location label span.tsf-custom-blogname-js,.tsf-metaboxes #tsf-home-title-location label span.tsf-custom-tagline-js,.tsf-metaboxes #tsf-home-title-location label span.tsf-custom-title-js,.tsf-metaboxes #tsf-title-location label .tsf-sep-js{display:inline;min-width:0;white-space:pre}.tsf-metaboxes .tsf-nav-tab-wrapper,.tsf-metaboxes .tsf-tab-no-js{position:relative;clear:both;width:100%;display:inline-block;border-bottom:1px solid #ccc;line-height:inherit;padding:8px 12px 0;margin:-4px -12px}.tsf-metaboxes .tsf-nav-tab{float:right;border:1px solid #ccc;margin-right:.5em;margin-bottom:-1px;padding:5px 14px;font-size:12px;line-height:16px;background:#f1f1f1;color:#555;font-weight:600}.tsf-metaboxes .tsf-dashicons-tabs{font-size:initial;display:inline;vertical-align:text-bottom}.tsf-metaboxes .tsf-tabs-radio{display:none;width:0;height:0;position:absolute;left:-9001px}.tsf-metaboxes .tsf-active-tab,.tsf-metaboxes .tsf-tabs-radio:checked+label{background-color:inherit;border-bottom-color:#fff;color:#000}.tsf-metaboxes .tsf-tabs-content{margin:1.33em auto 0}.tsf-metaboxes .tsf-content-no-js{margin:1.33em auto}body.js .tsf-metaboxes .tsf-tabs-content{display:none}body.js .tsf-metaboxes .tsf-tabs-content.tsf-active-tab-content{display:block}#tsf-inpost-box .inside,.tsf-flex{box-sizing:border-box;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex:1 1 auto;flex:1 1 auto;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-flex-direction:column;flex-direction:column;-webkit-justify-content:flex-start;justify-content:flex-start}#tsf-inpost-box.closed .inside,body.js .tsf-flex-tab-content{display:none}#tsf-inpost-box .inside{margin:0;padding:0;-webkit-flex:1 0 100%;flex:1 0 100%;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.tsf-flex-inside-wrap{-webkit-flex-direction:row;flex-direction:row;-webkit-flex:1 1 auto;flex:1 1 auto}.tsf-flex-setting{width:100%;-webkit-flex-direction:row;flex-direction:row}.tsf-flex-setting-input,.tsf-flex-setting-label{background-color:#fff;padding:15px 12px;-webkit-flex:10 1 350px;flex:10 1 350px;box-shadow:0 0 0 1px #e9e9e9}.tsf-flex-setting-label{background-color:#f9f9f9;-webkit-flex:1 1 200px;flex:1 1 200px}.tsf-flex-setting-input{-webkit-justify-content:center;justify-content:center}.tsf-flex-setting-label-item{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex-direction:row;flex-direction:row;-webkit-justify-content:space-between;justify-content:space-between;-webkit-flex-grow:0;flex-grow:0}.tsf-flex-setting-label-inner-wrap{-webkit-justify-content:center;justify-content:center}.tsf-flex-setting-label-item>*{margin-right:4px}.tsf-flex-setting-label-item>:last-child{margin-right:0}.tsf-flex-setting-label .tsf-counter{font-weight:400;color:#666;margin-top:15px}.tsf-social-image-buttons{margin-top:15px;margin-left:1px}.tsf-flex-setting-input textarea{max-height:250px}input[type=radio].tsf-flex-nav-tab-radio{display:none;width:0;height:0;margin:0;padding:0;position:absolute;left:-9001px}.tsf-flex-nav-tab-wrapper{background-color:#fcfcfc;border-bottom:2px solid #dadada;-webkit-align-items:baseline;align-items:baseline;-webkit-flex-direction:row;flex-direction:row;-webkit-flex:1 1 100%;flex:1 1 100%;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;max-width:100%}.tsf-flex-nav-tab-inner{-webkit-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex:1 0 auto;flex:1 0 auto}.tsf-flex-nav-tab{-webkit-flex-direction:row;flex-direction:row;-webkit-flex:1 1 auto;flex:1 1 auto;max-width:125px}.tsf-flex-nav-tab-label{padding:12px;text-align:center;-webkit-flex-direction:row;flex-direction:row;box-shadow:0 0 0 0 transparent inset;-webkit-transition:box-shadow .15s ease-out;-o-transition:box-shadow .15s ease-out;transition:box-shadow .15s ease-out;-webkit-align-items:center;align-items:center;-webkit-align-content:space-between;align-content:space-between}.tsf-flex-nav-dashicon,.tsf-flex-nav-name{-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center}.tsf-flex-nav-tab .tsf-flex-nav-tab-radio:checked+.tsf-flex-nav-tab-label{box-shadow:0 -2px 0 0 #007bd2 inset;-webkit-transition:box-shadow .25s ease-in;-o-transition:box-shadow .25s ease-in;transition:box-shadow .25s ease-in}.tsf-flex-tab-content{-webkit-flex:1 0 100%;flex:1 0 100%;max-width:100%;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}body.js .tsf-flex-tab-content.tsf-flex-tab-content-active{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.tsf-flex-tabs-content-no-js{background-color:#f3f3f3;border-bottom:1px solid #dadada;box-shadow:0 2px 0 0 #dadada inset}.tsf-flex-tab-no-js{-webkit-align-items:baseline;align-items:baseline;-webkit-flex-direction:row;flex-direction:row;flex:1 1 100%}.tsf-flex-tab-no-js .tsf-flex-nav-tab{padding:12px;min-width:125px;box-shadow:0 -2px 0 0 #007bd2 inset;-webkit-flex-direction:row;flex-direction:row;-webkit-flex:0 1 auto;flex:0 1 auto}.tsf-metaboxes .tsf-default-selected{border-color:#1c9d38}.tsf-metaboxes .tsf-default-selected:checked:before{color:#1c9d38}.tsf-metaboxes .tsf-warning-selected{border-color:#dd3811}.tsf-metaboxes .tsf-warning-selected:checked:before{color:#dd3811}.tsf-fields{font-size:13px;line-height:1.5;margin:1em 0}.tsf-fields .tsf-toblock{display:block;width:100%;margin-bottom:4px}.tsf-fields p.description{margin:7px 0 5px;color:#666}.tsf-option-spacer{margin:1em 0}.tsf-checkbox-wrapper{margin-top:15px}.tsf-checkbox-wrapper:first-child{margin-top:0}.tsf-counter .tsf-ajax{margin-right:3px}.tsf-ajax:before{display:inline-block;line-height:1;font-family:dashicons;font-style:normal;font-weight:400;font-size:1.225em;vertical-align:middle;content:""}.tsf-ajax.tsf-loading:before{content:"\f463";color:#007bd2;-webkit-animation:tsf-spin 1.5s linear infinite;-moz-animation:tsf-spin 1.5s linear infinite;-o-animation:tsf-spin 1.5s linear infinite;animation:tsf-spin 1.5s linear infinite}.tsf-ajax.tsf-error:before{content:"\f158";color:#dd3811}.tsf-ajax.tsf-success:before{content:"\f147";color:#0cc34b}a.tsf-set-social-image.button{margin-left:7px}#tsf-inpost-box input[type=text]::-webkit-input-placeholder,#tsf-inpost-box textarea::-webkit-input-placeholder,.tsf-metaboxes input[type=text]::-webkit-input-placeholder,.tsf-metaboxes textarea::-webkit-input-placeholder{-webkit-transition:color .33s ease-in,text-shadow .33s ease-in;-o-transition:color .33s ease-in,text-shadow .33s ease-in;transition:color .33s ease-in,text-shadow .33s ease-in}#tsf-inpost-box input[type=text]::-moz-placeholder,#tsf-inpost-box textarea::-moz-placeholder,.tsf-metaboxes input[type=text]::-moz-placeholder,.tsf-metaboxes textarea::-moz-placeholder{-moz-transition:color .33s ease-in,text-shadow .33s ease-in;transition:color .33s ease-in,text-shadow .33s ease-in}#tsf-inpost-box input[type=text]:-ms-input-placeholder,#tsf-inpost-box textarea:-ms-input-placeholder,.tsf-metaboxes input[type=text]:-ms-input-placeholder,.tsf-metaboxes textarea:-ms-input-placeholder{transition:color .33s ease-in,text-shadow .33s ease-in}#tsf-inpost-box input[type=text]:focus::-webkit-input-placeholder,#tsf-inpost-box textarea:focus::-webkit-input-placeholder,.tsf-metaboxes input[type=text]:focus::-webkit-input-placeholder,.tsf-metaboxes textarea:focus::-webkit-input-placeholder{color:transparent;text-shadow:0 0 1px rgba(114,119,124,.75)}#tsf-inpost-box input[type=text]:focus::-moz-placeholder,#tsf-inpost-box textarea:focus::-moz-placeholder,.tsf-metaboxe textarea:focus::-moz-placeholder,.tsf-metaboxes input[type=text]:focus::-moz-placeholder{color:transparent;text-shadow:0 0 1px rgba(114,119,124,.75)}#tsf-inpost-box input[type=text]:focus:-ms-input-placeholder,#tsf-inpost-box textarea:focus:-ms-input-placeholder,.tsf-metaboxes input[type=text]:focus:-ms-input-placeholder,.tsf-metaboxes textarea:focus:-ms-input-placeholder{color:transparent;text-shadow:0 0 1px rgba(114,119,124,.75)}@-webkit-keyframes tsf-spin{0%{-webkit-transform:rotate(0)}100%{-webkit-transform:rotate(360deg)}}@keyframes tsf-spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@media screen and (max-width:782px){.tsf-inpost-box p.tsf-fields,.tsf-metaboxes p.tsf-fields{line-height:2.8}.tsf-metaboxes #tsf-home-title-location label span,.tsf-metaboxes #tsf-title-location label span{min-width:40px}.wp-list-table .is-expanded td.tsf-seo-bar-wrap:not(.hidden){overflow:initial!important}}@media screen and (max-width:642px){.tsf-metaboxes span.tsf-nav-desktop{display:none}}@media screen and (max-width:510px){span.tsf-seo-bar.tsf-100{width:inherit}}@-moz-document url-prefix(){.tsf-metaboxes #tsf-description-separator label,.tsf-metaboxes #tsf-title-separator label{margin:3px 1px}@media only screen and (min-width:768px){.widefat tr td.column-title:nth-child(2):nth-last-child(n+6),.widefat tr td.title:nth-child(2):nth-last-child(n+6),.widefat tr th.column-title:nth-child(2):nth-last-child(n+6),.widefat tr th.title:nth-child(2):nth-last-child(n+6){min-width:1em;width:25%;max-width:100%;white-space:unset}}.tsf-metaboxes .tsf-default-selected{box-shadow:0 0 2px 0 #1c9d38}.tsf-metaboxes .tsf-warning-selected{box-shadow:0 0 2px 0 #dd3811}.tsf-metaboxes legend h4{margin:2px 0}}.tsf-flex-hide-if-no-js,body.js .tsf-flex-hide-if-js{display:none}body.js .tsf-flex-hide-if-no-js{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}
|
lib/css/tsf.css
CHANGED
@@ -739,6 +739,8 @@ input[type="radio"].tsf-flex-nav-tab-radio {
|
|
739 |
.tsf-flex-tab-content {
|
740 |
-webkit-flex: 1 0 100%;
|
741 |
flex: 1 0 100%;
|
|
|
|
|
742 |
-webkit-flex-wrap: nowrap;
|
743 |
-ms-flex-wrap: nowrap;
|
744 |
flex-wrap: nowrap;
|
739 |
.tsf-flex-tab-content {
|
740 |
-webkit-flex: 1 0 100%;
|
741 |
flex: 1 0 100%;
|
742 |
+
/* EdgeHTML overflow fix */
|
743 |
+
max-width: 100%;
|
744 |
-webkit-flex-wrap: nowrap;
|
745 |
-ms-flex-wrap: nowrap;
|
746 |
flex-wrap: nowrap;
|
lib/css/tsf.min.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.tsf-notice{position:relative;clear:both}.tsf-notice.tsf-show-icon p:before{content:'';margin-right:12px;background:0 0;display:inline-block;font:400 14px/16px dashicons;speak:none;height:16px;text-align:center;vertical-align:middle;width:16px;line-height:14px;-webkit-font-smoothing:antialiased}.error.tsf-notice.tsf-show-icon p:before{color:#dd3811;content:"\f534"}.notice-warning.tsf-notice.tsf-show-icon p:before{color:#ffa01b;content:"\f227"}.updated.tsf-notice.tsf-show-icon p:before{color:#0cc34b;font-size:16px;content:"\f147"}a.tsf-dismiss{position:absolute;top:0;right:1px;border:none;margin:0;padding:9px;background:0 0;color:#b4b9be;cursor:pointer;text-decoration:none}a.tsf-dismiss:before{background:0 0;content:"\f153";display:block;font:400 16px/20px dashicons;speak:none;height:20px;text-align:center;width:20px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a.tsf-dismiss:hover{color:#c00}table.wp-list-table .column-name{width:15%}table.wp-list-table .column-icl_translations,table.wp-list-table .column-is_in_stock,table.wp-list-table .column-price,table.wp-list-table .column-sku,th.column-tsf-seo-bar-wrap~th{width:8%}.tsf-seo-bar a{text-decoration:none;font-size:13px}#tsf-title-wrap{position:relative;display:block;padding:0;height:auto;width:auto;overflow:hidden}#tsf-title-offset{visibility:hidden;height:0;display:inline-block;position:absolute;left:0;color:transparent;white-space:pre}#tsf-title-placeholder{position:absolute;color:#777;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;box-sizing:content-box;top:0;left:0;overflow:hidden;white-space:pre;text-overflow:ellipsis}.tsf-counter{font-weight:600;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}span.tsf-count-bad{color:#dd3811}span.tsf-count-okay{color:#ffa700}span.tsf-count-good{color:#0cc34b}span.tsf-counter-one{color:#fff;border-radius:4em;padding:0 .5em;min-width:2em;display:inline-block;text-align:center;vertical-align:baseline}span.tsf-counter-one.tsf-count-bad{background-color:#dd3811}span.tsf-counter-one.tsf-count-okay{background-color:#ffa700}span.tsf-counter-one.tsf-count-good{background-color:#0cc34b}#tsf-seo-bar-wrap{width:18%}th:last-of-type#tsf-seo-bar-wrap{width:160px}span.tsf-seo-bar{display:block;width:95%;max-width:220px;border-radius:0;padding:3px;text-shadow:0 0 3px rgba(0,0,0,.3)}span.tsf-seo-bar.tsf-100{width:100%}span.tsf-seo-bar-inner-wrap{display:table;width:100%;border-radius:0;margin:0 auto;border-collapse:separate;border-spacing:0;vertical-align:middle;position:relative}span.tsf-seo-bar-section-wrap{display:table-cell;border-collapse:collapse}.tsf-seo-bar-inner-wrap a{display:table;width:100%;color:#fff;text-align:center;cursor:help;height:100%;min-width:12px;vertical-align:top;line-height:1.625em;box-shadow:2px 0 0 -1px rgba(0,0,0,.1) inset,-2px 0 0 -1px rgba(0,0,0,.1) inset}span.tsf-seo-bar.pill,span.tsf-seo-bar.pill span.tsf-seo-bar-inner-wrap{border-radius:30px}span.tsf-seo-bar.pill span.tsf-seo-bar-inner-wrap a{box-shadow:2px 6px 3px -2px rgba(255,255,255,.2) inset,-2px -6px 3px -2px rgba(41,41,41,.2) inset,0 0 1px rgba(41,41,41,.6)}.tsf-seo-bar.pill .tsf-seo-bar-inner-wrap span.tsf-seo-bar-section-wrap:first-of-type,.tsf-seo-bar.pill .tsf-seo-bar-inner-wrap span.tsf-seo-bar-section-wrap:first-of-type a{border-top-left-radius:30px;border-bottom-left-radius:30px}.tsf-seo-bar.pill .tsf-seo-bar-inner-wrap span.tsf-seo-bar-section-wrap:last-of-type,.tsf-seo-bar.pill .tsf-seo-bar-inner-wrap span.tsf-seo-bar-section-wrap:last-of-type a{border-top-right-radius:30px;border-bottom-right-radius:30px}.tsf-100{width:100%}.tsf-60{width:60%}.tsf-50{width:50%}.tsf-40{width:40%}.tsf-33{width:33.333%}.tsf-25{width:25%}.tsf-20{width:20%}.tsf-16{width:16.666%}.tsf-12-5{width:12.5%}.tsf-11{width:11.333%}.tsf-10{width:10%}.tsf-seo-bar-bad{background-color:#dd3811}.tsf-seo-bar-okay{background-color:#ffa700}.tsf-seo-bar-good{background-color:#0cc34b}.tsf-seo-bar-unknown{background-color:#007bd2}span.tsf-seo-bar .tsf-explanation-desc{position:absolute;width:auto;min-width:90%;max-width:220px;font-weight:600;background:#007bd2;padding:8px 12px;color:#fdfdfd;border-radius:0;z-index:900142;box-shadow:0 0 2px rgba(0,0,0,.6);left:0;right:0;text-align:left;pointer-events:none}span.tsf-seo-bar .tsf-explanation-desc span{text-decoration:underline}span.tsf-seo-bar .tsf-explanation-desc div{width:0;height:0;border-left:12px solid transparent;border-right:12px solid transparent;border-top:12px solid #007bd2;position:absolute;bottom:-8px;z-index:9999999;left:0}.tsf-seo-bar-wrap.column-tsf-seo-bar-temp{overflow:initial!important;min-width:160px}#col-container,#col-right{overflow:initial}.tsf-metaboxes{box-sizing:border-box;max-width:690px;padding-bottom:20px}.tsf-metaboxes .tsf-top-wrap{width:100%;display:inline-block;vertical-align:top}.tsf-metaboxes .tsf-top-wrap>h1,.tsf-metaboxes .tsf-top-wrap>h2{float:left}.tsf-metaboxes .metabox-holder{clear:both}.tsf-metaboxes .tsf-top-buttons{float:right}.tsf-metaboxes .tsf-bottom-buttons{text-align:right}.tsf-metaboxes .tsf-bottom-buttons input,.tsf-metaboxes .tsf-top-buttons input{margin-left:10px}.tsf-metaboxes #tsf-description-separator,.tsf-metaboxes #tsf-title-separator{display:table;width:100%;border-collapse:collapse;border-spacing:0}.tsf-metaboxes #tsf-description-separator input,.tsf-metaboxes #tsf-title-separator input{display:none;float:left;width:0;min-width:0;opacity:0}.tsf-metaboxes #tsf-description-separator label,.tsf-metaboxes #tsf-title-separator label{display:inline-block;width:auto;min-width:28px;min-height:28px;margin:3px;-moz-margin-end:1.5px;-moz-margin-start:1.5px;padding:0 4px;border:1px solid #ccc;line-height:28px;text-align:center;cursor:pointer;box-shadow:-1px -1px 1px #aaa inset;font-size:16px}.tsf-metaboxes #tsf-description-separator label.tsf-recommended,.tsf-metaboxes #tsf-title-separator label.tsf-recommended{border:1px solid #0cc34b;box-shadow:-1px -1px 1px #0cc34b inset}.tsf-metaboxes #tsf-description-separator input:hover+label,.tsf-metaboxes #tsf-description-separator label:hover,.tsf-metaboxes #tsf-title-separator input:hover+label,.tsf-metaboxes #tsf-title-separator label:hover{box-shadow:1px 1px 1px #aaa inset;background-color:#fff}.tsf-metaboxes #tsf-description-separator input:checked+label,.tsf-metaboxes #tsf-title-separator input:checked+label{box-shadow:1px 1px 1px #333 inset;background-color:#fff}.tsf-metaboxes #tsf-home-title-location,.tsf-metaboxes #tsf-title-location{display:block}.tsf-metaboxes #tsf-home-title-location label span,.tsf-metaboxes #tsf-title-location label span,.tsf-metaboxes #tsf-twitter-cards label span{display:inline-block;min-width:60px;vertical-align:baseline}.tsf-metaboxes #tsf-twitter-cards label span{min-width:150px}.tsf-metaboxes #tsf-home-title-location label .tsf-sep-js,.tsf-metaboxes #tsf-home-title-location label span.tsf-custom-blogname-js,.tsf-metaboxes #tsf-home-title-location label span.tsf-custom-tagline-js,.tsf-metaboxes #tsf-home-title-location label span.tsf-custom-title-js,.tsf-metaboxes #tsf-title-location label .tsf-sep-js{display:inline;min-width:0;white-space:pre}.tsf-metaboxes .tsf-nav-tab-wrapper,.tsf-metaboxes .tsf-tab-no-js{position:relative;clear:both;width:100%;display:inline-block;border-bottom:1px solid #ccc;line-height:inherit;padding:8px 12px 0;margin:-4px -12px}.tsf-metaboxes .tsf-nav-tab{float:left;border:1px solid #ccc;margin-left:.5em;margin-bottom:-1px;padding:5px 14px;font-size:12px;line-height:16px;background:#f1f1f1;color:#555;font-weight:600}.tsf-metaboxes .tsf-dashicons-tabs{font-size:initial;display:inline;vertical-align:text-bottom}.tsf-metaboxes .tsf-tabs-radio{display:none;width:0;height:0;position:absolute;left:-9001px}.tsf-metaboxes .tsf-active-tab,.tsf-metaboxes .tsf-tabs-radio:checked+label{background-color:inherit;border-bottom-color:#fff;color:#000}.tsf-metaboxes .tsf-tabs-content{margin:1.33em auto 0}.tsf-metaboxes .tsf-content-no-js{margin:1.33em auto}body.js .tsf-metaboxes .tsf-tabs-content{display:none}body.js .tsf-metaboxes .tsf-tabs-content.tsf-active-tab-content{display:block}#tsf-inpost-box .inside,.tsf-flex{box-sizing:border-box;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex:1 1 auto;flex:1 1 auto;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-flex-direction:column;flex-direction:column;-webkit-justify-content:flex-start;justify-content:flex-start}#tsf-inpost-box.closed .inside,body.js .tsf-flex-tab-content{display:none}#tsf-inpost-box .inside{margin:0;padding:0;-webkit-flex:1 0 100%;flex:1 0 100%;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.tsf-flex-inside-wrap{-webkit-flex-direction:row;flex-direction:row;-webkit-flex:1 1 auto;flex:1 1 auto}.tsf-flex-setting{width:100%;-webkit-flex-direction:row;flex-direction:row}.tsf-flex-setting-input,.tsf-flex-setting-label{background-color:#fff;padding:15px 12px;-webkit-flex:10 1 350px;flex:10 1 350px;box-shadow:0 0 0 1px #e9e9e9}.tsf-flex-setting-label{background-color:#f9f9f9;-webkit-flex:1 1 200px;flex:1 1 200px}.tsf-flex-setting-input{-webkit-justify-content:center;justify-content:center}.tsf-flex-setting-label-item{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex-direction:row;flex-direction:row;-webkit-justify-content:space-between;justify-content:space-between;-webkit-flex-grow:0;flex-grow:0}.tsf-flex-setting-label-inner-wrap{-webkit-justify-content:center;justify-content:center}.tsf-flex-setting-label-item>*{margin-right:4px}.tsf-flex-setting-label-item>:last-child{margin-right:0}.tsf-flex-setting-label .tsf-counter{font-weight:400;color:#666;margin-top:15px}.tsf-social-image-buttons{margin-top:15px;margin-left:1px}.tsf-flex-setting-input textarea{max-height:250px}input[type=radio].tsf-flex-nav-tab-radio{display:none;width:0;height:0;margin:0;padding:0;position:absolute;left:-9001px}.tsf-flex-nav-tab-wrapper{background-color:#fcfcfc;border-bottom:2px solid #dadada;-webkit-align-items:baseline;align-items:baseline;-webkit-flex-direction:row;flex-direction:row;-webkit-flex:1 1 100%;flex:1 1 100%;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;max-width:100%}.tsf-flex-nav-tab-inner{-webkit-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex:1 0 auto;flex:1 0 auto}.tsf-flex-nav-tab{-webkit-flex-direction:row;flex-direction:row;-webkit-flex:1 1 auto;flex:1 1 auto;max-width:125px}.tsf-flex-nav-tab-label{padding:12px;text-align:center;-webkit-flex-direction:row;flex-direction:row;box-shadow:0 0 0 0 transparent inset;-webkit-transition:box-shadow .15s ease-out;-o-transition:box-shadow .15s ease-out;transition:box-shadow .15s ease-out;-webkit-align-items:center;align-items:center;-webkit-align-content:space-between;align-content:space-between}.tsf-flex-nav-dashicon,.tsf-flex-nav-name{-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center}.tsf-flex-nav-tab .tsf-flex-nav-tab-radio:checked+.tsf-flex-nav-tab-label{box-shadow:0 -2px 0 0 #007bd2 inset;-webkit-transition:box-shadow .25s ease-in;-o-transition:box-shadow .25s ease-in;transition:box-shadow .25s ease-in}.tsf-flex-tab-content{-webkit-flex:1 0 100%;flex:1 0 100%;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}body.js .tsf-flex-tab-content.tsf-flex-tab-content-active{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.tsf-flex-tabs-content-no-js{background-color:#f3f3f3;border-bottom:1px solid #dadada;box-shadow:0 2px 0 0 #dadada inset}.tsf-flex-tab-no-js{-webkit-align-items:baseline;align-items:baseline;-webkit-flex-direction:row;flex-direction:row;flex:1 1 100%}.tsf-flex-tab-no-js .tsf-flex-nav-tab{padding:12px;min-width:125px;box-shadow:0 -2px 0 0 #007bd2 inset;-webkit-flex-direction:row;flex-direction:row;-webkit-flex:0 1 auto;flex:0 1 auto}.tsf-metaboxes .tsf-default-selected{border-color:#1c9d38}.tsf-metaboxes .tsf-default-selected:checked:before{color:#1c9d38}.tsf-metaboxes .tsf-warning-selected{border-color:#dd3811}.tsf-metaboxes .tsf-warning-selected:checked:before{color:#dd3811}.tsf-fields{font-size:13px;line-height:1.5;margin:1em 0}.tsf-fields .tsf-toblock{display:block;width:100%;margin-bottom:4px}.tsf-fields p.description{margin:7px 0 5px;color:#666}.tsf-option-spacer{margin:1em 0}.tsf-checkbox-wrapper{margin-top:15px}.tsf-checkbox-wrapper:first-child{margin-top:0}.tsf-counter .tsf-ajax{margin-left:3px}.tsf-ajax:before{display:inline-block;line-height:1;font-family:dashicons;font-style:normal;font-weight:400;font-size:1.225em;vertical-align:middle;content:""}.tsf-ajax.tsf-loading:before{content:"\f463";color:#007bd2;-webkit-animation:tsf-spin 1.5s linear infinite;-moz-animation:tsf-spin 1.5s linear infinite;-o-animation:tsf-spin 1.5s linear infinite;animation:tsf-spin 1.5s linear infinite}.tsf-ajax.tsf-error:before{content:"\f158";color:#dd3811}.tsf-ajax.tsf-success:before{content:"\f147";color:#0cc34b}a.tsf-set-social-image.button{margin-right:7px}#tsf-inpost-box input[type=text]::-webkit-input-placeholder,#tsf-inpost-box textarea::-webkit-input-placeholder,.tsf-metaboxes input[type=text]::-webkit-input-placeholder,.tsf-metaboxes textarea::-webkit-input-placeholder{-webkit-transition:color .33s ease-in,text-shadow .33s ease-in;-o-transition:color .33s ease-in,text-shadow .33s ease-in;transition:color .33s ease-in,text-shadow .33s ease-in}#tsf-inpost-box input[type=text]::-moz-placeholder,#tsf-inpost-box textarea::-moz-placeholder,.tsf-metaboxes input[type=text]::-moz-placeholder,.tsf-metaboxes textarea::-moz-placeholder{-moz-transition:color .33s ease-in,text-shadow .33s ease-in;transition:color .33s ease-in,text-shadow .33s ease-in}#tsf-inpost-box input[type=text]:-ms-input-placeholder,#tsf-inpost-box textarea:-ms-input-placeholder,.tsf-metaboxes input[type=text]:-ms-input-placeholder,.tsf-metaboxes textarea:-ms-input-placeholder{transition:color .33s ease-in,text-shadow .33s ease-in}#tsf-inpost-box input[type=text]:focus::-webkit-input-placeholder,#tsf-inpost-box textarea:focus::-webkit-input-placeholder,.tsf-metaboxes input[type=text]:focus::-webkit-input-placeholder,.tsf-metaboxes textarea:focus::-webkit-input-placeholder{color:transparent;text-shadow:0 0 1px rgba(114,119,124,.75)}#tsf-inpost-box input[type=text]:focus::-moz-placeholder,#tsf-inpost-box textarea:focus::-moz-placeholder,.tsf-metaboxe textarea:focus::-moz-placeholder,.tsf-metaboxes input[type=text]:focus::-moz-placeholder{color:transparent;text-shadow:0 0 1px rgba(114,119,124,.75)}#tsf-inpost-box input[type=text]:focus:-ms-input-placeholder,#tsf-inpost-box textarea:focus:-ms-input-placeholder,.tsf-metaboxes input[type=text]:focus:-ms-input-placeholder,.tsf-metaboxes textarea:focus:-ms-input-placeholder{color:transparent;text-shadow:0 0 1px rgba(114,119,124,.75)}@-webkit-keyframes tsf-spin{0%{-webkit-transform:rotate(0)}100%{-webkit-transform:rotate(360deg)}}@keyframes tsf-spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@media screen and (max-width:782px){.tsf-inpost-box p.tsf-fields,.tsf-metaboxes p.tsf-fields{line-height:2.8}.tsf-metaboxes #tsf-home-title-location label span,.tsf-metaboxes #tsf-title-location label span{min-width:40px}.wp-list-table .is-expanded td.tsf-seo-bar-wrap:not(.hidden){overflow:initial!important}}@media screen and (max-width:642px){.tsf-metaboxes span.tsf-nav-desktop{display:none}}@media screen and (max-width:510px){span.tsf-seo-bar.tsf-100{width:inherit}}@-moz-document url-prefix(){.tsf-metaboxes #tsf-description-separator label,.tsf-metaboxes #tsf-title-separator label{margin:3px 1px}@media only screen and (min-width:768px){.widefat tr td.column-title:nth-child(2):nth-last-child(n+6),.widefat tr td.title:nth-child(2):nth-last-child(n+6),.widefat tr th.column-title:nth-child(2):nth-last-child(n+6),.widefat tr th.title:nth-child(2):nth-last-child(n+6){min-width:1em;width:25%;max-width:100%;white-space:unset}}.tsf-metaboxes .tsf-default-selected{box-shadow:0 0 2px 0 #1c9d38}.tsf-metaboxes .tsf-warning-selected{box-shadow:0 0 2px 0 #dd3811}.tsf-metaboxes legend h4{margin:2px 0}}.tsf-flex-hide-if-no-js,body.js .tsf-flex-hide-if-js{display:none}body.js .tsf-flex-hide-if-no-js{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}
|
1 |
+
.tsf-notice{position:relative;clear:both}.tsf-notice.tsf-show-icon p:before{content:'';margin-right:12px;background:0 0;display:inline-block;font:400 14px/16px dashicons;speak:none;height:16px;text-align:center;vertical-align:middle;width:16px;line-height:14px;-webkit-font-smoothing:antialiased}.error.tsf-notice.tsf-show-icon p:before{color:#dd3811;content:"\f534"}.notice-warning.tsf-notice.tsf-show-icon p:before{color:#ffa01b;content:"\f227"}.updated.tsf-notice.tsf-show-icon p:before{color:#0cc34b;font-size:16px;content:"\f147"}a.tsf-dismiss{position:absolute;top:0;right:1px;border:none;margin:0;padding:9px;background:0 0;color:#b4b9be;cursor:pointer;text-decoration:none}a.tsf-dismiss:before{background:0 0;content:"\f153";display:block;font:400 16px/20px dashicons;speak:none;height:20px;text-align:center;width:20px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a.tsf-dismiss:hover{color:#c00}table.wp-list-table .column-name{width:15%}table.wp-list-table .column-icl_translations,table.wp-list-table .column-is_in_stock,table.wp-list-table .column-price,table.wp-list-table .column-sku,th.column-tsf-seo-bar-wrap~th{width:8%}.tsf-seo-bar a{text-decoration:none;font-size:13px}#tsf-title-wrap{position:relative;display:block;padding:0;height:auto;width:auto;overflow:hidden}#tsf-title-offset{visibility:hidden;height:0;display:inline-block;position:absolute;left:0;color:transparent;white-space:pre}#tsf-title-placeholder{position:absolute;color:#777;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;box-sizing:content-box;top:0;left:0;overflow:hidden;white-space:pre;text-overflow:ellipsis}.tsf-counter{font-weight:600;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}span.tsf-count-bad{color:#dd3811}span.tsf-count-okay{color:#ffa700}span.tsf-count-good{color:#0cc34b}span.tsf-counter-one{color:#fff;border-radius:4em;padding:0 .5em;min-width:2em;display:inline-block;text-align:center;vertical-align:baseline}span.tsf-counter-one.tsf-count-bad{background-color:#dd3811}span.tsf-counter-one.tsf-count-okay{background-color:#ffa700}span.tsf-counter-one.tsf-count-good{background-color:#0cc34b}#tsf-seo-bar-wrap{width:18%}th:last-of-type#tsf-seo-bar-wrap{width:160px}span.tsf-seo-bar{display:block;width:95%;max-width:220px;border-radius:0;padding:3px;text-shadow:0 0 3px rgba(0,0,0,.3)}span.tsf-seo-bar.tsf-100{width:100%}span.tsf-seo-bar-inner-wrap{display:table;width:100%;border-radius:0;margin:0 auto;border-collapse:separate;border-spacing:0;vertical-align:middle;position:relative}span.tsf-seo-bar-section-wrap{display:table-cell;border-collapse:collapse}.tsf-seo-bar-inner-wrap a{display:table;width:100%;color:#fff;text-align:center;cursor:help;height:100%;min-width:12px;vertical-align:top;line-height:1.625em;box-shadow:2px 0 0 -1px rgba(0,0,0,.1) inset,-2px 0 0 -1px rgba(0,0,0,.1) inset}span.tsf-seo-bar.pill,span.tsf-seo-bar.pill span.tsf-seo-bar-inner-wrap{border-radius:30px}span.tsf-seo-bar.pill span.tsf-seo-bar-inner-wrap a{box-shadow:2px 6px 3px -2px rgba(255,255,255,.2) inset,-2px -6px 3px -2px rgba(41,41,41,.2) inset,0 0 1px rgba(41,41,41,.6)}.tsf-seo-bar.pill .tsf-seo-bar-inner-wrap span.tsf-seo-bar-section-wrap:first-of-type,.tsf-seo-bar.pill .tsf-seo-bar-inner-wrap span.tsf-seo-bar-section-wrap:first-of-type a{border-top-left-radius:30px;border-bottom-left-radius:30px}.tsf-seo-bar.pill .tsf-seo-bar-inner-wrap span.tsf-seo-bar-section-wrap:last-of-type,.tsf-seo-bar.pill .tsf-seo-bar-inner-wrap span.tsf-seo-bar-section-wrap:last-of-type a{border-top-right-radius:30px;border-bottom-right-radius:30px}.tsf-100{width:100%}.tsf-60{width:60%}.tsf-50{width:50%}.tsf-40{width:40%}.tsf-33{width:33.333%}.tsf-25{width:25%}.tsf-20{width:20%}.tsf-16{width:16.666%}.tsf-12-5{width:12.5%}.tsf-11{width:11.333%}.tsf-10{width:10%}.tsf-seo-bar-bad{background-color:#dd3811}.tsf-seo-bar-okay{background-color:#ffa700}.tsf-seo-bar-good{background-color:#0cc34b}.tsf-seo-bar-unknown{background-color:#007bd2}span.tsf-seo-bar .tsf-explanation-desc{position:absolute;width:auto;min-width:90%;max-width:220px;font-weight:600;background:#007bd2;padding:8px 12px;color:#fdfdfd;border-radius:0;z-index:900142;box-shadow:0 0 2px rgba(0,0,0,.6);left:0;right:0;text-align:left;pointer-events:none}span.tsf-seo-bar .tsf-explanation-desc span{text-decoration:underline}span.tsf-seo-bar .tsf-explanation-desc div{width:0;height:0;border-left:12px solid transparent;border-right:12px solid transparent;border-top:12px solid #007bd2;position:absolute;bottom:-8px;z-index:9999999;left:0}.tsf-seo-bar-wrap.column-tsf-seo-bar-temp{overflow:initial!important;min-width:160px}#col-container,#col-right{overflow:initial}.tsf-metaboxes{box-sizing:border-box;max-width:690px;padding-bottom:20px}.tsf-metaboxes .tsf-top-wrap{width:100%;display:inline-block;vertical-align:top}.tsf-metaboxes .tsf-top-wrap>h1,.tsf-metaboxes .tsf-top-wrap>h2{float:left}.tsf-metaboxes .metabox-holder{clear:both}.tsf-metaboxes .tsf-top-buttons{float:right}.tsf-metaboxes .tsf-bottom-buttons{text-align:right}.tsf-metaboxes .tsf-bottom-buttons input,.tsf-metaboxes .tsf-top-buttons input{margin-left:10px}.tsf-metaboxes #tsf-description-separator,.tsf-metaboxes #tsf-title-separator{display:table;width:100%;border-collapse:collapse;border-spacing:0}.tsf-metaboxes #tsf-description-separator input,.tsf-metaboxes #tsf-title-separator input{display:none;float:left;width:0;min-width:0;opacity:0}.tsf-metaboxes #tsf-description-separator label,.tsf-metaboxes #tsf-title-separator label{display:inline-block;width:auto;min-width:28px;min-height:28px;margin:3px;-moz-margin-end:1.5px;-moz-margin-start:1.5px;padding:0 4px;border:1px solid #ccc;line-height:28px;text-align:center;cursor:pointer;box-shadow:-1px -1px 1px #aaa inset;font-size:16px}.tsf-metaboxes #tsf-description-separator label.tsf-recommended,.tsf-metaboxes #tsf-title-separator label.tsf-recommended{border:1px solid #0cc34b;box-shadow:-1px -1px 1px #0cc34b inset}.tsf-metaboxes #tsf-description-separator input:hover+label,.tsf-metaboxes #tsf-description-separator label:hover,.tsf-metaboxes #tsf-title-separator input:hover+label,.tsf-metaboxes #tsf-title-separator label:hover{box-shadow:1px 1px 1px #aaa inset;background-color:#fff}.tsf-metaboxes #tsf-description-separator input:checked+label,.tsf-metaboxes #tsf-title-separator input:checked+label{box-shadow:1px 1px 1px #333 inset;background-color:#fff}.tsf-metaboxes #tsf-home-title-location,.tsf-metaboxes #tsf-title-location{display:block}.tsf-metaboxes #tsf-home-title-location label span,.tsf-metaboxes #tsf-title-location label span,.tsf-metaboxes #tsf-twitter-cards label span{display:inline-block;min-width:60px;vertical-align:baseline}.tsf-metaboxes #tsf-twitter-cards label span{min-width:150px}.tsf-metaboxes #tsf-home-title-location label .tsf-sep-js,.tsf-metaboxes #tsf-home-title-location label span.tsf-custom-blogname-js,.tsf-metaboxes #tsf-home-title-location label span.tsf-custom-tagline-js,.tsf-metaboxes #tsf-home-title-location label span.tsf-custom-title-js,.tsf-metaboxes #tsf-title-location label .tsf-sep-js{display:inline;min-width:0;white-space:pre}.tsf-metaboxes .tsf-nav-tab-wrapper,.tsf-metaboxes .tsf-tab-no-js{position:relative;clear:both;width:100%;display:inline-block;border-bottom:1px solid #ccc;line-height:inherit;padding:8px 12px 0;margin:-4px -12px}.tsf-metaboxes .tsf-nav-tab{float:left;border:1px solid #ccc;margin-left:.5em;margin-bottom:-1px;padding:5px 14px;font-size:12px;line-height:16px;background:#f1f1f1;color:#555;font-weight:600}.tsf-metaboxes .tsf-dashicons-tabs{font-size:initial;display:inline;vertical-align:text-bottom}.tsf-metaboxes .tsf-tabs-radio{display:none;width:0;height:0;position:absolute;left:-9001px}.tsf-metaboxes .tsf-active-tab,.tsf-metaboxes .tsf-tabs-radio:checked+label{background-color:inherit;border-bottom-color:#fff;color:#000}.tsf-metaboxes .tsf-tabs-content{margin:1.33em auto 0}.tsf-metaboxes .tsf-content-no-js{margin:1.33em auto}body.js .tsf-metaboxes .tsf-tabs-content{display:none}body.js .tsf-metaboxes .tsf-tabs-content.tsf-active-tab-content{display:block}#tsf-inpost-box .inside,.tsf-flex{box-sizing:border-box;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex:1 1 auto;flex:1 1 auto;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-flex-direction:column;flex-direction:column;-webkit-justify-content:flex-start;justify-content:flex-start}#tsf-inpost-box.closed .inside,body.js .tsf-flex-tab-content{display:none}#tsf-inpost-box .inside{margin:0;padding:0;-webkit-flex:1 0 100%;flex:1 0 100%;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.tsf-flex-inside-wrap{-webkit-flex-direction:row;flex-direction:row;-webkit-flex:1 1 auto;flex:1 1 auto}.tsf-flex-setting{width:100%;-webkit-flex-direction:row;flex-direction:row}.tsf-flex-setting-input,.tsf-flex-setting-label{background-color:#fff;padding:15px 12px;-webkit-flex:10 1 350px;flex:10 1 350px;box-shadow:0 0 0 1px #e9e9e9}.tsf-flex-setting-label{background-color:#f9f9f9;-webkit-flex:1 1 200px;flex:1 1 200px}.tsf-flex-setting-input{-webkit-justify-content:center;justify-content:center}.tsf-flex-setting-label-item{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex-direction:row;flex-direction:row;-webkit-justify-content:space-between;justify-content:space-between;-webkit-flex-grow:0;flex-grow:0}.tsf-flex-setting-label-inner-wrap{-webkit-justify-content:center;justify-content:center}.tsf-flex-setting-label-item>*{margin-right:4px}.tsf-flex-setting-label-item>:last-child{margin-right:0}.tsf-flex-setting-label .tsf-counter{font-weight:400;color:#666;margin-top:15px}.tsf-social-image-buttons{margin-top:15px;margin-left:1px}.tsf-flex-setting-input textarea{max-height:250px}input[type=radio].tsf-flex-nav-tab-radio{display:none;width:0;height:0;margin:0;padding:0;position:absolute;left:-9001px}.tsf-flex-nav-tab-wrapper{background-color:#fcfcfc;border-bottom:2px solid #dadada;-webkit-align-items:baseline;align-items:baseline;-webkit-flex-direction:row;flex-direction:row;-webkit-flex:1 1 100%;flex:1 1 100%;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;max-width:100%}.tsf-flex-nav-tab-inner{-webkit-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex:1 0 auto;flex:1 0 auto}.tsf-flex-nav-tab{-webkit-flex-direction:row;flex-direction:row;-webkit-flex:1 1 auto;flex:1 1 auto;max-width:125px}.tsf-flex-nav-tab-label{padding:12px;text-align:center;-webkit-flex-direction:row;flex-direction:row;box-shadow:0 0 0 0 transparent inset;-webkit-transition:box-shadow .15s ease-out;-o-transition:box-shadow .15s ease-out;transition:box-shadow .15s ease-out;-webkit-align-items:center;align-items:center;-webkit-align-content:space-between;align-content:space-between}.tsf-flex-nav-dashicon,.tsf-flex-nav-name{-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center}.tsf-flex-nav-tab .tsf-flex-nav-tab-radio:checked+.tsf-flex-nav-tab-label{box-shadow:0 -2px 0 0 #007bd2 inset;-webkit-transition:box-shadow .25s ease-in;-o-transition:box-shadow .25s ease-in;transition:box-shadow .25s ease-in}.tsf-flex-tab-content{-webkit-flex:1 0 100%;flex:1 0 100%;max-width:100%;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}body.js .tsf-flex-tab-content.tsf-flex-tab-content-active{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.tsf-flex-tabs-content-no-js{background-color:#f3f3f3;border-bottom:1px solid #dadada;box-shadow:0 2px 0 0 #dadada inset}.tsf-flex-tab-no-js{-webkit-align-items:baseline;align-items:baseline;-webkit-flex-direction:row;flex-direction:row;flex:1 1 100%}.tsf-flex-tab-no-js .tsf-flex-nav-tab{padding:12px;min-width:125px;box-shadow:0 -2px 0 0 #007bd2 inset;-webkit-flex-direction:row;flex-direction:row;-webkit-flex:0 1 auto;flex:0 1 auto}.tsf-metaboxes .tsf-default-selected{border-color:#1c9d38}.tsf-metaboxes .tsf-default-selected:checked:before{color:#1c9d38}.tsf-metaboxes .tsf-warning-selected{border-color:#dd3811}.tsf-metaboxes .tsf-warning-selected:checked:before{color:#dd3811}.tsf-fields{font-size:13px;line-height:1.5;margin:1em 0}.tsf-fields .tsf-toblock{display:block;width:100%;margin-bottom:4px}.tsf-fields p.description{margin:7px 0 5px;color:#666}.tsf-option-spacer{margin:1em 0}.tsf-checkbox-wrapper{margin-top:15px}.tsf-checkbox-wrapper:first-child{margin-top:0}.tsf-counter .tsf-ajax{margin-left:3px}.tsf-ajax:before{display:inline-block;line-height:1;font-family:dashicons;font-style:normal;font-weight:400;font-size:1.225em;vertical-align:middle;content:""}.tsf-ajax.tsf-loading:before{content:"\f463";color:#007bd2;-webkit-animation:tsf-spin 1.5s linear infinite;-moz-animation:tsf-spin 1.5s linear infinite;-o-animation:tsf-spin 1.5s linear infinite;animation:tsf-spin 1.5s linear infinite}.tsf-ajax.tsf-error:before{content:"\f158";color:#dd3811}.tsf-ajax.tsf-success:before{content:"\f147";color:#0cc34b}a.tsf-set-social-image.button{margin-right:7px}#tsf-inpost-box input[type=text]::-webkit-input-placeholder,#tsf-inpost-box textarea::-webkit-input-placeholder,.tsf-metaboxes input[type=text]::-webkit-input-placeholder,.tsf-metaboxes textarea::-webkit-input-placeholder{-webkit-transition:color .33s ease-in,text-shadow .33s ease-in;-o-transition:color .33s ease-in,text-shadow .33s ease-in;transition:color .33s ease-in,text-shadow .33s ease-in}#tsf-inpost-box input[type=text]::-moz-placeholder,#tsf-inpost-box textarea::-moz-placeholder,.tsf-metaboxes input[type=text]::-moz-placeholder,.tsf-metaboxes textarea::-moz-placeholder{-moz-transition:color .33s ease-in,text-shadow .33s ease-in;transition:color .33s ease-in,text-shadow .33s ease-in}#tsf-inpost-box input[type=text]:-ms-input-placeholder,#tsf-inpost-box textarea:-ms-input-placeholder,.tsf-metaboxes input[type=text]:-ms-input-placeholder,.tsf-metaboxes textarea:-ms-input-placeholder{transition:color .33s ease-in,text-shadow .33s ease-in}#tsf-inpost-box input[type=text]:focus::-webkit-input-placeholder,#tsf-inpost-box textarea:focus::-webkit-input-placeholder,.tsf-metaboxes input[type=text]:focus::-webkit-input-placeholder,.tsf-metaboxes textarea:focus::-webkit-input-placeholder{color:transparent;text-shadow:0 0 1px rgba(114,119,124,.75)}#tsf-inpost-box input[type=text]:focus::-moz-placeholder,#tsf-inpost-box textarea:focus::-moz-placeholder,.tsf-metaboxe textarea:focus::-moz-placeholder,.tsf-metaboxes input[type=text]:focus::-moz-placeholder{color:transparent;text-shadow:0 0 1px rgba(114,119,124,.75)}#tsf-inpost-box input[type=text]:focus:-ms-input-placeholder,#tsf-inpost-box textarea:focus:-ms-input-placeholder,.tsf-metaboxes input[type=text]:focus:-ms-input-placeholder,.tsf-metaboxes textarea:focus:-ms-input-placeholder{color:transparent;text-shadow:0 0 1px rgba(114,119,124,.75)}@-webkit-keyframes tsf-spin{0%{-webkit-transform:rotate(0)}100%{-webkit-transform:rotate(360deg)}}@keyframes tsf-spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@media screen and (max-width:782px){.tsf-inpost-box p.tsf-fields,.tsf-metaboxes p.tsf-fields{line-height:2.8}.tsf-metaboxes #tsf-home-title-location label span,.tsf-metaboxes #tsf-title-location label span{min-width:40px}.wp-list-table .is-expanded td.tsf-seo-bar-wrap:not(.hidden){overflow:initial!important}}@media screen and (max-width:642px){.tsf-metaboxes span.tsf-nav-desktop{display:none}}@media screen and (max-width:510px){span.tsf-seo-bar.tsf-100{width:inherit}}@-moz-document url-prefix(){.tsf-metaboxes #tsf-description-separator label,.tsf-metaboxes #tsf-title-separator label{margin:3px 1px}@media only screen and (min-width:768px){.widefat tr td.column-title:nth-child(2):nth-last-child(n+6),.widefat tr td.title:nth-child(2):nth-last-child(n+6),.widefat tr th.column-title:nth-child(2):nth-last-child(n+6),.widefat tr th.title:nth-child(2):nth-last-child(n+6){min-width:1em;width:25%;max-width:100%;white-space:unset}}.tsf-metaboxes .tsf-default-selected{box-shadow:0 0 2px 0 #1c9d38}.tsf-metaboxes .tsf-warning-selected{box-shadow:0 0 2px 0 #dd3811}.tsf-metaboxes legend h4{margin:2px 0}}.tsf-flex-hide-if-no-js,body.js .tsf-flex-hide-if-js{display:none}body.js .tsf-flex-hide-if-no-js{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}
|
lib/js/tsf.externs.js
CHANGED
@@ -8,7 +8,7 @@
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework - Extension Manager plugin
|
11 |
-
* Copyright (C)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework - Extension Manager plugin
|
11 |
+
* Copyright (C) 2017 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
lib/js/tsf.externs.protected.js
CHANGED
@@ -8,7 +8,7 @@
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework - Extension Manager plugin
|
11 |
-
* Copyright (C)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework - Extension Manager plugin
|
11 |
+
* Copyright (C) 2017 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
lib/js/tsf.js
CHANGED
@@ -8,7 +8,7 @@
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -1468,6 +1468,7 @@ window.tsf = {
|
|
1468 |
async: true,
|
1469 |
success: function( response ) {
|
1470 |
|
|
|
1471 |
response = jQuery.parseJSON( response );
|
1472 |
|
1473 |
//* I could do value check, but that will simply lag behind. Unless an annoying execution delay is added.
|
@@ -1693,47 +1694,53 @@ window.tsf = {
|
|
1693 |
],
|
1694 |
} );
|
1695 |
|
1696 |
-
|
1697 |
-
|
1698 |
-
|
1699 |
-
|
1700 |
-
frame.on( '
|
1701 |
-
|
1702 |
-
// converted to var in compiler.
|
1703 |
-
let url = croppedImage.url,
|
1704 |
-
attachmentId = croppedImage.id,
|
1705 |
-
w = croppedImage.width,
|
1706 |
-
h = croppedImage.height;
|
1707 |
-
|
1708 |
-
// Send the attachment id to our hidden input. URL to explicit output.
|
1709 |
-
jQuery( '#' + inputID + '-url' ).val( url );
|
1710 |
-
jQuery( '#' + inputID + '-id' ).val( attachmentId );
|
1711 |
-
} );
|
1712 |
-
|
1713 |
-
frame.on( 'skippedcrop', function( selection ) {
|
1714 |
|
1715 |
-
|
1716 |
-
|
1717 |
-
|
1718 |
-
|
1719 |
-
|
1720 |
-
|
1721 |
-
|
1722 |
-
|
1723 |
-
|
1724 |
-
|
|
|
|
|
|
|
1725 |
|
1726 |
-
|
1727 |
-
|
1728 |
-
|
1729 |
-
|
1730 |
-
|
1731 |
-
|
1732 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1733 |
|
1734 |
-
|
1735 |
-
|
1736 |
-
|
|
|
|
|
1737 |
|
1738 |
frame.open();
|
1739 |
},
|
@@ -2012,6 +2019,7 @@ window.tsf = {
|
|
2012 |
resetImageEditorActions: function() {
|
2013 |
'use strict';
|
2014 |
|
|
|
2015 |
jQuery( '.tsf-remove-social-image' ).on( 'click', tsf.removeEditorImage );
|
2016 |
},
|
2017 |
|
@@ -2026,6 +2034,8 @@ window.tsf = {
|
|
2026 |
setupImageEditorActions: function() {
|
2027 |
'use strict';
|
2028 |
|
|
|
|
|
2029 |
jQuery( '.tsf-set-social-image' ).on( 'click', tsf.openImageEditor );
|
2030 |
jQuery( '.tsf-remove-social-image' ).on( 'click', tsf.removeEditorImage );
|
2031 |
},
|
@@ -2216,9 +2226,7 @@ window.tsf = {
|
|
2216 |
clearTimeout( resizeTimeout );
|
2217 |
|
2218 |
// Onload delays are 0, after than it's 10, 20 and 30 respectively.
|
2219 |
-
let _delay = 0
|
2220 |
-
__delay = 0,
|
2221 |
-
___delay = 0;
|
2222 |
|
2223 |
resizeTimeout = setTimeout( function() {
|
2224 |
if ( $tabWrapper.length ) {
|
@@ -2263,20 +2271,18 @@ window.tsf = {
|
|
2263 |
$navName.fadeIn( 250 );
|
2264 |
$lastWidth.tabWrapper.shown = 1;
|
2265 |
}
|
2266 |
-
},
|
2267 |
|
2268 |
// Wait for an additional 10 ms for slow browsers.
|
2269 |
setTimeout( function() {
|
2270 |
$lastWidth.tabWrapper.outer = outerWrapWidth;
|
2271 |
$lastWidth.tabWrapper.inner = innerWrapWidth;
|
2272 |
-
},
|
2273 |
}
|
2274 |
}, timeOut );
|
2275 |
|
2276 |
// Update future timeouts.
|
2277 |
_delay = 10;
|
2278 |
-
__delay = 20;
|
2279 |
-
___delay = 30;
|
2280 |
timeOut = 75;
|
2281 |
} );
|
2282 |
|
@@ -2293,6 +2299,8 @@ window.tsf = {
|
|
2293 |
* @return {(undefined|null)}
|
2294 |
*/
|
2295 |
_setResizeListeners: function() {
|
|
|
|
|
2296 |
jQuery( window ).on( 'resize orientationchange', tsf._triggerResize );
|
2297 |
jQuery( '#collapse-menu' ).click( tsf._triggerResize );
|
2298 |
jQuery( '.columns-prefs :input[type=radio]' ).change( tsf._triggerResize );
|
@@ -2308,6 +2316,8 @@ window.tsf = {
|
|
2308 |
* @return {(undefined|null)}
|
2309 |
*/
|
2310 |
_triggerResize: function() {
|
|
|
|
|
2311 |
jQuery( window ).trigger( 'tsf-flex-resize' );
|
2312 |
},
|
2313 |
|
@@ -2424,7 +2434,6 @@ window.tsf = {
|
|
2424 |
|
2425 |
// AJAX counter
|
2426 |
jQ( '.tsf-counter' ).on( 'click', tsf.counterUpdate );
|
2427 |
-
|
2428 |
}
|
2429 |
};
|
2430 |
jQuery( tsf.ready );
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2017 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
1468 |
async: true,
|
1469 |
success: function( response ) {
|
1470 |
|
1471 |
+
// TODO convert to json header and/or test for availability of response.type before parsing?
|
1472 |
response = jQuery.parseJSON( response );
|
1473 |
|
1474 |
//* I could do value check, but that will simply lag behind. Unless an annoying execution delay is added.
|
1694 |
],
|
1695 |
} );
|
1696 |
|
1697 |
+
let selectFunc = (function() {
|
1698 |
+
frame.setState( 'cropper' );
|
1699 |
+
} );
|
1700 |
+
frame.off( 'select', selectFunc );
|
1701 |
+
frame.on( 'select', selectFunc );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1702 |
|
1703 |
+
let croppedFunc = (function( croppedImage ) {
|
1704 |
+
// converted to var in compiler.
|
1705 |
+
let url = croppedImage.url,
|
1706 |
+
attachmentId = croppedImage.id,
|
1707 |
+
w = croppedImage.width,
|
1708 |
+
h = croppedImage.height;
|
1709 |
+
|
1710 |
+
// Send the attachment id to our hidden input. URL to explicit output.
|
1711 |
+
jQuery( '#' + inputID + '-url' ).val( url );
|
1712 |
+
jQuery( '#' + inputID + '-id' ).val( attachmentId );
|
1713 |
+
} );
|
1714 |
+
frame.off( 'cropped', croppedFunc );
|
1715 |
+
frame.on( 'cropped', croppedFunc );
|
1716 |
|
1717 |
+
let skippedcropFunc = (function( selection ) {
|
1718 |
+
// converted to var in compiler.
|
1719 |
+
let url = selection.get( 'url' ),
|
1720 |
+
attachmentId = selection.get( 'id' ),
|
1721 |
+
w = selection.get( 'width' ),
|
1722 |
+
h = selection.get( 'height' );
|
1723 |
+
|
1724 |
+
// Send the attachment id to our hidden input. URL to explicit output.
|
1725 |
+
jQuery( '#' + inputID + '-url' ).val( url );
|
1726 |
+
jQuery( '#' + inputID + '-id' ).val( attachmentId );
|
1727 |
+
} );
|
1728 |
+
frame.off( 'skippedcrop', skippedcropFunc );
|
1729 |
+
frame.on( 'skippedcrop', skippedcropFunc );
|
1730 |
+
|
1731 |
+
let doneFunc = (function( imageSelection ) {
|
1732 |
+
jQuery( '#' + inputID + '-select' ).text( tsf.other[ inputID ]['change'] );
|
1733 |
+
jQuery( '#' + inputID + '-url' ).prop( 'readonly', true ).css( 'opacity', 0 ).animate(
|
1734 |
+
{ 'opacity' : 1 },
|
1735 |
+
{ 'queue' : true, 'duration' : 1000 },
|
1736 |
+
'swing'
|
1737 |
+
);
|
1738 |
|
1739 |
+
tsf.appendRemoveButton( $target, inputID, true );
|
1740 |
+
tsf.registerChange();
|
1741 |
+
} );
|
1742 |
+
frame.off( 'skippedcrop cropped', doneFunc );
|
1743 |
+
frame.on( 'skippedcrop cropped', doneFunc );
|
1744 |
|
1745 |
frame.open();
|
1746 |
},
|
2019 |
resetImageEditorActions: function() {
|
2020 |
'use strict';
|
2021 |
|
2022 |
+
jQuery( '.tsf-remove-social-image' ).off( 'click', tsf.removeEditorImage );
|
2023 |
jQuery( '.tsf-remove-social-image' ).on( 'click', tsf.removeEditorImage );
|
2024 |
},
|
2025 |
|
2034 |
setupImageEditorActions: function() {
|
2035 |
'use strict';
|
2036 |
|
2037 |
+
jQuery( '.tsf-set-social-image' ).off( 'click', tsf.openImageEditor );
|
2038 |
+
jQuery( '.tsf-remove-social-image' ).off( 'click', tsf.removeEditorImage );
|
2039 |
jQuery( '.tsf-set-social-image' ).on( 'click', tsf.openImageEditor );
|
2040 |
jQuery( '.tsf-remove-social-image' ).on( 'click', tsf.removeEditorImage );
|
2041 |
},
|
2226 |
clearTimeout( resizeTimeout );
|
2227 |
|
2228 |
// Onload delays are 0, after than it's 10, 20 and 30 respectively.
|
2229 |
+
let _delay = 0;
|
|
|
|
|
2230 |
|
2231 |
resizeTimeout = setTimeout( function() {
|
2232 |
if ( $tabWrapper.length ) {
|
2271 |
$navName.fadeIn( 250 );
|
2272 |
$lastWidth.tabWrapper.shown = 1;
|
2273 |
}
|
2274 |
+
}, _delay * 2 );
|
2275 |
|
2276 |
// Wait for an additional 10 ms for slow browsers.
|
2277 |
setTimeout( function() {
|
2278 |
$lastWidth.tabWrapper.outer = outerWrapWidth;
|
2279 |
$lastWidth.tabWrapper.inner = innerWrapWidth;
|
2280 |
+
}, _delay * 3 );
|
2281 |
}
|
2282 |
}, timeOut );
|
2283 |
|
2284 |
// Update future timeouts.
|
2285 |
_delay = 10;
|
|
|
|
|
2286 |
timeOut = 75;
|
2287 |
} );
|
2288 |
|
2299 |
* @return {(undefined|null)}
|
2300 |
*/
|
2301 |
_setResizeListeners: function() {
|
2302 |
+
'use strict';
|
2303 |
+
|
2304 |
jQuery( window ).on( 'resize orientationchange', tsf._triggerResize );
|
2305 |
jQuery( '#collapse-menu' ).click( tsf._triggerResize );
|
2306 |
jQuery( '.columns-prefs :input[type=radio]' ).change( tsf._triggerResize );
|
2316 |
* @return {(undefined|null)}
|
2317 |
*/
|
2318 |
_triggerResize: function() {
|
2319 |
+
'use strict';
|
2320 |
+
|
2321 |
jQuery( window ).trigger( 'tsf-flex-resize' );
|
2322 |
},
|
2323 |
|
2434 |
|
2435 |
// AJAX counter
|
2436 |
jQ( '.tsf-counter' ).on( 'click', tsf.counterUpdate );
|
|
|
2437 |
}
|
2438 |
};
|
2439 |
jQuery( tsf.ready );
|
lib/js/tsf.min.js
CHANGED
@@ -1,37 +1,37 @@
|
|
1 |
-
window.tsf={nonce:tsfL10n.nonce,nonces:tsfL10n.nonces,i18n:tsfL10n.i18n,states:tsfL10n.states,params:tsfL10n.params,other:tsfL10n.other,g:!1,m:!1,
|
2 |
-
|
3 |
-
tsf.params.blogDescription.length,e=tsf.params.siteTitle.length,f=b.val().length,
|
4 |
-
f=tsf.i("good"));b&&(d+=" "+b);
|
5 |
jQuery(".tsf-seo-bar-inner-wrap").find("a");a.on("mouseenter",tsf.pa);a.on("mousemove",tsf.ra);a.on("mouseleave",tsf.qa)},pa:function(a){a=jQuery(a.target);var b=a.data("desc");void 0!==b&&0===a.find("div").length&&(a.append('<div class="tsf-explanation-desc">'+b+"<div></div></div>"),b=a.find("div.tsf-explanation-desc").height()+28,a.find("div.tsf-explanation-desc").css("top",a.position().top-b+"px"))},ra:function(a){var b=jQuery(a.target);a=a.pageX;var c=a-b.closest(".tsf-seo-bar-inner-wrap").offset().left-
|
6 |
11,d=b.find(".tsf-explanation-desc"),b=d.find("div");if(1>c)b.css("left","0px");else if(void 0!==d.offset()){var e=d.width(),d=d.offset().left+e+11;a>d?b.css("left",e+"px"):b.css("left",c+"px")}},qa:function(a){jQuery(a.target).find("div.tsf-explanation-desc").remove()},fa:function(){var a=jQuery(document.body.target),b=jQuery(".tsf-seo-bar-inner-wrap a");a.closest(b).length||b.find("div.tsf-explanation-desc").remove()},sa:function(a){a=jQuery(a.target);if(a.is(":checked")){var b=a.prop("id");a=a.prop("name");
|
7 |
-
if("undefined"!==typeof a){var c=jQuery("#"+b+"-content"),d=jQuery(".tsf-active-tab-content");c.is(d)||"undefined"===typeof c||(jQuery("."+a+"-content").fadeOut(150,function(){jQuery(this).removeClass("tsf-active-tab-content")}),setTimeout(function(){c.addClass("tsf-active-tab-content").fadeIn(250)},150),setTimeout(function(){jQuery("#"+b).trigger("tsf-tab-toggled")},175))}}},
|
8 |
jQuery("#"+b+"-content"),d=jQuery(".tsf-flex-tab-content-active");c.is(d)||"undefined"===typeof c||(jQuery("."+a+"-content").fadeOut(150,function(){jQuery(this).removeClass("tsf-flex-tab-content-active")}),setTimeout(function(){c.addClass("tsf-flex-tab-content-active").fadeIn(250)},150),setTimeout(function(){jQuery("#"+b).trigger("tsf-flex-tab-toggled")},175))}}},ma:function(){if(tsf.c&&tsf.states.isSettingsPage){var a=jQuery(".tsf-nav-tab-wrapper .tsf-tab:nth-of-type(n+2) input:checked");a.length&&
|
9 |
a.each(function(){var a=jQuery(this),c=a.prop("id"),a=a.prop("name");if("undefined"!==typeof a){var d=jQuery("#"+c+"-content");"undefined"!==typeof d&&(jQuery("."+a+"-content").removeClass("tsf-active-tab-content"),d.addClass("tsf-active-tab-content"),setTimeout(function(){jQuery("#"+c).trigger("tsf-tab-toggled")},20))}})}},wa:function(a){a=jQuery(a.target);var b=jQuery(".tsf-custom-blogname-js");a.is(":checked")?(b.css("display","inline"),tsf.m=!0):(b.css("display","none"),tsf.m=!1);tsf.h().trigger("keyup",
|
10 |
-
tsf.
|
11 |
-
"none"):b.css("display","inline")},
|
12 |
-
|
13 |
-
c=jQuery("#autodescription-site-settings\\[homepage_title\\]"),d=jQuery("#tsf-home-title-location input:checked").val(),e=jQuery("#autodescription-site-settings\\[homepage_tagline\\]"),f=tsf.params.siteTitle,
|
14 |
-
tsf.
|
15 |
jQuery(".tsf-metaboxes input[type=text], .tsf-metaboxes textarea, #tsf-inpost-box .inside input[type=text], #tsf-inpost-box .inside textarea").not(".tsf-nav-tab-wrapper input, .tsf-flex-nav-tab-wrapper input").on("input",function(){tsf.j()}),window.onbeforeunload=function(){if(tsf.g)return tsf.i18n.saveAlert},jQuery('.tsf-metaboxes input[type="submit"], #publishing-action input[type="submit"], #save-action input[type="submit"], a.submitdelete').click(function(){window.onbeforeunload=null}))},j:function(){tsf.g=
|
16 |
-
!0},
|
17 |
-
d&&(b=!0));d=jQuery("#tsf-title-tagline-toggle :input");if("undefined"!==typeof d&&0<d.length&&!d.is(":checked"))jQuery(a.target).css("text-indent","initial"),c.css("display","none");else{a=jQuery(a.target);var f=a.val(),
|
18 |
-
0===g.length&&(g=tsf.params.blogDescription);b?(e=" "+p+" "+tsf.params.titleAdditions,"undefined"!==typeof g&&0<g.length&&(e=" "+p+" "+g),a.css("text-indent","initial")):(e=tsf.params.titleAdditions+" "+p+" ","undefined"!==typeof g&&0<g.length&&(e=g+" "+p+" "));
|
19 |
-
paddingTop:
|
20 |
-
Ba:function(){tsf.c&&tsf.
|
21 |
-
|
22 |
-
b=tsf.g;1==a?(tsf.f="tsf-counter-one",tsf.a=1):2==a?(tsf.f="tsf-counter-two",tsf.a=2):3==a?(tsf.f="tsf-counter-three",tsf.a=3):(tsf.f="tsf-counter-zero",tsf.a=0);tsf.Da();tsf.g=b}},Da:function(){tsf.Ca();tsf.Ba()},i:function(a){return tsf.i18n[a]},
|
23 |
-
"undefined"===typeof wp.media)a.preventDefault(),a.stopPropagation();else{var b=jQuery(a.target),c=b.data("inputid")
|
24 |
-
|
25 |
-
tsf.j()})
|
26 |
-
|
27 |
-
d=tsf.cropper.control;if(d.params.flex_width&&d.params.flex_height)if(b.width===b.height)b.width>d.params.flex_width&&(b.dst_width=b.dst_height=d.params.flex_width);else if(b.width>d.params.flex_width||b.height>d.params.flex_height)if(b.width>b.height){var e=b.width/d.params.flex_width;b.dst_width=d.params.flex_width;b.dst_height=Math.round(b.height/e)}else e=b.height/d.params.flex_height,
|
28 |
-
0,b.dst_height=0);return wp.ajax.post("tsf-crop-image",{nonce:tsf.nonces.upload_files,id:a.get("id"),context:"tsf-image",cropDetails:b})}});a.prototype.control={};a.control={params:{flex_width:1500,flex_height:1500,width:1200,height:630}};tsf.cropper=a}},calculateImageSelectOptions:function(a,b){var c=tsf.cropper.control,d=!!parseInt(c.params.flex_width,10),e=!!parseInt(c.params.flex_height,
|
29 |
-
f,n=
|
30 |
-
|
31 |
-
jQuery.each(a,function(a,c){var b=jQuery(c),e="",f=b.data("tsf-default-color");b.wpColorPicker({defaultColor:f,width:238,change:function(){e=b.wpColorPicker("color");""===e&&(e=f);b.val(e);tsf.j()},clear:function(){b.parent().siblings(".wp-color-result").css("backgroundColor",
|
32 |
-
jQuery;a("#tsf-title-tagline-toggle :input").on("click",tsf.wa);a("#tsf-title-location input").on("click",tsf.xa);a("#title-prefixes-toggle :input").on("click",tsf.ya);a("#autodescription-site-settings\\[homepage_title\\]").on("input",tsf.za);a("#tsf-home-title-location :input, #tsf-title-tagline-toggle :input, #tsf-title-separator input").on("click",
|
33 |
-
tsf.l);a("#tsf-inpost-box > button").on("click",tsf.l);a("#autodescription-site-settings\\[title_rem_additions\\]").on("click",tsf.Aa);tsf.h().on("input",tsf.
|
34 |
-
|
35 |
-
jQuery(".meta-box-sortables").on("sortupdate",tsf.o)},o:function(){jQuery(window).trigger("tsf-flex-resize")},
|
36 |
-
a(document.body).ready(tsf.
|
37 |
-
tsf.ua);a("#tsf-description-additions-toggle :input").on("click",tsf.
|
1 |
+
window.tsf={nonce:tsfL10n.nonce,nonces:tsfL10n.nonces,i18n:tsfL10n.i18n,states:tsfL10n.states,params:tsfL10n.params,other:tsfL10n.other,g:!1,m:!1,B:"",F:"",a:0,c:!1,f:"",cropper:{},h:function(){return jQuery("#autodescription_title, #autodescription-meta\\[doctitle\\], #autodescription-site-settings\\[homepage_title\\]")},G:function(){return jQuery("#autodescription_description, #autodescription-meta\\[description\\], #autodescription-site-settings\\[homepage_description\\]")},confirm:function(a){return confirm(a)},
|
2 |
+
M:function(a){var b=jQuery(a.target),c=b.val().length;a=jQuery("#"+tsf.H(a.target.id)+"_chars");var d="";0===c&&(c=b.prop("placeholder").length);if(100>c||175<=c){b="tsf-count-bad";var e=tsf.i("bad")}else 137>c||155<c&&175>c?(b="tsf-count-okay",e=tsf.i("okay")):(b="tsf-count-good",e=tsf.i("good"));tsf.f&&(b+=" "+tsf.f);tsf.a&&1!=tsf.a?2==tsf.a?d=e:3==tsf.a&&(d=c.toString()+" - "+e):d=c.toString();a.html(d).removeClass().addClass(b)},u:function(a){var b=jQuery(a.target),c=tsf.params.titleAdditions.length,
|
3 |
+
d=tsf.params.blogDescription.length,e=tsf.params.siteTitle.length,f=b.val().length,k=b.prop("placeholder").length,h=jQuery("#autodescription-site-settings\\[homepage_title_tagline\\]").val(),m=3;a=jQuery("#"+tsf.H(a.target.id)+"_chars");var l=0,b=tsf.f,g=tsf.a,n="";tsf.m||(m=c=0);0===f&&(0!==e?f=e:l=k);0!==f&&(0!==c&&"undefined"!==typeof h&&(c=h.length,c=0!==c?c:d),l=0===c?f:f+m+c);25>l||75<=l?(d="tsf-count-bad",f=tsf.i("bad")):42>l||55<l&&75>l?(d="tsf-count-okay",f=tsf.i("okay")):(d="tsf-count-good",
|
4 |
+
f=tsf.i("good"));b&&(d+=" "+b);g&&1!=g?2==g?n=f:3==g&&(n=l.toString()+" - "+f):n=l.toString();a.html(n).removeClass().addClass(d)},H:function(a){return a?a.replace(/([\[\]\/])/g,"\\$1"):a},ja:function(a){var b=jQuery(".tsf-sep-js");a=jQuery(a.target).val();tsf.B=a;"pipe"===a?b.text(" | "):"dash"===a?b.text(" - "):b.html(" &"+a+"; ")},ia:function(a){var b=jQuery("#autodescription-descsep-js");a=jQuery(a.target).val();"pipe"===a?b.text(" | "):"dash"===a?b.text(" - "):b.html(" &"+a+"; ")},statusBarHover:function(){var a=
|
5 |
jQuery(".tsf-seo-bar-inner-wrap").find("a");a.on("mouseenter",tsf.pa);a.on("mousemove",tsf.ra);a.on("mouseleave",tsf.qa)},pa:function(a){a=jQuery(a.target);var b=a.data("desc");void 0!==b&&0===a.find("div").length&&(a.append('<div class="tsf-explanation-desc">'+b+"<div></div></div>"),b=a.find("div.tsf-explanation-desc").height()+28,a.find("div.tsf-explanation-desc").css("top",a.position().top-b+"px"))},ra:function(a){var b=jQuery(a.target);a=a.pageX;var c=a-b.closest(".tsf-seo-bar-inner-wrap").offset().left-
|
6 |
11,d=b.find(".tsf-explanation-desc"),b=d.find("div");if(1>c)b.css("left","0px");else if(void 0!==d.offset()){var e=d.width(),d=d.offset().left+e+11;a>d?b.css("left",e+"px"):b.css("left",c+"px")}},qa:function(a){jQuery(a.target).find("div.tsf-explanation-desc").remove()},fa:function(){var a=jQuery(document.body.target),b=jQuery(".tsf-seo-bar-inner-wrap a");a.closest(b).length||b.find("div.tsf-explanation-desc").remove()},sa:function(a){a=jQuery(a.target);if(a.is(":checked")){var b=a.prop("id");a=a.prop("name");
|
7 |
+
if("undefined"!==typeof a){var c=jQuery("#"+b+"-content"),d=jQuery(".tsf-active-tab-content");c.is(d)||"undefined"===typeof c||(jQuery("."+a+"-content").fadeOut(150,function(){jQuery(this).removeClass("tsf-active-tab-content")}),setTimeout(function(){c.addClass("tsf-active-tab-content").fadeIn(250)},150),setTimeout(function(){jQuery("#"+b).trigger("tsf-tab-toggled")},175))}}},ba:function(a){a=jQuery(a.target);if(a.is(":checked")){var b=a.prop("id");a=a.prop("name");if("undefined"!==typeof a){var c=
|
8 |
jQuery("#"+b+"-content"),d=jQuery(".tsf-flex-tab-content-active");c.is(d)||"undefined"===typeof c||(jQuery("."+a+"-content").fadeOut(150,function(){jQuery(this).removeClass("tsf-flex-tab-content-active")}),setTimeout(function(){c.addClass("tsf-flex-tab-content-active").fadeIn(250)},150),setTimeout(function(){jQuery("#"+b).trigger("tsf-flex-tab-toggled")},175))}}},ma:function(){if(tsf.c&&tsf.states.isSettingsPage){var a=jQuery(".tsf-nav-tab-wrapper .tsf-tab:nth-of-type(n+2) input:checked");a.length&&
|
9 |
a.each(function(){var a=jQuery(this),c=a.prop("id"),a=a.prop("name");if("undefined"!==typeof a){var d=jQuery("#"+c+"-content");"undefined"!==typeof d&&(jQuery("."+a+"-content").removeClass("tsf-active-tab-content"),d.addClass("tsf-active-tab-content"),setTimeout(function(){jQuery("#"+c).trigger("tsf-tab-toggled")},20))}})}},wa:function(a){a=jQuery(a.target);var b=jQuery(".tsf-custom-blogname-js");a.is(":checked")?(b.css("display","inline"),tsf.m=!0):(b.css("display","none"),tsf.m=!1);tsf.h().trigger("keyup",
|
10 |
+
tsf.u)},ua:function(a){a=jQuery(a.target);var b=jQuery("#tsf-on-blogname-js");a.is(":checked")?b.css("display","inline"):b.css("display","none")},xa:function(a){a=jQuery(a.target).val();var b=jQuery(".tsf-title-additions-example-left"),c=jQuery(".tsf-title-additions-example-right");"right"===a?(b.css("display","none"),c.css("display","inline")):(b.css("display","inline"),c.css("display","none"))},ya:function(a){a=jQuery(a.target);var b=jQuery(".tsf-title-prefix-example");a.is(":checked")?b.css("display",
|
11 |
+
"none"):b.css("display","inline")},S:function(a){a=jQuery(a.target);var b=jQuery("#tsf-description-additions-js");a.is(":checked")?b.css("display","inline"):b.css("display","none")},va:function(){if(tsf.c){var a=jQuery("#tsf-title-tagline-toggle :input"),b=jQuery(".tsf-custom-blogname-js"),c=jQuery("#tsf-description-additions-toggle :input"),d=jQuery("#tsf-description-additions-js"),e=jQuery("#tsf-description-onblogname-toggle :input"),f=jQuery("#tsf-on-blogname-js"),k=jQuery("#tsf-title-additions-toggle :input"),
|
12 |
+
h=jQuery(".tsf-title-additions-js");a.is(":checked")?b.css("display","inline"):b.css("display","none");c.is(":checked")?d.css("display","inline"):d.css("display","none");e.is(":checked")?f.css("display","inline"):f.css("display","none");k.is(":checked")?h.css("display","none"):h.css("display","inline")}},za:function(a){a=jQuery(a.target).val();var b=jQuery(".tsf-custom-title-js");0===a.length?b.text(tsf.params.siteTitle):b.text(a)},A:function(a){a=jQuery(a.target).val();var b=jQuery(".tsf-custom-tagline-js"),
|
13 |
+
c=jQuery("#autodescription-site-settings\\[homepage_title\\]"),d=jQuery("#tsf-home-title-location input:checked").val(),e=jQuery("#autodescription-site-settings\\[homepage_tagline\\]"),f=tsf.params.siteTitle,k=f,h=tsf.params.blogDescription,m=tsf.I("title");e.is(":checked")&&(0!==a.length&&(h=a),k=0!==d.length&&"left"===d?f+" "+m+" "+h:h+" "+m+" "+f);b.text(h);c.prop("placeholder",k);tsf.h().trigger("input",tsf.u)},l:function(){var a=tsf.g;tsf.states.isSettingsPage?jQuery("#autodescription-site-settings\\[homepage_title_tagline\\]").trigger("input",
|
14 |
+
tsf.A):jQuery("#autodescription_title").trigger("input",tsf.A);tsf.g=a},ta:function(){var a=0,b=0;jQuery(window).resize(function(){clearTimeout(a);a=setTimeout(function(){var a=jQuery(window).width();b<a?782>=b&&782<=a&&tsf.l():782<=b&&782>=a&&tsf.l();b=a},250)})},Aa:function(){var a=jQuery(event.target),b=jQuery(".tsf-title-additions-js");a.is(":checked")?b.css("display","none"):b.css("display","inline")},T:function(){tsf.c&&(jQuery(".tsf-metaboxes :input, #tsf-inpost-box .inside :input").not(".tsf-tab :input, .tsf-flex-nav-tab :input").change(function(){tsf.j()}),
|
15 |
jQuery(".tsf-metaboxes input[type=text], .tsf-metaboxes textarea, #tsf-inpost-box .inside input[type=text], #tsf-inpost-box .inside textarea").not(".tsf-nav-tab-wrapper input, .tsf-flex-nav-tab-wrapper input").on("input",function(){tsf.j()}),window.onbeforeunload=function(){if(tsf.g)return tsf.i18n.saveAlert},jQuery('.tsf-metaboxes input[type="submit"], #publishing-action input[type="submit"], #save-action input[type="submit"], a.submitdelete').click(function(){window.onbeforeunload=null}))},j:function(){tsf.g=
|
16 |
+
!0},V:function(){return confirm(tsf.i18n.confirmReset)},Z:function(a){var b=tsf.params.titleAdditions.length,c=jQuery("#tsf-title-placeholder");if(!b)return jQuery(a.target).css("text-indent","initial"),c.empty();var b=!1,d=jQuery("#tsf-home-title-location input:checked").val(),e=tsf.states.isRTL;"undefined"!==typeof d&&0!==d.length?e?"right"===d&&(b=!0):"left"===d&&(b=!0):(d=tsf.params.titleLocation,tsf.states.isHome?tsf.m&&(e?"right"===d&&(b=!0):"left"===d&&(b=!0)):e?"left"===d&&(b=!0):"right"===
|
17 |
+
d&&(b=!0));d=jQuery("#tsf-title-tagline-toggle :input");if("undefined"!==typeof d&&0<d.length&&!d.is(":checked"))jQuery(a.target).css("text-indent","initial"),c.css("display","none");else{a=jQuery(a.target);var f=a.val(),k=jQuery("#tsf-title-offset"),h=a.outerWidth(),m=(a.outerHeight(!0)-a.height())/2,l=(h-a.innerWidth())/2,d=(a.outerWidth(!0)-a.width())/2;var g=jQuery("#autodescription-site-settings\\[homepage_title_tagline\\]").val();var n="left",p=tsf.I("title");e&&(n="right");"undefined"!==typeof g&&
|
18 |
+
0===g.length&&(g=tsf.params.blogDescription);b?(e=" "+p+" "+tsf.params.titleAdditions,"undefined"!==typeof g&&0<g.length&&(e=" "+p+" "+g),a.css("text-indent","initial")):(e=tsf.params.titleAdditions+" "+p+" ","undefined"!==typeof g&&0<g.length&&(e=g+" "+p+" "));k.text(f);k.css({fontFamily:a.css("fontFamily"),fontWeight:a.css("fontWeight"),letterSpacing:a.css("letterSpacing"),fontSize:a.css("fontSize")});g=k.width();g=a.width()-l-g;0>g&&(g=0);c.css({display:a.css("display"),lineHeight:a.css("lineHeight"),
|
19 |
+
paddingTop:m+"px",paddingBottom:m+"px",fontFamily:a.css("fontFamily"),fontWeight:a.css("fontWeight"),fontSize:a.css("fontSize"),letterSpacing:a.css("letterSpacing"),maxWidth:g+"px"});"undefined"===typeof f||1>f.length?(b||a.css("text-indent","initial"),c.empty()):(c.text(e),h>d&&(b?c.css(n,l+d+k.width()+"px"):(b=l+c.width(),0>b&&(b=0),c.css(n,d+"px"),a.css("text-indent",b+"px"))))}},ha:function(){var a=tsf.h();a.focus();if(a.setSelectionRange){var b=2*a.val().length;a.setSelectionRange(b,b)}else a.val(a.val()).focus()},
|
20 |
+
Ba:function(){tsf.c&&tsf.G().trigger("input",tsf.M)},Ca:function(){tsf.c&&tsf.h().trigger("input",tsf.u)},ea:function(){tsf.g=!1},Y:function(a){var b=jQuery(a.target);b.parents(".tsf-notice").slideUp(200,function(){b.remove()})},ka:function(a){jQuery(a).toggleClass("tsf-loading")},L:function(a,b){var c="tsf-success",d=2500;b||(c="tsf-error",d=5E3);jQuery(a).removeClass("tsf-loading").addClass(c).fadeOut(d)},K:function(a){jQuery(a).stop().empty().prop("class","tsf-ajax").css("opacity","1").removeProp("style")},
|
21 |
+
W:function(){tsf.a+=1;3<tsf.a&&(tsf.a=0);tsf.C();var a=0;tsf.K(".tsf-counter .tsf-ajax");tsf.ka(".tsf-counter .tsf-ajax");jQuery.ajax({method:"POST",url:ajaxurl,Fa:"json",data:{action:"the_seo_framework_update_counter",nonce:tsf.nonces.edit_posts,val:tsf.a},async:!0,success:function(b){b=jQuery.parseJSON(b);"success"===b.type&&(a=1);tsf.X(".tsf-counter .tsf-ajax",a)}})},X:function(a,b){switch(b){case 0:tsf.L(a,!1);break;case 1:tsf.L(a,!0);break;default:tsf.K(a)}},C:function(){if(tsf.c){var a=tsf.a,
|
22 |
+
b=tsf.g;1==a?(tsf.f="tsf-counter-one",tsf.a=1):2==a?(tsf.f="tsf-counter-two",tsf.a=2):3==a?(tsf.f="tsf-counter-three",tsf.a=3):(tsf.f="tsf-counter-zero",tsf.a=0);tsf.Da();tsf.g=b}},Da:function(){tsf.Ca();tsf.Ba()},i:function(a){return tsf.i18n[a]},I:function(a){var b="";a="title"===a?tsf.B:tsf.F;"pipe"===a||"|"===a?b="|":"dash"===a||"-"===a?b="-":123>a.charCodeAt(0)&&("&"===a.charAt(0)&&";"===a.slice(-1)&&(a=a.substr(1).slice(0,-1)),b=jQuery("<div/>").html("&"+a+";").text());return b},J:function(a){if(jQuery(a.target).prop("disabled")||
|
23 |
+
"undefined"===typeof wp.media)a.preventDefault(),a.stopPropagation();else{var b=jQuery(a.target),c=b.data("inputid");if(!d){a.preventDefault();a.stopPropagation();tsf.aa();var d=wp.media({button:{text:tsf.other[c].frame_button,close:!1},states:[new wp.media.controller.Library({title:tsf.other[c].frame_title,library:wp.media.query({type:"image"}),multiple:!1,date:!1,priority:20,suggestedWidth:1200,suggestedHeight:630}),new tsf.cropper({imgSelectOptions:tsf.calculateImageSelectOptions})]});a=function(){d.setState("cropper")};
|
24 |
+
d.off("select",a);d.on("select",a);a=function(a){var b=a.url;a=a.id;jQuery("#"+c+"-url").val(b);jQuery("#"+c+"-id").val(a)};d.off("cropped",a);d.on("cropped",a);a=function(a){var b=a.get("url"),d=a.get("id");a.get("width");a.get("height");jQuery("#"+c+"-url").val(b);jQuery("#"+c+"-id").val(d)};d.off("skippedcrop",a);d.on("skippedcrop",a);a=function(){jQuery("#"+c+"-select").text(tsf.other[c].change);jQuery("#"+c+"-url").prop("readonly",!0).css("opacity",0).animate({opacity:1},{queue:!0,duration:1E3},
|
25 |
+
"swing");tsf.D(b,c,!0);tsf.j()};d.off("skippedcrop cropped",a);d.on("skippedcrop cropped",a)}d.open()}},D:function(a,b,c){a&&b&&!jQuery("#"+b+"-remove").length&&(a.after('<a href="javascript:void(0)" id="'+b+'-remove" class="tsf-remove-social-image button button-small" data-inputid="'+b+'" title="'+tsf.other[b].remove_title+'">'+tsf.other[b].remove+"</a>"),c&&jQuery("#"+b+"-remove").css("opacity",0).animate({opacity:1},{queue:!0,duration:1E3},"swing"));tsf.ga()},s:function(a){var b=jQuery(a.target).data("inputid");
|
26 |
+
jQuery("#"+b+"-select").prop("disabled")||(jQuery("#"+b+"-select").addClass("disabled").prop("disabled",!0),jQuery("#"+b+"-remove").addClass("disabled").prop("disabled",!0).fadeOut(500,function(){jQuery(this).remove();jQuery("#"+b+"-select").text(tsf.other[b].select).removeClass("disabled").removeProp("disabled")}),jQuery("#"+b+"-url").val("").removeProp("readonly").css("opacity",0).animate({opacity:1},{queue:!0,duration:500},"swing"),jQuery("#"+b+"-id").val(""),tsf.j())},aa:function(){if("undefined"===
|
27 |
+
typeof tsf.cropper.control){var a=wp.media.controller.Cropper.extend({doCrop:function(a){var b=a.get("cropDetails"),d=tsf.cropper.control;if(d.params.flex_width&&d.params.flex_height)if(b.width===b.height)b.width>d.params.flex_width&&(b.dst_width=b.dst_height=d.params.flex_width);else if(b.width>d.params.flex_width||b.height>d.params.flex_height)if(b.width>b.height){var e=b.width/d.params.flex_width;b.dst_width=d.params.flex_width;b.dst_height=Math.round(b.height/e)}else e=b.height/d.params.flex_height,
|
28 |
+
b.dst_height=d.params.flex_height,b.dst_width=Math.round(b.width/e);"undefined"===typeof b.dst_width&&(b.dst_width=0,b.dst_height=0);return wp.ajax.post("tsf-crop-image",{nonce:tsf.nonces.upload_files,id:a.get("id"),context:"tsf-image",cropDetails:b})}});a.prototype.control={};a.control={params:{flex_width:1500,flex_height:1500,width:1200,height:630}};tsf.cropper=a}},calculateImageSelectOptions:function(a,b){var c=tsf.cropper.control,d=!!parseInt(c.params.flex_width,10),e=!!parseInt(c.params.flex_height,
|
29 |
+
10),f=parseInt(c.params.width,10),k=parseInt(c.params.height,10),h=a.get("width"),m=a.get("height"),l=f/k,g=f,n=k;b.set("control",c.params);b.set("canSkipCrop",!tsf.da(c.params.flex_width,c.params.flex_height,h,m));h/m>l?(k=m,f=k*l):(f=h,k=f/l);c=(h-f)/2;l=(m-k)/2;g={handles:!0,keys:!0,instance:!0,persistent:!0,imageWidth:h,imageHeight:m,minWidth:g>f?f:g,minHeight:n>k?k:n,x1:c,y1:l,x2:f+c,y2:k+l};!1===e&&!1===d&&(g.Ea=f+":"+k);!0===e&&(g.minHeight=200,g.maxWidth=h);!0===d&&(g.minWidth=200,g.maxHeight=
|
30 |
+
m);return g},da:function(a,b,c,d){return c<=a&&d<=b?!1:!0},ga:function(){jQuery(".tsf-remove-social-image").off("click",tsf.s);jQuery(".tsf-remove-social-image").on("click",tsf.s)},na:function(){jQuery(".tsf-set-social-image").off("click",tsf.J);jQuery(".tsf-remove-social-image").off("click",tsf.s);jQuery(".tsf-set-social-image").on("click",tsf.J);jQuery(".tsf-remove-social-image").on("click",tsf.s)},U:function(){var a=jQuery(".tsf-set-social-image");if(a.length){var b="",c="";jQuery.each(a,function(a,
|
31 |
+
e){b=jQuery(e).data("inputid");c=jQuery("#"+b+"-id");c.length&&0<c.val()&&(jQuery("#"+b+"-url").prop("readonly",!0),tsf.D(jQuery(e),b,!1));jQuery("#"+b+"-url").val()&&jQuery("#"+b+"-select").text(tsf.other[b].change)})}},la:function(){var a=jQuery(".tsf-color-picker");a.length&&jQuery.each(a,function(a,c){var b=jQuery(c),e="",f=b.data("tsf-default-color");b.wpColorPicker({defaultColor:f,width:238,change:function(){e=b.wpColorPicker("color");""===e&&(e=f);b.val(e);tsf.j()},clear:function(){b.parent().siblings(".wp-color-result").css("backgroundColor",
|
32 |
+
f);tsf.j()},palettes:!1})})},oa:function(){tsf.B=tsf.params.titleSeparator;tsf.F=tsf.params.descriptionSeparator;tsf.m=tsf.states.titleTagline;tsf.a=parseInt(tsf.states.counterType);tsf.c=tsf.states.hasInput},O:function(){if(tsf.c){var a=jQuery;a("#tsf-title-tagline-toggle :input").on("click",tsf.wa);a("#tsf-title-location input").on("click",tsf.xa);a("#title-prefixes-toggle :input").on("click",tsf.ya);a("#autodescription-site-settings\\[homepage_title\\]").on("input",tsf.za);a("#tsf-home-title-location :input, #tsf-title-tagline-toggle :input, #tsf-title-separator input").on("click",
|
33 |
+
tsf.l);a("#autodescription-site-settings\\[homepage_title_tagline\\]").on("input",tsf.A);a("#homepage-tab-general").on("tsf-tab-toggled",tsf.l);a("#autodescription-homepage-settings > button").on("click",tsf.l);a("#tsf-inpost-box > button").on("click",tsf.l);a("#autodescription-site-settings\\[title_rem_additions\\]").on("click",tsf.Aa);tsf.h().on("input",tsf.Z);a("#tsf-title-placeholder").on("click",tsf.ha);a(window).resize(tsf.ta)}},N:function(){if(jQuery(".tsf-flex").length){tsf.P();var a=0,b=
|
34 |
+
{},c=0,d=jQuery(".tsf-flex-nav-tab-wrapper");jQuery(window).on("tsf-flex-resize",function(){clearTimeout(a);var e=0;a=setTimeout(function(){if(d.length){var a=jQuery(".tsf-flex-nav-tab-inner"),c=d.width(),h=a.width(),m=jQuery(".tsf-flex-nav-name");b.b||(b.b={},b.b.v=0,b.b.ca=0,b.b.w=1);!b.b.w&&b.b.v<c&&(m.fadeIn(250),setTimeout(function(){h=a.width()},e));setTimeout(function(){h>c?(m.hide(),b.b.w=0):b.b.v<c&&(m.fadeIn(250),b.b.w=1)},2*e);setTimeout(function(){b.b.v=c;b.b.ca=h},3*e)}},c);e=10;c=75});
|
35 |
+
jQuery(window).trigger("tsf-flex-resize")}},P:function(){jQuery(window).on("resize orientationchange",tsf.o);jQuery("#collapse-menu").click(tsf.o);jQuery(".columns-prefs :input[type=radio]").change(tsf.o);jQuery(".meta-box-sortables").on("sortupdate",tsf.o)},o:function(){jQuery(window).trigger("tsf-flex-resize")},R:function(){jQuery(document.body).trigger("tsf-ready")},ready:function(a){tsf.oa();a("div.updated, div.error, div.notice-warning").insertAfter("div.tsf-top-wrap");a(document.body).ready(tsf.O);
|
36 |
+
a(document.body).ready(tsf.ma);a(document.body).ready(tsf.C);a(document.body).ready(tsf.va);a(document.body).ready(tsf.statusBarHover);a(document.body).ready(tsf.na);a(document.body).ready(tsf.U);a(document.body).ready(tsf.la);a(document.body).ready(tsf.T);a(document.body).ready(tsf.ea);a(document.body).ready(tsf.R);a(document.body).ready(tsf.N);a(document.body).on("click touchstart MSPointerDown",tsf.fa);tsf.G().on("input",tsf.M);tsf.h().on("input",tsf.u);a("#tsf-title-separator input").on("click",
|
37 |
+
tsf.ja);a("#tsf-description-separator input").on("click",tsf.ia);a(".tsf-js-confirm-reset").on("click",tsf.V);a(".tsf-tabs-radio").on("change",tsf.sa);a(".tsf-flex-nav-tab-radio").on("change",tsf.ba);a("#tsf-description-onblogname-toggle :input").on("click",tsf.ua);a("#tsf-description-additions-toggle :input").on("click",tsf.S);a(".tsf-dismiss").on("click",tsf.Y);a(".tsf-counter").on("click",tsf.W)}};jQuery(tsf.ready);
|
load.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'THE_SEO_FRAMEWORK_DIR_PATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -161,6 +161,7 @@ function _autoload_classes( $class ) {
|
|
161 |
function _do_plugin_activation() {
|
162 |
|
163 |
\The_SEO_Framework\_activation_setup_sitemap();
|
|
|
164 |
}
|
165 |
|
166 |
\add_action( 'deactivate_' . THE_SEO_FRAMEWORK_PLUGIN_BASENAME, __NAMESPACE__ . '\\_do_plugin_deactivation' );
|
@@ -173,6 +174,7 @@ function _do_plugin_activation() {
|
|
173 |
*/
|
174 |
function _do_plugin_deactivation() {
|
175 |
|
|
|
176 |
\The_SEO_Framework\_deactivation_unset_sitemap();
|
177 |
}
|
178 |
|
@@ -213,3 +215,53 @@ function _deactivation_unset_sitemap() {
|
|
213 |
|
214 |
\add_action( 'shutdown', 'flush_rewrite_rules' );
|
215 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2017 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
161 |
function _do_plugin_activation() {
|
162 |
|
163 |
\The_SEO_Framework\_activation_setup_sitemap();
|
164 |
+
\The_SEO_Framework\_activation_set_options_autoload();
|
165 |
}
|
166 |
|
167 |
\add_action( 'deactivate_' . THE_SEO_FRAMEWORK_PLUGIN_BASENAME, __NAMESPACE__ . '\\_do_plugin_deactivation' );
|
174 |
*/
|
175 |
function _do_plugin_deactivation() {
|
176 |
|
177 |
+
\The_SEO_Framework\_deactivation_unset_options_autoload();
|
178 |
\The_SEO_Framework\_deactivation_unset_sitemap();
|
179 |
}
|
180 |
|
215 |
|
216 |
\add_action( 'shutdown', 'flush_rewrite_rules' );
|
217 |
}
|
218 |
+
|
219 |
+
/**
|
220 |
+
* Turns on autoloading for The SEO Framework main options.
|
221 |
+
*
|
222 |
+
* @since 2.9.2
|
223 |
+
* @access private
|
224 |
+
*/
|
225 |
+
function _activation_set_options_autoload() {
|
226 |
+
|
227 |
+
$the_seo_framework = \the_seo_framework();
|
228 |
+
|
229 |
+
if ( isset( $the_seo_framework ) ) {
|
230 |
+
$options = $the_seo_framework->get_all_options();
|
231 |
+
$setting = THE_SEO_FRAMEWORK_SITE_OPTIONS;
|
232 |
+
|
233 |
+
\remove_all_filters( "pre_update_option_{$setting}" );
|
234 |
+
\remove_all_actions( "update_option_{$setting}" );
|
235 |
+
\remove_all_filters( "sanitize_option_{$setting}" );
|
236 |
+
|
237 |
+
// Set to false, so we can reset the options.
|
238 |
+
$_success = \update_option( $setting, false );
|
239 |
+
if ( $_success )
|
240 |
+
\update_option( $setting, $options, 'yes' );
|
241 |
+
}
|
242 |
+
}
|
243 |
+
|
244 |
+
/**
|
245 |
+
* Turns off autoloading for The SEO Framework main options.
|
246 |
+
*
|
247 |
+
* @since 2.9.2
|
248 |
+
* @access private
|
249 |
+
*/
|
250 |
+
function _deactivation_unset_options_autoload() {
|
251 |
+
|
252 |
+
$the_seo_framework = \the_seo_framework();
|
253 |
+
|
254 |
+
if ( isset( $the_seo_framework ) ) {
|
255 |
+
$options = $the_seo_framework->get_all_options();
|
256 |
+
$setting = THE_SEO_FRAMEWORK_SITE_OPTIONS;
|
257 |
+
|
258 |
+
\remove_all_filters( "pre_update_option_{$setting}" );
|
259 |
+
\remove_all_actions( "update_option_{$setting}" );
|
260 |
+
\remove_all_filters( "sanitize_option_{$setting}" );
|
261 |
+
|
262 |
+
// Set to false, so we can reset the options.
|
263 |
+
$_success = \update_option( $setting, false );
|
264 |
+
if ( $_success )
|
265 |
+
\update_option( $setting, $options, 'no' );
|
266 |
+
}
|
267 |
+
}
|
readme.txt
CHANGED
@@ -1,10 +1,10 @@
|
|
1 |
=== The SEO Framework ===
|
2 |
Contributors: Cybr
|
3 |
Donate link: https://theseoframework.com/donate/
|
4 |
-
Tags: google, bing, open graph, seo, xml sitemap, breadcrumbs, meta, search engine,
|
5 |
Requires at least: 4.4.0
|
6 |
Tested up to: 4.8.0
|
7 |
-
Stable tag: 2.9.
|
8 |
License: GPLv3
|
9 |
License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
10 |
|
@@ -12,9 +12,10 @@ The SEO Framework plugin provides an automated and advanced SEO solution for you
|
|
12 |
|
13 |
== Description ==
|
14 |
|
15 |
-
**Easy SEO for beginners, an awesome API for experts
|
|
|
16 |
|
17 |
-
|
18 |
|
19 |
For optional advanced SEO options and output, check out our free companion plugin [Extension Manager](https://wordpress.org/plugins/the-seo-framework-extension-manager/).
|
20 |
|
@@ -24,69 +25,67 @@ For optional advanced SEO options and output, check out our free companion plugi
|
|
24 |
> No SEO plugin does the magic thing to be found instantly. But doing it right helps a lot.<br>
|
25 |
> The SEO Framework helps you doing it right. Give it a try!
|
26 |
>
|
27 |
-
> The
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
*
|
33 |
-
*
|
34 |
-
*
|
35 |
-
*
|
36 |
-
*
|
37 |
-
*
|
|
|
38 |
* Supports custom post types, like WooCommerce and bbPress.
|
39 |
-
* Automatically upgrades itself from Genesis Framework SEO.
|
40 |
* Allows for easy SEO plugin switch using a tool.
|
41 |
|
42 |
-
*Read [this guide](https://theseoframework.com/docs/seo-data-migration/)
|
43 |
|
44 |
= Unbranded, Free and for the Professional =
|
45 |
This plugin is unbranded! This means that we don't even put the name "The SEO Framework" anywhere within the WordPress interface, aside from the plugin activation page.
|
46 |
This plugin makes great use of the default WordPress interface elements, like as if this plugin is part of WordPress. No ads, no nags.
|
47 |
-
The small and hidden HTML
|
48 |
|
49 |
Nobody has to know about the tools you've used to create your or someone else's website. A clean interface, for everyone.
|
50 |
|
51 |
= Completely automated =
|
52 |
**By default, this plugin automatically generates:**
|
53 |
|
54 |
-
*
|
55 |
-
*
|
56 |
-
* A canonical URL
|
57 |
* Various Open Graph, Facebook and Twitter tags.
|
58 |
-
* Special Open Graph
|
59 |
-
*
|
60 |
-
*
|
61 |
-
*
|
62 |
-
*
|
63 |
-
*
|
64 |
-
* Publishing and editing dates
|
65 |
-
*
|
66 |
-
*
|
67 |
-
* Feed excerpts and backlinks to prevent content
|
68 |
|
69 |
**This plugin goes further, behind the screens it:**
|
70 |
|
71 |
* Prevents canonical errors with categories, pages, subdomains and Multisite Domain Mapping.
|
72 |
* Discourages 404 pages and empty categories from being indexed, even if they don't send a 404 response.
|
73 |
-
* Automatically notifies Google, Bing and Yandex on
|
74 |
|
75 |
= Generously personal =
|
76 |
-
**This plugin allows you to manually set various values for each post, page, public CPT and term.**
|
77 |
|
78 |
-
**This plugin allows you to adjust over
|
79 |
|
80 |
-
*
|
81 |
-
* Automated description output.
|
82 |
-
* Schema.org
|
83 |
-
* Various robots
|
84 |
* Many home page specific options.
|
85 |
-
* Facebook, Twitter and Pinterest social integration
|
86 |
-
*
|
87 |
-
*
|
88 |
-
* Google, Bing, Pinterest and Yandex Webmaster verification
|
89 |
-
* Sitemap integration.
|
90 |
* Robots.txt sitemap integration.
|
91 |
* Feed anti-scraper options.
|
92 |
* And many, many more settings.
|
@@ -102,53 +101,74 @@ Take a look at the API documentation located at [The SEO Framework API Docs](htt
|
|
102 |
* If the description is too long, too short, duplicated, has too many repeated words and/or automatically generated.
|
103 |
* If the page is indexed, redirected, followed and/or archived, while looking at other WordPress settings.
|
104 |
|
105 |
-
**We call this The SEO Bar. Check out the [Screenshots](https://wordpress.org/plugins/autodescription
|
106 |
|
107 |
= Hardcore caching =
|
108 |
-
This plugin's code is highly optimized on PHP-level and uses variable, object and transient caching. This means that there's little extra page load time from this plugin, even with more
|
109 |
-
A caching plugin isn't even needed for this plugin as you won't notice a difference
|
110 |
|
111 |
= Compatibility =
|
|
|
112 |
|
113 |
-
* PHP 5.3 and
|
114 |
-
* WordPress 4.4 and
|
115 |
-
*
|
116 |
-
*
|
117 |
-
*
|
118 |
* Extended Color vision deficiency accessibility.
|
119 |
* Screen reader accessibility.
|
120 |
-
*
|
121 |
* Detection of robots.txt and sitemap.xml files.
|
122 |
-
*
|
123 |
-
*
|
124 |
-
|
125 |
-
|
126 |
|
127 |
= An additional sitemap =
|
128 |
-
The
|
129 |
-
It also listens to the noindex settings on each of the items.
|
130 |
-
|
131 |
-
If it is not automatically detected and no notification has been provided
|
132 |
|
133 |
= Hidden breadcrumbs =
|
134 |
-
The Breadcrumb script generated by this plugin on Posts will also make sure Google easily finds related categories which aren't included
|
135 |
|
136 |
== Installation ==
|
137 |
|
138 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
139 |
1. Either Network Activate this plugin or activate it on a single site.
|
140 |
1. That's it!
|
141 |
-
|
142 |
-
|
143 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
144 |
|
145 |
== Screenshots ==
|
146 |
|
147 |
-
1.
|
148 |
-
2.
|
149 |
-
3.
|
150 |
-
4.
|
151 |
-
5.
|
152 |
|
153 |
== Frequently Asked Questions ==
|
154 |
|
@@ -170,32 +190,31 @@ Please visit [the support forums](https://wordpress.org/support/plugin/autodescr
|
|
170 |
|
171 |
= Is this really a Framework? =
|
172 |
|
173 |
-
|
174 |
-
|
175 |
-
Extensions built for this plugin might just as well work as a standalone
|
176 |
|
177 |
= I am a developer; how can I help? =
|
178 |
|
179 |
The SEO Framework is currently a one-man project. However, any input is greatly appreciated and everything will be considered.
|
180 |
Please visit the [GitHub project page](https://github.com/sybrew/the-seo-framework) to submit issues or even pull requests.
|
181 |
|
182 |
-
= I want to
|
183 |
|
184 |
-
The SEO Framework is very pluggable
|
185 |
-
Please note that a free plugin is underway which will allow you to change all scalar filters from the dashboard. No ETA yet.
|
186 |
|
187 |
= The sitemap doesn't contain categories, images, news, etc. is this OK? =
|
188 |
|
189 |
This is not an issue. Search Engines love crawling WordPress because its structure is consistent and well known.
|
190 |
If a visitor can't find a page, then why would a Search Engine? Don't rely on your sitemap, but on your content and website's usability.
|
191 |
|
192 |
-
= What's
|
193 |
|
194 |
The JSON-LD scripts are Search Engine helpers which tell Search Engines how to connect and index the site.
|
195 |
They can tell the Search Engine if your site contains an internal search engine, what sites you're socially connected to and what page structure you're using.
|
196 |
This is also referred to as Structured Data.
|
197 |
|
198 |
-
= The
|
199 |
|
200 |
All The SEO Framework's metadata is put into Object cache when a caching plugin is available. The descriptions and Schema.org scripts are put into Transients. Please be sure to clear your cache.
|
201 |
|
@@ -206,11 +225,43 @@ Transporting Terms and Taxonomies SEO data isn't supported.
|
|
206 |
|
207 |
== Changelog ==
|
208 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
209 |
= 2.9.1 - Sovereign Comprehension =
|
210 |
|
211 |
**Release date:**
|
212 |
|
213 |
-
* 27th
|
214 |
|
215 |
**Summarized:**
|
216 |
|
@@ -227,12 +278,12 @@ Transporting Terms and Taxonomies SEO data isn't supported.
|
|
227 |
|
228 |
**Release date:**
|
229 |
|
230 |
-
* 25th
|
231 |
|
232 |
**Summarized:**
|
233 |
|
234 |
* This update focuses on fixing bugs and expanding the API for developers.
|
235 |
-
* To expand the API for per page (in-post) SEO settings, tabs had to be added in the SEO settings
|
236 |
* The JavaScript code has also been overhauled to improve performance and allow third party implementation.
|
237 |
* Moreover, the home page settings now allow you to upload a social image.
|
238 |
* Structured data markup has also been improved, like the inclusion of an alternative Sitename and fixes for Breadcrumb images.
|
@@ -254,12 +305,12 @@ Transporting Terms and Taxonomies SEO data isn't supported.
|
|
254 |
* This release brings tabbed layout to the in-post SEO settings.
|
255 |
* With this change I've also altered the overall looks, with the help from [Daniel](https://github.com/danielpost).
|
256 |
* This layout allows extensions from the [Extension Manager](https://wordpress.org/plugins/the-seo-framework-extension-manager/) to be implemented much easier.
|
257 |
-
* This layout is self-responsive! This means it's not dependent on the browser
|
258 |
-
*
|
259 |
|
260 |
**For everyone: Browser support**
|
261 |
|
262 |
-
* This release brings [CSS Flexbox](https://www.w3.org/TR/css-flexbox-1/) to the new in-post SEO settings
|
263 |
* The flexbox module is still experimental, in a way that not all browsers correctly support this to the fullest extend.
|
264 |
* However, support for as many browsers feasible has been implemented. Check out [the list](https://theseoframework.com/?p=1903#browser-support). Enjoy!
|
265 |
* The gist is that Chrome, Firefox, IE10 and Safari 6 or later are supported.
|
@@ -289,27 +340,3 @@ In the 2.8.0 update WordPress 4.3 and PHP 5.2 support have been dropped for bett
|
|
289 |
The 2.7.0 update is required for the upcoming Extension Manager plugin and includes many improvements.
|
290 |
|
291 |
== Other Notes ==
|
292 |
-
|
293 |
-
= Filters =
|
294 |
-
|
295 |
-
= Add any of the filters to your theme's functions.php or a plugin to change this plugin's output. =
|
296 |
-
|
297 |
-
Learn about them here: [The SEO Framework filters](http://theseoframework.com/docs/api/filters/)
|
298 |
-
|
299 |
-
= Actions =
|
300 |
-
|
301 |
-
= Use any of these actions to add your own output. =
|
302 |
-
|
303 |
-
They are found here: [The SEO Framework actions](http://theseoframework.com/docs/api/actions/)
|
304 |
-
|
305 |
-
= Settings API =
|
306 |
-
|
307 |
-
= Add settings to and interact with The SEO Framework. =
|
308 |
-
|
309 |
-
Read how to here: [The SEO Framework Settings API](http://theseoframework.com/docs/api/settings/)
|
310 |
-
|
311 |
-
= Beta Version =
|
312 |
-
|
313 |
-
= Want to test the latest version before it's released? =
|
314 |
-
|
315 |
-
If there's a beta, it will be available [on GitHub](https://github.com/sybrew/the-seo-framework). Please note that changes there might not reflect the final outcome of the full version release. Use at own risk.
|
1 |
=== The SEO Framework ===
|
2 |
Contributors: Cybr
|
3 |
Donate link: https://theseoframework.com/donate/
|
4 |
+
Tags: google, bing, open graph, seo, xml sitemap, breadcrumbs, meta, search engine, woocommerce, cpt, facebook, twitter
|
5 |
Requires at least: 4.4.0
|
6 |
Tested up to: 4.8.0
|
7 |
+
Stable tag: 2.9.2
|
8 |
License: GPLv3
|
9 |
License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
10 |
|
12 |
|
13 |
== Description ==
|
14 |
|
15 |
+
**Easy SEO for beginners, an awesome API for experts.**
|
16 |
+
**WordPress SEO for everyone.**
|
17 |
|
18 |
+
This plugin provides an automated, accessible, unbranded and extremely fast SEO solution for any WordPress website.
|
19 |
|
20 |
For optional advanced SEO options and output, check out our free companion plugin [Extension Manager](https://wordpress.org/plugins/the-seo-framework-extension-manager/).
|
21 |
|
25 |
> No SEO plugin does the magic thing to be found instantly. But doing it right helps a lot.<br>
|
26 |
> The SEO Framework helps you doing it right. Give it a try!
|
27 |
>
|
28 |
+
> The default settings are recommended within the SEO Settings page. If you know what you're doing, go ahead and change them! Each option is also vastly documented.
|
29 |
+
> Don't forget to set up the social meta settings and a home page description; those can greatly increase conversion.
|
30 |
+
|
31 |
+
= This plugin: =
|
32 |
+
|
33 |
+
* Improves search presence by ranking your website distinctively.
|
34 |
+
* Is preconfigured, providing a suitable starting point for most websites.
|
35 |
+
* Listens to all WordPress gives to automatically configure SEO.
|
36 |
+
* Allows you to adjust the SEO through global options.
|
37 |
+
* Allows you to SEO every public page, post, taxonomy, and term.
|
38 |
+
* Shows you how to improve SEO with a beautiful SEO bar.
|
39 |
+
* Helps your pages get shared more beautiful through Facebook, Twitter, and other social sites.
|
40 |
* Supports custom post types, like WooCommerce and bbPress.
|
|
|
41 |
* Allows for easy SEO plugin switch using a tool.
|
42 |
|
43 |
+
*Read [this guide](https://theseoframework.com/docs/seo-data-migration/) on transferring SEO Content using SEO Data Transporter.*
|
44 |
|
45 |
= Unbranded, Free and for the Professional =
|
46 |
This plugin is unbranded! This means that we don't even put the name "The SEO Framework" anywhere within the WordPress interface, aside from the plugin activation page.
|
47 |
This plugin makes great use of the default WordPress interface elements, like as if this plugin is part of WordPress. No ads, no nags.
|
48 |
+
The small and hidden HTML comments can easily be disabled with the use of a filter or extension.
|
49 |
|
50 |
Nobody has to know about the tools you've used to create your or someone else's website. A clean interface, for everyone.
|
51 |
|
52 |
= Completely automated =
|
53 |
**By default, this plugin automatically generates:**
|
54 |
|
55 |
+
* Titles according to your settings with archive prefixes.
|
56 |
+
* Descriptions with anti-spam techniques and detection that informs you when it can be improved.
|
57 |
+
* A canonical URL to prevent duplicated content; with full Domain Mapping, subdomain, and HTTPS support.
|
58 |
* Various Open Graph, Facebook and Twitter tags.
|
59 |
+
* Special Open Graph descriptions, which organically integrates within the Facebook and Twitter snippets.
|
60 |
+
* Open Graph images, they are automatically resized and optimized when needed.
|
61 |
+
* Structured Data for Google Search and Chromium that adds extended on-site search support.
|
62 |
+
* Structured Data for Google's Knowledge Graph; like Personal/Business site relations, names, and logos.
|
63 |
+
* Structured Data for Breadcrumbs that extend pages and categories relationship support in Google Search.
|
64 |
+
* Structured Data for Google Search that lets it know your preferred site name.
|
65 |
+
* Publishing and editing dates for Social Sites and Search Engines alike.
|
66 |
+
* Paginated content relationship links, to help visitors going to the right page.
|
67 |
+
* A sitemap with all your pages, posts and CPT, which listens to their set settings.
|
68 |
+
* Feed excerpts and backlinks within, to prevent automated content theft.
|
69 |
|
70 |
**This plugin goes further, behind the screens it:**
|
71 |
|
72 |
* Prevents canonical errors with categories, pages, subdomains and Multisite Domain Mapping.
|
73 |
* Discourages 404 pages and empty categories from being indexed, even if they don't send a 404 response.
|
74 |
+
* Automatically notifies Google, Bing, and Yandex on website updates when sitemaps are enabled.
|
75 |
|
76 |
= Generously personal =
|
77 |
+
**This plugin allows you to manually set various values for each post, page, public CPT, and term.**
|
78 |
|
79 |
+
**This plugin allows you to adjust over 100 site settings, including:**
|
80 |
|
81 |
+
* Automated title output options; they encourage you to follow the guidelines.
|
82 |
+
* Automated description output options.
|
83 |
+
* Schema.org Structured Data output options.
|
84 |
+
* Various robots meta output options.
|
85 |
* Many home page specific options.
|
86 |
+
* Facebook, Twitter, and Pinterest social integration options.
|
87 |
+
* Google, Bing, Pinterest and Yandex Webmaster verification codes.
|
88 |
+
* Sitemap integration with personalization.
|
|
|
|
|
89 |
* Robots.txt sitemap integration.
|
90 |
* Feed anti-scraper options.
|
91 |
* And many, many more settings.
|
101 |
* If the description is too long, too short, duplicated, has too many repeated words and/or automatically generated.
|
102 |
* If the page is indexed, redirected, followed and/or archived, while looking at other WordPress settings.
|
103 |
|
104 |
+
**We call this The SEO Bar. Check out the [Screenshots](https://wordpress.org/plugins/autodescription/#screenshots) to see how it helps you!**
|
105 |
|
106 |
= Hardcore caching =
|
107 |
+
This plugin's code is highly optimized on PHP-level and uses variable, object and transient caching. This means that there's little extra page load time from this plugin, even with more meta tags used.
|
108 |
+
A caching plugin isn't even needed for this plugin as you won't notice a difference; however, it's supported wherever best suited.
|
109 |
|
110 |
= Compatibility =
|
111 |
+
**This plugin supports:**
|
112 |
|
113 |
+
* PHP 5.3 and higher.
|
114 |
+
* WordPress 4.4 and higher.
|
115 |
+
* Internationalization through WordPress.org.
|
116 |
+
* Multibyte calculation and rendering, including Emoji and CJK.
|
117 |
+
* Right to Left (RTL) languages, through its interface and generation.
|
118 |
* Extended Color vision deficiency accessibility.
|
119 |
* Screen reader accessibility.
|
120 |
+
* MultiSite, this plugin is in fact built upon one.
|
121 |
* Detection of robots.txt and sitemap.xml files.
|
122 |
+
* Both up-to-date and outdated themes.
|
123 |
+
* Detection of various other popular SEO tools to prevent duplicated output.
|
124 |
+
* Translation plugins WPML, Polylang and qTranslate X.
|
125 |
+
* WooCommerce, for free, in all its glory.
|
126 |
|
127 |
= An additional sitemap =
|
128 |
+
The sitemap generated with The SEO Framework is sufficient for Search Engines to find posts, pages and supported custom post types throughout your website.
|
129 |
+
It also listens to the "noindex" settings on each of the items and works great with various translation plugins.
|
130 |
+
However, if you require a more expanded sitemap, feel free to activate a dedicated Sitemap plugin. The SEO Framework will automatically deactivate its Sitemap functionality when another (known) sitemap plugin is found.
|
131 |
+
If it is not automatically detected and no notification has been provided in the Sitemap Settings, feel free to open a support ticket and it will be addressed carefully.
|
132 |
|
133 |
= Hidden breadcrumbs =
|
134 |
+
The Breadcrumb script generated by this plugin on Posts will also make sure Google easily finds related categories which aren't included in the Sitemap of this plugin.
|
135 |
|
136 |
== Installation ==
|
137 |
|
138 |
+
= This plugin requires: =
|
139 |
+
|
140 |
+
* PHP 5.3 or later.
|
141 |
+
* WordPress 4.4 or later.
|
142 |
+
|
143 |
+
= Installation instructions: =
|
144 |
+
|
145 |
+
1. Install The SEO Framework either via the WordPress.org plugin directory or by uploading the files to your server.
|
146 |
1. Either Network Activate this plugin or activate it on a single site.
|
147 |
1. That's it!
|
148 |
+
|
149 |
+
= This plugin auto-configures its global settings, but: =
|
150 |
+
|
151 |
+
* Check out the SEO settings page to fine-tune your settings.
|
152 |
+
* Do fill in the Schema "General" and "Presence" settings.
|
153 |
+
* Do fill in the Home Page "General" settings.
|
154 |
+
* Do fill in the Social Meta "General", "Facebook" and "Twitter" settings.
|
155 |
+
* Notice that red checkboxes are recommended to be left unchecked. And green checkboxes are recommended to be checked.
|
156 |
+
|
157 |
+
= This plugin auto-configures SEO meta settings, and: =
|
158 |
+
|
159 |
+
* You can fine-tune each page with the provided meta box.
|
160 |
+
|
161 |
+
= Get more SEO power =
|
162 |
+
|
163 |
+
* Optionally, also install the [Extension Manager](https://wordpress.org/plugins/the-seo-framework-extension-manager/) for additional SEO solutions.
|
164 |
|
165 |
== Screenshots ==
|
166 |
|
167 |
+
1. This plugin shows you what you can improve, at a glance. With complete color vision deficiency support.
|
168 |
+
2. Hover over any of the SEO Bar's items to see how you can improve the page's SEO. Red is bad, orange is okay, green is good. Blue is situational.
|
169 |
+
3. The dynamic Post/Page SEO settings meta box. Another version of this box is also implemented for Categories and Tags.
|
170 |
+
4. The dynamic Post/Page SEO settings meta box also fits neatly in the sidebar. For when you want to work faster.
|
171 |
+
5. The SEO Settings Page. With over 100 settings, you are in full control.
|
172 |
|
173 |
== Frequently Asked Questions ==
|
174 |
|
190 |
|
191 |
= Is this really a Framework? =
|
192 |
|
193 |
+
The SEO Framework is its own self-serving technical framework. It keeps track of everything WordPress and SEO while it allows other plugins to interact with it easily.
|
194 |
+
Through its framework it allows you to SEO your complete website. It also allows for extensions and real-time alterations; for when you really want or need to change something.
|
195 |
+
Extensions built for this plugin might just as well work as a standalone; however, The SEO Framework provides an easier and faster way of doing so.
|
196 |
|
197 |
= I am a developer; how can I help? =
|
198 |
|
199 |
The SEO Framework is currently a one-man project. However, any input is greatly appreciated and everything will be considered.
|
200 |
Please visit the [GitHub project page](https://github.com/sybrew/the-seo-framework) to submit issues or even pull requests.
|
201 |
|
202 |
+
= I want to modify how this plugin works =
|
203 |
|
204 |
+
The SEO Framework is very pluggable in many fields. Please refer to the [API documentation](https://theseoframework.com/docs/api/).
|
|
|
205 |
|
206 |
= The sitemap doesn't contain categories, images, news, etc. is this OK? =
|
207 |
|
208 |
This is not an issue. Search Engines love crawling WordPress because its structure is consistent and well known.
|
209 |
If a visitor can't find a page, then why would a Search Engine? Don't rely on your sitemap, but on your content and website's usability.
|
210 |
|
211 |
+
= What's do the application/ld+json scripts do? =
|
212 |
|
213 |
The JSON-LD scripts are Search Engine helpers which tell Search Engines how to connect and index the site.
|
214 |
They can tell the Search Engine if your site contains an internal search engine, what sites you're socially connected to and what page structure you're using.
|
215 |
This is also referred to as Structured Data.
|
216 |
|
217 |
+
= The metadata is not being updated, and I'm using a caching plugin. =
|
218 |
|
219 |
All The SEO Framework's metadata is put into Object cache when a caching plugin is available. The descriptions and Schema.org scripts are put into Transients. Please be sure to clear your cache.
|
220 |
|
225 |
|
226 |
== Changelog ==
|
227 |
|
228 |
+
= 2.9.2 - Diminutive Consolidation =
|
229 |
+
|
230 |
+
**Release date:**
|
231 |
+
|
232 |
+
* May 8th, 2017
|
233 |
+
|
234 |
+
**Summarized:**
|
235 |
+
|
236 |
+
* Now, Polylang is officially supported by The SEO Framework.
|
237 |
+
* The sitemap now supports plain permalinks. That means it now literally works for every website.
|
238 |
+
* The robots.txt file has been enhanced, so it now informs you when the output location is incorrect.
|
239 |
+
* Moreover, various bugs have been fixed, mainly concerning third party plugins.
|
240 |
+
|
241 |
+
**We're looking for translation editors:**
|
242 |
+
|
243 |
+
* First, thank you so much to all the translation [contributors](https://translate.wordpress.org/projects/wp-plugins/autodescription/contributors).
|
244 |
+
* Now, if you want to see The SEO Framework in your language, head over to [this page](https://translate.wordpress.org/projects/wp-plugins/autodescription) and feel free to contribute.
|
245 |
+
* If you wish to easily maintain and keep a close eye on all the contributions for your language, [ask us](https://theseoframework.com/contact/) to ask WordPress Polyglots to add you as a contributor.
|
246 |
+
* Ultimately, it's up to the WordPress Polyglots team to fulfill your request. It generally depends on how well you've submitted translations for you to be accepted.
|
247 |
+
|
248 |
+
**A few notes about translations:**
|
249 |
+
|
250 |
+
* If you use a machine to translate for you, note that they can generate out-of-context strings. So keep an eye out for those!
|
251 |
+
* If you notice that strings are very hard to translate, e.g. because of grammatical gender, [let us know](https://github.com/sybrew/the-seo-framework/issues/new)!
|
252 |
+
* Please don't translate "The SEO Framework", it's a registered brand-name.
|
253 |
+
* Be sure not to add spaces if you see backticks, asterisks, or brackets. They're used for Markdown language construction.
|
254 |
+
* In TSF, you generally can't use UTF character codes like `&#x2661;`, as they're automatically removed or rendered unreadable for added security. Add them as displayed instead: **♡**.
|
255 |
+
|
256 |
+
**Detailed log:**
|
257 |
+
|
258 |
+
***If you are a friend, speak the password, and the doors will open, and [you can enter](https://theseoframework.com/?p=1982#detailed).***
|
259 |
+
|
260 |
= 2.9.1 - Sovereign Comprehension =
|
261 |
|
262 |
**Release date:**
|
263 |
|
264 |
+
* March 27th, 2017
|
265 |
|
266 |
**Summarized:**
|
267 |
|
278 |
|
279 |
**Release date:**
|
280 |
|
281 |
+
* March 25th, 2017
|
282 |
|
283 |
**Summarized:**
|
284 |
|
285 |
* This update focuses on fixing bugs and expanding the API for developers.
|
286 |
+
* To expand the API for per page (in-post) SEO settings, tabs had to be added in the SEO settings meta box.
|
287 |
* The JavaScript code has also been overhauled to improve performance and allow third party implementation.
|
288 |
* Moreover, the home page settings now allow you to upload a social image.
|
289 |
* Structured data markup has also been improved, like the inclusion of an alternative Sitename and fixes for Breadcrumb images.
|
305 |
* This release brings tabbed layout to the in-post SEO settings.
|
306 |
* With this change I've also altered the overall looks, with the help from [Daniel](https://github.com/danielpost).
|
307 |
* This layout allows extensions from the [Extension Manager](https://wordpress.org/plugins/the-seo-framework-extension-manager/) to be implemented much easier.
|
308 |
+
* This layout is self-responsive! This means it's not dependent on the browser size, but on how much content will fit.
|
309 |
+
* Therefore, this layout allows the SEO settings to be placed in the right sidebar! Take a look at the [new screenshots](https://wordpress.org/plugins/autodescription/#screenshots).
|
310 |
|
311 |
**For everyone: Browser support**
|
312 |
|
313 |
+
* This release brings [CSS Flexbox](https://www.w3.org/TR/css-flexbox-1/) to the new in-post SEO settings meta box.
|
314 |
* The flexbox module is still experimental, in a way that not all browsers correctly support this to the fullest extend.
|
315 |
* However, support for as many browsers feasible has been implemented. Check out [the list](https://theseoframework.com/?p=1903#browser-support). Enjoy!
|
316 |
* The gist is that Chrome, Firefox, IE10 and Safari 6 or later are supported.
|
340 |
The 2.7.0 update is required for the upcoming Extension Manager plugin and includes many improvements.
|
341 |
|
342 |
== Other Notes ==
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|