Version Description
- Bugfixes:
- Fixes a bug where the saved option values weren't reflected in the form fields.
Download this release
Release Info
| Developer | Yoast |
| Plugin | |
| Version | 0.6 |
| Comparing to | |
| See all releases | |
Code changes from version 0.5 to 0.6
- .phpcs.xml.dist +27 -26
- classes/backend.php +14 -12
- classes/blacklist-sanitizer.php +6 -6
- classes/css-builder.php +5 -5
- classes/form.php +238 -0
- classes/frontend.php +52 -34
- classes/options.php +14 -14
- classes/views/additional-css.php +1 -1
- classes/views/admin-page.php +37 -20
- readme.txt +8 -4
- yoastseo-amp.php +2 -2
.phpcs.xml.dist
CHANGED
|
@@ -14,9 +14,6 @@
|
|
| 14 |
|
| 15 |
<file>.</file>
|
| 16 |
|
| 17 |
-
<exclude-pattern>node_modules/*</exclude-pattern>
|
| 18 |
-
<exclude-pattern>vendor/*</exclude-pattern>
|
| 19 |
-
|
| 20 |
<!-- Only check PHP files. -->
|
| 21 |
<arg name="extensions" value="php"/>
|
| 22 |
|
|
@@ -26,7 +23,7 @@
|
|
| 26 |
<!-- Strip the filepaths down to the relevant bit. -->
|
| 27 |
<arg name="basepath" value="./"/>
|
| 28 |
|
| 29 |
-
<!-- Check up to 8 files
|
| 30 |
<arg name="parallel" value="8"/>
|
| 31 |
|
| 32 |
|
|
@@ -36,7 +33,15 @@
|
|
| 36 |
#############################################################################
|
| 37 |
-->
|
| 38 |
|
| 39 |
-
<rule ref="Yoast"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 40 |
|
| 41 |
|
| 42 |
<!--
|
|
@@ -45,9 +50,6 @@
|
|
| 45 |
#############################################################################
|
| 46 |
-->
|
| 47 |
|
| 48 |
-
<!-- Set the minimum supported WP version. This is used by several sniffs. -->
|
| 49 |
-
<config name="minimum_supported_wp_version" value="4.8"/>
|
| 50 |
-
|
| 51 |
<!-- Verify that all gettext calls use the correct text domain. -->
|
| 52 |
<rule ref="WordPress.WP.I18n">
|
| 53 |
<properties>
|
|
@@ -60,30 +62,14 @@
|
|
| 60 |
<rule ref="Yoast.Files.FileName">
|
| 61 |
<properties>
|
| 62 |
<!-- Don't trigger on the main file as renaming it would deactivate the plugin. -->
|
| 63 |
-
<property name="
|
| 64 |
<element value="yoastseo-amp.php"/>
|
| 65 |
</property>
|
| 66 |
|
| 67 |
<!-- Remove the following prefixes from the names of object structures. -->
|
| 68 |
-
<property name="
|
| 69 |
-
<element value="yoastseo_amp"/>
|
| 70 |
-
<element value="yoast_amp"/>
|
| 71 |
-
</property>
|
| 72 |
-
</properties>
|
| 73 |
-
</rule>
|
| 74 |
-
|
| 75 |
-
<!-- Verify that everything in the global namespace is prefixed with a plugin specific prefix. -->
|
| 76 |
-
<rule ref="WordPress.NamingConventions.PrefixAllGlobals">
|
| 77 |
-
<properties>
|
| 78 |
-
<!-- Provide the prefixes to look for. -->
|
| 79 |
-
<property name="prefixes" type="array">
|
| 80 |
-
<!-- Temporarily allowed until the prefixes are fixed. -->
|
| 81 |
<element value="yoastseo_amp"/>
|
| 82 |
-
<element value="yoast_seo_amp"/>
|
| 83 |
-
<element value="wpseo_amp"/>
|
| 84 |
-
<!-- These are the new prefixes which all code should comply with in the future. -->
|
| 85 |
<element value="yoast_amp"/>
|
| 86 |
-
<element value="Yoast\WP\AMP"/>
|
| 87 |
</property>
|
| 88 |
</properties>
|
| 89 |
</rule>
|
|
@@ -108,6 +94,16 @@
|
|
| 108 |
#############################################################################
|
| 109 |
-->
|
| 110 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 111 |
<!-- The below exclusion has to do with appropriate sanitization and escaping
|
| 112 |
of CSS and JS data for which no standard functionality exists in WP.
|
| 113 |
A further review of this is needed and this needs to be tested extensively.
|
|
@@ -116,4 +112,9 @@
|
|
| 116 |
<rule ref="WordPress.Security.EscapeOutput.OutputNotEscaped">
|
| 117 |
<exclude-pattern>/classes/frontend\.php$</exclude-pattern>
|
| 118 |
</rule>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 119 |
</ruleset>
|
| 14 |
|
| 15 |
<file>.</file>
|
| 16 |
|
|
|
|
|
|
|
|
|
|
| 17 |
<!-- Only check PHP files. -->
|
| 18 |
<arg name="extensions" value="php"/>
|
| 19 |
|
| 23 |
<!-- Strip the filepaths down to the relevant bit. -->
|
| 24 |
<arg name="basepath" value="./"/>
|
| 25 |
|
| 26 |
+
<!-- Check up to 8 files simultaneously. -->
|
| 27 |
<arg name="parallel" value="8"/>
|
| 28 |
|
| 29 |
|
| 33 |
#############################################################################
|
| 34 |
-->
|
| 35 |
|
| 36 |
+
<rule ref="Yoast">
|
| 37 |
+
<properties>
|
| 38 |
+
<!-- Provide the plugin specific prefixes for all naming related sniffs. -->
|
| 39 |
+
<property name="prefixes" type="array">
|
| 40 |
+
<element value="Yoast\WP\AMP"/>
|
| 41 |
+
<element value="yoast_amp"/>
|
| 42 |
+
</property>
|
| 43 |
+
</properties>
|
| 44 |
+
</rule>
|
| 45 |
|
| 46 |
|
| 47 |
<!--
|
| 50 |
#############################################################################
|
| 51 |
-->
|
| 52 |
|
|
|
|
|
|
|
|
|
|
| 53 |
<!-- Verify that all gettext calls use the correct text domain. -->
|
| 54 |
<rule ref="WordPress.WP.I18n">
|
| 55 |
<properties>
|
| 62 |
<rule ref="Yoast.Files.FileName">
|
| 63 |
<properties>
|
| 64 |
<!-- Don't trigger on the main file as renaming it would deactivate the plugin. -->
|
| 65 |
+
<property name="excluded_files_strict_check" type="array">
|
| 66 |
<element value="yoastseo-amp.php"/>
|
| 67 |
</property>
|
| 68 |
|
| 69 |
<!-- Remove the following prefixes from the names of object structures. -->
|
| 70 |
+
<property name="oo_prefixes" type="array">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 71 |
<element value="yoastseo_amp"/>
|
|
|
|
|
|
|
|
|
|
| 72 |
<element value="yoast_amp"/>
|
|
|
|
| 73 |
</property>
|
| 74 |
</properties>
|
| 75 |
</rule>
|
| 94 |
#############################################################################
|
| 95 |
-->
|
| 96 |
|
| 97 |
+
<!-- Until all prefixes are fixed, some exceptions are allowed to the PrefixAllGlobals sniff. -->
|
| 98 |
+
<rule ref="WordPress.NamingConventions.PrefixAllGlobals">
|
| 99 |
+
<properties>
|
| 100 |
+
<property name="prefixes" type="array" extend="true">
|
| 101 |
+
<element value="yoastseo_amp"/>
|
| 102 |
+
<element value="yoast_seo_amp"/>
|
| 103 |
+
</property>
|
| 104 |
+
</properties>
|
| 105 |
+
</rule>
|
| 106 |
+
|
| 107 |
<!-- The below exclusion has to do with appropriate sanitization and escaping
|
| 108 |
of CSS and JS data for which no standard functionality exists in WP.
|
| 109 |
A further review of this is needed and this needs to be tested extensively.
|
| 112 |
<rule ref="WordPress.Security.EscapeOutput.OutputNotEscaped">
|
| 113 |
<exclude-pattern>/classes/frontend\.php$</exclude-pattern>
|
| 114 |
</rule>
|
| 115 |
+
<rule ref="WordPress.WP.AlternativeFunctions.strip_tags_strip_tags">
|
| 116 |
+
<exclude-pattern>/classes/frontend\.php$</exclude-pattern>
|
| 117 |
+
<exclude-pattern>/classes/options\.php$</exclude-pattern>
|
| 118 |
+
</rule>
|
| 119 |
+
|
| 120 |
</ruleset>
|
classes/backend.php
CHANGED
|
@@ -28,12 +28,12 @@ if ( ! class_exists( 'YoastSEO_AMP_Backend', false ) ) {
|
|
| 28 |
$this->options = YoastSEO_AMP_Options::get();
|
| 29 |
|
| 30 |
// Add subitem to menu.
|
| 31 |
-
add_filter( 'wpseo_submenu_pages',
|
| 32 |
|
| 33 |
// Register AMP admin page as a Yoast SEO admin page.
|
| 34 |
-
add_filter( 'wpseo_admin_pages',
|
| 35 |
|
| 36 |
-
add_filter( '
|
| 37 |
}
|
| 38 |
|
| 39 |
/**
|
|
@@ -60,15 +60,15 @@ if ( ! class_exists( 'YoastSEO_AMP_Backend', false ) ) {
|
|
| 60 |
*/
|
| 61 |
public function add_submenu_page( $sub_menu_pages ) {
|
| 62 |
|
| 63 |
-
$sub_menu_pages[] =
|
| 64 |
'wpseo_dashboard',
|
| 65 |
__( 'AMP', 'yoastseo-amp' ),
|
| 66 |
__( 'AMP', 'yoastseo-amp' ),
|
| 67 |
'manage_options',
|
| 68 |
'wpseo_amp',
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
|
| 72 |
|
| 73 |
return $sub_menu_pages;
|
| 74 |
}
|
|
@@ -77,6 +77,8 @@ if ( ! class_exists( 'YoastSEO_AMP_Backend', false ) ) {
|
|
| 77 |
* Displays the admin page.
|
| 78 |
*/
|
| 79 |
public function display() {
|
|
|
|
|
|
|
| 80 |
require 'views/admin-page.php';
|
| 81 |
}
|
| 82 |
|
|
@@ -87,7 +89,7 @@ if ( ! class_exists( 'YoastSEO_AMP_Backend', false ) ) {
|
|
| 87 |
wp_enqueue_style(
|
| 88 |
'yoast_amp_css',
|
| 89 |
plugin_dir_url( __FILE__ ) . 'assets/amp-admin-page.css',
|
| 90 |
-
|
| 91 |
YoastSEO_AMP::VERSION
|
| 92 |
);
|
| 93 |
|
|
@@ -95,7 +97,7 @@ if ( ! class_exists( 'YoastSEO_AMP_Backend', false ) ) {
|
|
| 95 |
wp_enqueue_script(
|
| 96 |
'wpseo-admin-media',
|
| 97 |
plugin_dir_url( __FILE__ ) . 'assets/wp-seo-admin-media.js',
|
| 98 |
-
|
| 99 |
YoastSEO_AMP::VERSION,
|
| 100 |
true
|
| 101 |
);
|
|
@@ -104,7 +106,7 @@ if ( ! class_exists( 'YoastSEO_AMP_Backend', false ) ) {
|
|
| 104 |
wp_enqueue_script(
|
| 105 |
'yoast_amp_js',
|
| 106 |
plugin_dir_url( __FILE__ ) . 'assets/amp-admin-page.js',
|
| 107 |
-
|
| 108 |
YoastSEO_AMP::VERSION,
|
| 109 |
true
|
| 110 |
);
|
|
@@ -116,9 +118,9 @@ if ( ! class_exists( 'YoastSEO_AMP_Backend', false ) ) {
|
|
| 116 |
* @return array
|
| 117 |
*/
|
| 118 |
public function localize_media_script() {
|
| 119 |
-
return
|
| 120 |
'choose_image' => __( 'Use Logo', 'yoastseo-amp' ),
|
| 121 |
-
|
| 122 |
}
|
| 123 |
|
| 124 |
/**
|
| 28 |
$this->options = YoastSEO_AMP_Options::get();
|
| 29 |
|
| 30 |
// Add subitem to menu.
|
| 31 |
+
add_filter( 'wpseo_submenu_pages', [ $this, 'add_submenu_page' ] );
|
| 32 |
|
| 33 |
// Register AMP admin page as a Yoast SEO admin page.
|
| 34 |
+
add_filter( 'wpseo_admin_pages', [ $this, 'add_admin_pages' ] );
|
| 35 |
|
| 36 |
+
add_filter( 'Yoast\WP\AMP\supported_post_types', [ $this, 'remove_page_post_type' ] );
|
| 37 |
}
|
| 38 |
|
| 39 |
/**
|
| 60 |
*/
|
| 61 |
public function add_submenu_page( $sub_menu_pages ) {
|
| 62 |
|
| 63 |
+
$sub_menu_pages[] = [
|
| 64 |
'wpseo_dashboard',
|
| 65 |
__( 'AMP', 'yoastseo-amp' ),
|
| 66 |
__( 'AMP', 'yoastseo-amp' ),
|
| 67 |
'manage_options',
|
| 68 |
'wpseo_amp',
|
| 69 |
+
[ $this, 'display' ],
|
| 70 |
+
[ [ $this, 'enqueue_admin_page' ] ],
|
| 71 |
+
];
|
| 72 |
|
| 73 |
return $sub_menu_pages;
|
| 74 |
}
|
| 77 |
* Displays the admin page.
|
| 78 |
*/
|
| 79 |
public function display() {
|
| 80 |
+
require_once 'form.php';
|
| 81 |
+
|
| 82 |
require 'views/admin-page.php';
|
| 83 |
}
|
| 84 |
|
| 89 |
wp_enqueue_style(
|
| 90 |
'yoast_amp_css',
|
| 91 |
plugin_dir_url( __FILE__ ) . 'assets/amp-admin-page.css',
|
| 92 |
+
[ 'wp-color-picker' ],
|
| 93 |
YoastSEO_AMP::VERSION
|
| 94 |
);
|
| 95 |
|
| 97 |
wp_enqueue_script(
|
| 98 |
'wpseo-admin-media',
|
| 99 |
plugin_dir_url( __FILE__ ) . 'assets/wp-seo-admin-media.js',
|
| 100 |
+
[ 'jquery', 'jquery-ui-core' ],
|
| 101 |
YoastSEO_AMP::VERSION,
|
| 102 |
true
|
| 103 |
);
|
| 106 |
wp_enqueue_script(
|
| 107 |
'yoast_amp_js',
|
| 108 |
plugin_dir_url( __FILE__ ) . 'assets/amp-admin-page.js',
|
| 109 |
+
[ 'jquery', 'wp-color-picker' ],
|
| 110 |
YoastSEO_AMP::VERSION,
|
| 111 |
true
|
| 112 |
);
|
| 118 |
* @return array
|
| 119 |
*/
|
| 120 |
public function localize_media_script() {
|
| 121 |
+
return [
|
| 122 |
'choose_image' => __( 'Use Logo', 'yoastseo-amp' ),
|
| 123 |
+
];
|
| 124 |
}
|
| 125 |
|
| 126 |
/**
|
classes/blacklist-sanitizer.php
CHANGED
|
@@ -84,7 +84,7 @@ class Yoast_AMP_Blacklist_Sanitizer extends AMP_Base_Sanitizer {
|
|
| 84 |
foreach ( $tag_names as $tag_name ) {
|
| 85 |
$elements = $node->getElementsByTagName( $tag_name );
|
| 86 |
$length = $elements->length;
|
| 87 |
-
if (
|
| 88 |
continue;
|
| 89 |
}
|
| 90 |
|
|
@@ -93,7 +93,7 @@ class Yoast_AMP_Blacklist_Sanitizer extends AMP_Base_Sanitizer {
|
|
| 93 |
$parent_node = $element->parentNode;
|
| 94 |
$parent_node->removeChild( $element );
|
| 95 |
|
| 96 |
-
if (
|
| 97 |
$parent_node->parentNode->removeChild( $parent_node );
|
| 98 |
}
|
| 99 |
}
|
|
@@ -111,7 +111,7 @@ class Yoast_AMP_Blacklist_Sanitizer extends AMP_Base_Sanitizer {
|
|
| 111 |
private function sanitize_a_attribute( $node, $attribute ) {
|
| 112 |
$attribute_name = strtolower( $attribute->name );
|
| 113 |
|
| 114 |
-
if (
|
| 115 |
$node->removeAttribute( $attribute_name );
|
| 116 |
}
|
| 117 |
}
|
|
@@ -127,7 +127,7 @@ class Yoast_AMP_Blacklist_Sanitizer extends AMP_Base_Sanitizer {
|
|
| 127 |
private function sanitize_pre_attribute( $node, $attribute ) {
|
| 128 |
$attribute_name = strtolower( $attribute->name );
|
| 129 |
|
| 130 |
-
if ( 'line'
|
| 131 |
$node->removeAttribute( $attribute_name );
|
| 132 |
}
|
| 133 |
}
|
|
@@ -143,7 +143,7 @@ class Yoast_AMP_Blacklist_Sanitizer extends AMP_Base_Sanitizer {
|
|
| 143 |
private function sanitize_cell_attribute( $node, $attribute ) {
|
| 144 |
$attribute_name = strtolower( $attribute->name );
|
| 145 |
|
| 146 |
-
if ( in_array( $attribute_name,
|
| 147 |
$node->removeAttribute( $attribute_name );
|
| 148 |
}
|
| 149 |
}
|
|
@@ -159,7 +159,7 @@ class Yoast_AMP_Blacklist_Sanitizer extends AMP_Base_Sanitizer {
|
|
| 159 |
private function sanitize_table_attribute( $node, $attribute ) {
|
| 160 |
$attribute_name = strtolower( $attribute->name );
|
| 161 |
|
| 162 |
-
if ( in_array( $attribute_name,
|
| 163 |
$node->removeAttribute( $attribute_name );
|
| 164 |
}
|
| 165 |
}
|
| 84 |
foreach ( $tag_names as $tag_name ) {
|
| 85 |
$elements = $node->getElementsByTagName( $tag_name );
|
| 86 |
$length = $elements->length;
|
| 87 |
+
if ( $length === 0 ) {
|
| 88 |
continue;
|
| 89 |
}
|
| 90 |
|
| 93 |
$parent_node = $element->parentNode;
|
| 94 |
$parent_node->removeChild( $element );
|
| 95 |
|
| 96 |
+
if ( $parent_node->nodeName !== 'body' && AMP_DOM_Utils::is_node_empty( $parent_node ) ) {
|
| 97 |
$parent_node->parentNode->removeChild( $parent_node );
|
| 98 |
}
|
| 99 |
}
|
| 111 |
private function sanitize_a_attribute( $node, $attribute ) {
|
| 112 |
$attribute_name = strtolower( $attribute->name );
|
| 113 |
|
| 114 |
+
if ( $attribute_name === 'rel' && $attribute->value !== 'nofollow' ) {
|
| 115 |
$node->removeAttribute( $attribute_name );
|
| 116 |
}
|
| 117 |
}
|
| 127 |
private function sanitize_pre_attribute( $node, $attribute ) {
|
| 128 |
$attribute_name = strtolower( $attribute->name );
|
| 129 |
|
| 130 |
+
if ( $attribute_name === 'line' ) {
|
| 131 |
$node->removeAttribute( $attribute_name );
|
| 132 |
}
|
| 133 |
}
|
| 143 |
private function sanitize_cell_attribute( $node, $attribute ) {
|
| 144 |
$attribute_name = strtolower( $attribute->name );
|
| 145 |
|
| 146 |
+
if ( in_array( $attribute_name, [ 'width', 'height' ], true ) ) {
|
| 147 |
$node->removeAttribute( $attribute_name );
|
| 148 |
}
|
| 149 |
}
|
| 159 |
private function sanitize_table_attribute( $node, $attribute ) {
|
| 160 |
$attribute_name = strtolower( $attribute->name );
|
| 161 |
|
| 162 |
+
if ( in_array( $attribute_name, [ 'border', 'cellspacing', 'cellpadding', 'summary' ], true ) ) {
|
| 163 |
$node->removeAttribute( $attribute_name );
|
| 164 |
}
|
| 165 |
}
|
classes/css-builder.php
CHANGED
|
@@ -19,7 +19,7 @@ if ( ! class_exists( 'YoastSEO_AMP_CSS_Builder', false ) ) {
|
|
| 19 |
*
|
| 20 |
* @var array
|
| 21 |
*/
|
| 22 |
-
private $items =
|
| 23 |
|
| 24 |
/**
|
| 25 |
* Adds the passed option to the CSS map.
|
|
@@ -31,10 +31,10 @@ if ( ! class_exists( 'YoastSEO_AMP_CSS_Builder', false ) ) {
|
|
| 31 |
* @return void
|
| 32 |
*/
|
| 33 |
public function add_option( $option_key, $selector, $property ) {
|
| 34 |
-
$this->items[ $option_key ] =
|
| 35 |
'selector' => $selector,
|
| 36 |
'property' => $property,
|
| 37 |
-
|
| 38 |
}
|
| 39 |
|
| 40 |
/**
|
|
@@ -46,7 +46,7 @@ if ( ! class_exists( 'YoastSEO_AMP_CSS_Builder', false ) ) {
|
|
| 46 |
$options = YoastSEO_AMP_Options::get();
|
| 47 |
|
| 48 |
$output = "\n";
|
| 49 |
-
$css =
|
| 50 |
|
| 51 |
$options = array_filter( $options );
|
| 52 |
$apply = array_intersect_key( $this->items, $options );
|
|
@@ -55,7 +55,7 @@ if ( ! class_exists( 'YoastSEO_AMP_CSS_Builder', false ) ) {
|
|
| 55 |
foreach ( $apply as $key => $placement ) {
|
| 56 |
|
| 57 |
if ( ! isset( $css[ $placement['selector'] ] ) ) {
|
| 58 |
-
$css[ $placement['selector'] ] =
|
| 59 |
}
|
| 60 |
|
| 61 |
$css[ $placement['selector'] ][ $placement['property'] ] = $options[ $key ];
|
| 19 |
*
|
| 20 |
* @var array
|
| 21 |
*/
|
| 22 |
+
private $items = [];
|
| 23 |
|
| 24 |
/**
|
| 25 |
* Adds the passed option to the CSS map.
|
| 31 |
* @return void
|
| 32 |
*/
|
| 33 |
public function add_option( $option_key, $selector, $property ) {
|
| 34 |
+
$this->items[ $option_key ] = [
|
| 35 |
'selector' => $selector,
|
| 36 |
'property' => $property,
|
| 37 |
+
];
|
| 38 |
}
|
| 39 |
|
| 40 |
/**
|
| 46 |
$options = YoastSEO_AMP_Options::get();
|
| 47 |
|
| 48 |
$output = "\n";
|
| 49 |
+
$css = [];
|
| 50 |
|
| 51 |
$options = array_filter( $options );
|
| 52 |
$apply = array_intersect_key( $this->items, $options );
|
| 55 |
foreach ( $apply as $key => $placement ) {
|
| 56 |
|
| 57 |
if ( ! isset( $css[ $placement['selector'] ] ) ) {
|
| 58 |
+
$css[ $placement['selector'] ] = [];
|
| 59 |
}
|
| 60 |
|
| 61 |
$css[ $placement['selector'] ][ $placement['property'] ] = $options[ $key ];
|
classes/form.php
ADDED
|
@@ -0,0 +1,238 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* YoastSEO_AMP_Glue plugin file.
|
| 4 |
+
*
|
| 5 |
+
* @package YoastSEO_AMP_Glue\Admin
|
| 6 |
+
* @author Joost de Valk
|
| 7 |
+
* @copyright 2016 Yoast BV
|
| 8 |
+
* @license GPL-2.0+
|
| 9 |
+
*/
|
| 10 |
+
|
| 11 |
+
/**
|
| 12 |
+
* Class YoastSEO_AMP_Form
|
| 13 |
+
*/
|
| 14 |
+
class YoastSEO_AMP_Form extends Yoast_Form {
|
| 15 |
+
|
| 16 |
+
/**
|
| 17 |
+
* The options.
|
| 18 |
+
*
|
| 19 |
+
* @var array
|
| 20 |
+
*/
|
| 21 |
+
protected $options;
|
| 22 |
+
|
| 23 |
+
/**
|
| 24 |
+
* YoastSEO_AMP_Form constructor.
|
| 25 |
+
*/
|
| 26 |
+
public function __construct() {
|
| 27 |
+
$this->options = YoastSEO_AMP_Options::get();
|
| 28 |
+
}
|
| 29 |
+
|
| 30 |
+
/**
|
| 31 |
+
* Create a toggle switch input field using two radio buttons.
|
| 32 |
+
*
|
| 33 |
+
* @param string $var The variable within the option to create the radio buttons for.
|
| 34 |
+
* @param array $values Associative array of on/off keys and their values to be used as
|
| 35 |
+
* the label elements text for the radio buttons. Optionally, each
|
| 36 |
+
* value can be an array of visible label text and screen reader text.
|
| 37 |
+
* @param string $label The visual label for the radio buttons group, used as the fieldset legend.
|
| 38 |
+
* @param string $help Inline Help that will be printed out before the visible toggles text.
|
| 39 |
+
*/
|
| 40 |
+
public function toggle_switch( $var, $values, $label, $help = '' ) {
|
| 41 |
+
if ( ! is_array( $values ) || $values === [] ) {
|
| 42 |
+
return;
|
| 43 |
+
}
|
| 44 |
+
$val = $this->get_option_value( $var, false );
|
| 45 |
+
if ( $val === true ) {
|
| 46 |
+
$val = 'on';
|
| 47 |
+
}
|
| 48 |
+
if ( $val === false ) {
|
| 49 |
+
$val = 'off';
|
| 50 |
+
}
|
| 51 |
+
|
| 52 |
+
$help_class = ! empty( $help ) ? ' switch-container__has-help' : '';
|
| 53 |
+
|
| 54 |
+
$var_esc = esc_attr( $var );
|
| 55 |
+
|
| 56 |
+
printf( '<div class="%s">', esc_attr( 'switch-container' . $help_class ) );
|
| 57 |
+
|
| 58 |
+
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: The `$label` contains html.
|
| 59 |
+
echo '<fieldset id="', esc_attr( $var ), '" class="fieldset-switch-toggle"><legend>', $label, '</legend>', $help;
|
| 60 |
+
|
| 61 |
+
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: The method returns html value.
|
| 62 |
+
echo $this->get_disabled_note( $var );
|
| 63 |
+
echo '<div class="switch-toggle switch-candy switch-yoast-seo">';
|
| 64 |
+
|
| 65 |
+
foreach ( $values as $key => $value ) {
|
| 66 |
+
$screen_reader_text_html = '';
|
| 67 |
+
|
| 68 |
+
if ( is_array( $value ) ) {
|
| 69 |
+
$screen_reader_text = $value['screen_reader_text'];
|
| 70 |
+
$screen_reader_text_html = '<span class="screen-reader-text"> ' . esc_html( $screen_reader_text ) . '</span>';
|
| 71 |
+
$value = $value['text'];
|
| 72 |
+
}
|
| 73 |
+
|
| 74 |
+
$key_esc = esc_attr( $key );
|
| 75 |
+
$for = $var_esc . '-' . $key_esc;
|
| 76 |
+
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: The `$key_esc` value is already escaped.
|
| 77 |
+
echo '<input type="radio" id="' . $for . '" name="' . esc_attr( $this->option_name ) . '[' . $var_esc . ']" value="' . $key_esc . '" ' . checked( $val, $key_esc, false ) . disabled( $this->is_control_disabled( $var ), true, false ) . ' />',
|
| 78 |
+
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: The `$screen_reader_text_html` value contains html.
|
| 79 |
+
'<label for="', $for, '">', esc_html( $value ), $screen_reader_text_html,'</label>';
|
| 80 |
+
}
|
| 81 |
+
|
| 82 |
+
echo '<a></a></div></fieldset><div class="clear"></div></div>' . PHP_EOL . PHP_EOL;
|
| 83 |
+
}
|
| 84 |
+
|
| 85 |
+
/**
|
| 86 |
+
* Media input.
|
| 87 |
+
*
|
| 88 |
+
* @param string $var Option name.
|
| 89 |
+
* @param string $label Label message.
|
| 90 |
+
*/
|
| 91 |
+
public function media_input( $var, $label ) {
|
| 92 |
+
$val = $this->get_option_value( $var, '' );
|
| 93 |
+
$id_value = $this->get_option_value( $var . '_id', '' );
|
| 94 |
+
|
| 95 |
+
$var_esc = esc_attr( $var );
|
| 96 |
+
|
| 97 |
+
$this->label(
|
| 98 |
+
$label,
|
| 99 |
+
[
|
| 100 |
+
'for' => 'wpseo_' . $var,
|
| 101 |
+
'class' => 'select',
|
| 102 |
+
]
|
| 103 |
+
);
|
| 104 |
+
|
| 105 |
+
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: The `$var_esc` value is already escaped.
|
| 106 |
+
$id_field_id = 'wpseo_' . $var_esc . '_id';
|
| 107 |
+
|
| 108 |
+
echo '<span>';
|
| 109 |
+
echo '<input',
|
| 110 |
+
' class="textinput"',
|
| 111 |
+
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: The `$var_esc` value is already escaped.
|
| 112 |
+
' id="wpseo_', $var_esc, '"',
|
| 113 |
+
' type="text" size="36"',
|
| 114 |
+
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: The `$var_esc` value is already escaped.
|
| 115 |
+
' name="', esc_attr( $this->option_name ), '[', $var_esc, ']"',
|
| 116 |
+
' value="', esc_attr( $val ), '"',
|
| 117 |
+
' readonly="readonly"',
|
| 118 |
+
' /> ';
|
| 119 |
+
echo '<input',
|
| 120 |
+
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: The `$var_esc` value is already escaped.
|
| 121 |
+
' id="wpseo_', $var_esc, '_button"',
|
| 122 |
+
' class="wpseo_image_upload_button button"',
|
| 123 |
+
' type="button"',
|
| 124 |
+
' value="', esc_attr__( 'Upload Image', 'yoastseo-amp' ), '"',
|
| 125 |
+
' data-target-id="', esc_attr( $id_field_id ), '"',
|
| 126 |
+
disabled( $this->is_control_disabled( $var ), true, false ),
|
| 127 |
+
' /> ';
|
| 128 |
+
echo '<input',
|
| 129 |
+
' class="wpseo_image_remove_button button"',
|
| 130 |
+
' type="button"',
|
| 131 |
+
' value="', esc_attr__( 'Clear Image', 'yoastseo-amp' ), '"',
|
| 132 |
+
disabled( $this->is_control_disabled( $var ), true, false ),
|
| 133 |
+
' />';
|
| 134 |
+
echo '<input',
|
| 135 |
+
' type="hidden"',
|
| 136 |
+
' id="', esc_attr( $id_field_id ), '"',
|
| 137 |
+
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: The `$var_esc` value is already escaped.
|
| 138 |
+
' name="', esc_attr( $this->option_name ), '[', $var_esc, '_id]"',
|
| 139 |
+
' value="', esc_attr( $id_value ), '"',
|
| 140 |
+
' />';
|
| 141 |
+
echo '</span>';
|
| 142 |
+
echo '<br class="clear"/>';
|
| 143 |
+
}
|
| 144 |
+
|
| 145 |
+
/**
|
| 146 |
+
* Create a light switch input field using a single checkbox.
|
| 147 |
+
*
|
| 148 |
+
* @param string $var The variable within the option to create the checkbox for.
|
| 149 |
+
* @param string $label The label element text for the checkbox.
|
| 150 |
+
* @param array $buttons Array of two visual labels for the buttons (defaults Disabled/Enabled).
|
| 151 |
+
* @param bool $reverse Reverse order of buttons (default true).
|
| 152 |
+
* @param string $help Inline Help that will be printed out before the visible toggles text.
|
| 153 |
+
* @param bool $strong Whether the visual label is displayed in strong text. Default is false.
|
| 154 |
+
*/
|
| 155 |
+
public function light_switch( $var, $label, $buttons = [], $reverse = true, $help = '', $strong = false ) {
|
| 156 |
+
$val = $this->get_option_value( $var, false );
|
| 157 |
+
|
| 158 |
+
if ( $val === true ) {
|
| 159 |
+
$val = 'on';
|
| 160 |
+
}
|
| 161 |
+
|
| 162 |
+
$class = 'switch-light switch-candy switch-yoast-seo';
|
| 163 |
+
|
| 164 |
+
if ( $reverse ) {
|
| 165 |
+
$class .= ' switch-yoast-seo-reverse';
|
| 166 |
+
}
|
| 167 |
+
|
| 168 |
+
if ( empty( $buttons ) ) {
|
| 169 |
+
$buttons = [ __( 'Disabled', 'yoastseo-amp' ), __( 'Enabled', 'yoastseo-amp' ) ];
|
| 170 |
+
}
|
| 171 |
+
|
| 172 |
+
list( $off_button, $on_button ) = $buttons;
|
| 173 |
+
|
| 174 |
+
$help_class = ! empty( $help ) ? ' switch-container__has-help' : '';
|
| 175 |
+
|
| 176 |
+
$strong_class = ( $strong ) ? ' switch-light-visual-label__strong' : '';
|
| 177 |
+
|
| 178 |
+
echo '<div class="switch-container', esc_attr( $help_class ), '">',
|
| 179 |
+
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: The `$help` value is already escaped.
|
| 180 |
+
'<span class="switch-light-visual-label' . esc_attr( $strong_class ) . '" id="', esc_attr( $var . '-label' ), '">', esc_html( $label ), '</span>' . $help,
|
| 181 |
+
'<label class="', esc_attr( $class ), '"><b class="switch-yoast-seo-jaws-a11y"> </b>',
|
| 182 |
+
'<input type="checkbox" aria-labelledby="', esc_attr( $var . '-label' ), '" id="', esc_attr( $var ), '" name="', esc_attr( $this->option_name ), '[', esc_attr( $var ), ']" value="on"', checked( $val, 'on', false ), disabled( $this->is_control_disabled( $var ), true, false ), '/>',
|
| 183 |
+
'<span aria-hidden="true">
|
| 184 |
+
<span>', esc_html( $off_button ) ,'</span>
|
| 185 |
+
<span>', esc_html( $on_button ) ,'</span>
|
| 186 |
+
<a></a>
|
| 187 |
+
</span>
|
| 188 |
+
</label><div class="clear"></div></div>';
|
| 189 |
+
}
|
| 190 |
+
|
| 191 |
+
/**
|
| 192 |
+
* Create a textarea.
|
| 193 |
+
*
|
| 194 |
+
* @param string $var The variable within the option to create the textarea for.
|
| 195 |
+
* @param string $label The label to show for the variable.
|
| 196 |
+
* @param string|array $attr The CSS class or an array of attributes to assign to the textarea.
|
| 197 |
+
*/
|
| 198 |
+
public function textarea( $var, $label, $attr = [] ) {
|
| 199 |
+
if ( ! is_array( $attr ) ) {
|
| 200 |
+
$attr = [
|
| 201 |
+
'class' => $attr,
|
| 202 |
+
];
|
| 203 |
+
}
|
| 204 |
+
|
| 205 |
+
$defaults = [
|
| 206 |
+
'cols' => '',
|
| 207 |
+
'rows' => '',
|
| 208 |
+
'class' => '',
|
| 209 |
+
];
|
| 210 |
+
$attr = wp_parse_args( $attr, $defaults );
|
| 211 |
+
$val = $this->get_option_value( $var, '' );
|
| 212 |
+
|
| 213 |
+
$this->label(
|
| 214 |
+
$label,
|
| 215 |
+
[
|
| 216 |
+
'for' => $var,
|
| 217 |
+
'class' => 'textinput',
|
| 218 |
+
]
|
| 219 |
+
);
|
| 220 |
+
echo '<textarea cols="' . esc_attr( $attr['cols'] ) . '" rows="' . esc_attr( $attr['rows'] ) . '" class="textinput ' . esc_attr( $attr['class'] ) . '" id="' . esc_attr( $var ) . '" name="' . esc_attr( $this->option_name ) . '[' . esc_attr( $var ) . ']"', disabled( $this->is_control_disabled( $var ), true, false ), '>' . esc_textarea( $val ) . '</textarea><br class="clear" />';
|
| 221 |
+
}
|
| 222 |
+
|
| 223 |
+
/**
|
| 224 |
+
* Retrieves the option value.
|
| 225 |
+
*
|
| 226 |
+
* @param string $option_value The option value to retrieve.
|
| 227 |
+
* @param string|null $default The default value.
|
| 228 |
+
*
|
| 229 |
+
* @return mixed|string The option value.
|
| 230 |
+
*/
|
| 231 |
+
protected function get_option_value( $option_value, $default = null ) {
|
| 232 |
+
if ( isset( $this->options[ $option_value ] ) ) {
|
| 233 |
+
return $this->options[ $option_value ];
|
| 234 |
+
}
|
| 235 |
+
|
| 236 |
+
return $default;
|
| 237 |
+
}
|
| 238 |
+
}
|
classes/frontend.php
CHANGED
|
@@ -41,17 +41,17 @@ if ( ! class_exists( 'YoastSEO_AMP_Frontend' ) ) {
|
|
| 41 |
public function __construct() {
|
| 42 |
$this->set_options();
|
| 43 |
|
| 44 |
-
add_action( 'amp_init',
|
| 45 |
|
| 46 |
-
add_action( 'amp_post_template_css',
|
| 47 |
-
add_action( 'amp_post_template_head',
|
| 48 |
-
add_action( 'amp_post_template_footer',
|
| 49 |
|
| 50 |
-
add_filter( 'amp_post_template_data',
|
| 51 |
-
add_filter( 'amp_post_template_metadata',
|
| 52 |
-
add_filter( 'amp_post_template_analytics',
|
| 53 |
|
| 54 |
-
add_filter( 'amp_content_sanitizers',
|
| 55 |
}
|
| 56 |
|
| 57 |
/**
|
|
@@ -74,7 +74,7 @@ if ( ! class_exists( 'YoastSEO_AMP_Frontend' ) ) {
|
|
| 74 |
public function add_sanitizer( $sanitizers ) {
|
| 75 |
require_once 'blacklist-sanitizer.php';
|
| 76 |
|
| 77 |
-
$sanitizers['Yoast_AMP_Blacklist_Sanitizer'] =
|
| 78 |
|
| 79 |
return $sanitizers;
|
| 80 |
}
|
|
@@ -104,21 +104,21 @@ if ( ! class_exists( 'YoastSEO_AMP_Frontend' ) ) {
|
|
| 104 |
}
|
| 105 |
$tracking_code = Yoast_GA_Options::instance()->get_tracking_code();
|
| 106 |
|
| 107 |
-
$analytics['yst-googleanalytics'] =
|
| 108 |
'type' => 'googleanalytics',
|
| 109 |
-
'attributes' =>
|
| 110 |
-
'config_data' =>
|
| 111 |
-
'vars' =>
|
| 112 |
'account' => $tracking_code,
|
| 113 |
-
|
| 114 |
-
'triggers' =>
|
| 115 |
-
'trackPageview' =>
|
| 116 |
'on' => 'visible',
|
| 117 |
'request' => 'pageview',
|
| 118 |
-
|
| 119 |
-
|
| 120 |
-
|
| 121 |
-
|
| 122 |
|
| 123 |
return $analytics;
|
| 124 |
}
|
|
@@ -129,8 +129,8 @@ if ( ! class_exists( 'YoastSEO_AMP_Frontend' ) ) {
|
|
| 129 |
* @return void
|
| 130 |
*/
|
| 131 |
public function post_types() {
|
| 132 |
-
$post_types = get_post_types(
|
| 133 |
-
if ( is_array( $post_types ) && $post_types !==
|
| 134 |
foreach ( $post_types as $post_type ) {
|
| 135 |
|
| 136 |
$post_type_name = $post_type->name;
|
|
@@ -140,7 +140,7 @@ if ( ! class_exists( 'YoastSEO_AMP_Frontend' ) ) {
|
|
| 140 |
}
|
| 141 |
|
| 142 |
// If AMP page support is not present, don't allow enabling it here.
|
| 143 |
-
if ( 'page'
|
| 144 |
continue;
|
| 145 |
}
|
| 146 |
|
|
@@ -149,8 +149,8 @@ if ( ! class_exists( 'YoastSEO_AMP_Frontend' ) ) {
|
|
| 149 |
continue;
|
| 150 |
}
|
| 151 |
|
| 152 |
-
if ( 'post'
|
| 153 |
-
add_action( 'wp',
|
| 154 |
continue;
|
| 155 |
}
|
| 156 |
|
|
@@ -306,7 +306,7 @@ if ( ! class_exists( 'YoastSEO_AMP_Frontend' ) ) {
|
|
| 306 |
}
|
| 307 |
|
| 308 |
// The logo needs to be 600px wide max, 60px high max.
|
| 309 |
-
$logo = $this->get_image_object( $this->wpseo_options['company_logo'],
|
| 310 |
if ( is_array( $logo ) ) {
|
| 311 |
$metadata['publisher']['logo'] = $logo;
|
| 312 |
}
|
|
@@ -330,12 +330,12 @@ if ( ! class_exists( 'YoastSEO_AMP_Frontend' ) ) {
|
|
| 330 |
$image_src = wp_get_attachment_image_src( $image_id, $size );
|
| 331 |
|
| 332 |
if ( is_array( $image_src ) ) {
|
| 333 |
-
return
|
| 334 |
'@type' => 'ImageObject',
|
| 335 |
'url' => $image_src[0],
|
| 336 |
'width' => $image_src[1],
|
| 337 |
'height' => $image_src[2],
|
| 338 |
-
|
| 339 |
}
|
| 340 |
|
| 341 |
return false;
|
|
@@ -380,18 +380,36 @@ if ( ! class_exists( 'YoastSEO_AMP_Frontend' ) ) {
|
|
| 380 |
*/
|
| 381 |
private function get_post_schema_type( $post ) {
|
| 382 |
$type = 'WebPage';
|
| 383 |
-
if (
|
| 384 |
$type = 'Article';
|
| 385 |
}
|
| 386 |
|
| 387 |
/**
|
| 388 |
* Filter: 'yoastseo_amp_schema_type' - Allow changing the Schema.org type for the post.
|
| 389 |
*
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 390 |
* @api string $type The Schema.org type for the $post.
|
| 391 |
*
|
| 392 |
* @param WP_Post $post
|
| 393 |
*/
|
| 394 |
-
$type = apply_filters( '
|
| 395 |
|
| 396 |
return $type;
|
| 397 |
}
|
|
@@ -405,7 +423,7 @@ if ( ! class_exists( 'YoastSEO_AMP_Frontend' ) ) {
|
|
| 405 |
* @return array The version dependent class names.
|
| 406 |
*/
|
| 407 |
private function get_class_selectors() {
|
| 408 |
-
$selectors =
|
| 409 |
'header-color' => 'nav.amp-wp-title-bar',
|
| 410 |
'headings-color' => '.amp-wp-title, h2, h3, h4',
|
| 411 |
'text-color' => '.amp-wp-content',
|
|
@@ -418,18 +436,18 @@ if ( ! class_exists( 'YoastSEO_AMP_Frontend' ) ) {
|
|
| 418 |
'link-color-hover' => 'a:hover, a:focus',
|
| 419 |
|
| 420 |
'meta-color' => '.amp-wp-meta li, .amp-wp-meta li a',
|
| 421 |
-
|
| 422 |
|
| 423 |
// CSS classnames have been changed in version 0.4.0.
|
| 424 |
if ( version_compare( AMP__VERSION, '0.4.0', '>=' ) ) {
|
| 425 |
-
$selectors_v4 =
|
| 426 |
'header-color' => 'header.amp-wp-header, html',
|
| 427 |
'text-color' => 'div.amp-wp-article',
|
| 428 |
'blockquote-bg-color' => '.amp-wp-article-content blockquote',
|
| 429 |
'blockquote-border-color' => '.amp-wp-article-content blockquote',
|
| 430 |
'blockquote-text-color' => '.amp-wp-article-content blockquote',
|
| 431 |
'meta-color' => '.amp-wp-meta, .amp-wp-meta a',
|
| 432 |
-
|
| 433 |
$selectors = array_merge( $selectors, $selectors_v4 );
|
| 434 |
}
|
| 435 |
|
| 41 |
public function __construct() {
|
| 42 |
$this->set_options();
|
| 43 |
|
| 44 |
+
add_action( 'amp_init', [ $this, 'post_types' ] );
|
| 45 |
|
| 46 |
+
add_action( 'amp_post_template_css', [ $this, 'additional_css' ] );
|
| 47 |
+
add_action( 'amp_post_template_head', [ $this, 'extra_head' ] );
|
| 48 |
+
add_action( 'amp_post_template_footer', [ $this, 'extra_footer' ] );
|
| 49 |
|
| 50 |
+
add_filter( 'amp_post_template_data', [ $this, 'fix_amp_post_data' ] );
|
| 51 |
+
add_filter( 'amp_post_template_metadata', [ $this, 'fix_amp_post_metadata' ], 10, 2 );
|
| 52 |
+
add_filter( 'amp_post_template_analytics', [ $this, 'analytics' ] );
|
| 53 |
|
| 54 |
+
add_filter( 'amp_content_sanitizers', [ $this, 'add_sanitizer' ] );
|
| 55 |
}
|
| 56 |
|
| 57 |
/**
|
| 74 |
public function add_sanitizer( $sanitizers ) {
|
| 75 |
require_once 'blacklist-sanitizer.php';
|
| 76 |
|
| 77 |
+
$sanitizers['Yoast_AMP_Blacklist_Sanitizer'] = [];
|
| 78 |
|
| 79 |
return $sanitizers;
|
| 80 |
}
|
| 104 |
}
|
| 105 |
$tracking_code = Yoast_GA_Options::instance()->get_tracking_code();
|
| 106 |
|
| 107 |
+
$analytics['yst-googleanalytics'] = [
|
| 108 |
'type' => 'googleanalytics',
|
| 109 |
+
'attributes' => [],
|
| 110 |
+
'config_data' => [
|
| 111 |
+
'vars' => [
|
| 112 |
'account' => $tracking_code,
|
| 113 |
+
],
|
| 114 |
+
'triggers' => [
|
| 115 |
+
'trackPageview' => [
|
| 116 |
'on' => 'visible',
|
| 117 |
'request' => 'pageview',
|
| 118 |
+
],
|
| 119 |
+
],
|
| 120 |
+
],
|
| 121 |
+
];
|
| 122 |
|
| 123 |
return $analytics;
|
| 124 |
}
|
| 129 |
* @return void
|
| 130 |
*/
|
| 131 |
public function post_types() {
|
| 132 |
+
$post_types = get_post_types( [ 'public' => true ], 'objects' );
|
| 133 |
+
if ( is_array( $post_types ) && $post_types !== [] ) {
|
| 134 |
foreach ( $post_types as $post_type ) {
|
| 135 |
|
| 136 |
$post_type_name = $post_type->name;
|
| 140 |
}
|
| 141 |
|
| 142 |
// If AMP page support is not present, don't allow enabling it here.
|
| 143 |
+
if ( $post_type_name === 'page' && ! post_type_supports( 'page', AMP_QUERY_VAR ) ) {
|
| 144 |
continue;
|
| 145 |
}
|
| 146 |
|
| 149 |
continue;
|
| 150 |
}
|
| 151 |
|
| 152 |
+
if ( $post_type_name === 'post' ) {
|
| 153 |
+
add_action( 'wp', [ $this, 'disable_amp_for_posts' ] );
|
| 154 |
continue;
|
| 155 |
}
|
| 156 |
|
| 306 |
}
|
| 307 |
|
| 308 |
// The logo needs to be 600px wide max, 60px high max.
|
| 309 |
+
$logo = $this->get_image_object( $this->wpseo_options['company_logo'], [ 600, 60 ] );
|
| 310 |
if ( is_array( $logo ) ) {
|
| 311 |
$metadata['publisher']['logo'] = $logo;
|
| 312 |
}
|
| 330 |
$image_src = wp_get_attachment_image_src( $image_id, $size );
|
| 331 |
|
| 332 |
if ( is_array( $image_src ) ) {
|
| 333 |
+
return [
|
| 334 |
'@type' => 'ImageObject',
|
| 335 |
'url' => $image_src[0],
|
| 336 |
'width' => $image_src[1],
|
| 337 |
'height' => $image_src[2],
|
| 338 |
+
];
|
| 339 |
}
|
| 340 |
|
| 341 |
return false;
|
| 380 |
*/
|
| 381 |
private function get_post_schema_type( $post ) {
|
| 382 |
$type = 'WebPage';
|
| 383 |
+
if ( $post->post_type === 'post' ) {
|
| 384 |
$type = 'Article';
|
| 385 |
}
|
| 386 |
|
| 387 |
/**
|
| 388 |
* Filter: 'yoastseo_amp_schema_type' - Allow changing the Schema.org type for the post.
|
| 389 |
*
|
| 390 |
+
* @deprecated 0.6.0. Use the {@see 'Yoast\WP\AMP\schema_type'} filter instead.
|
| 391 |
+
*
|
| 392 |
+
* @api string $type The Schema.org type for the $post.
|
| 393 |
+
*
|
| 394 |
+
* @param WP_Post $post
|
| 395 |
+
*/
|
| 396 |
+
$type = apply_filters_deprecated(
|
| 397 |
+
'yoastseo_amp_schema_type',
|
| 398 |
+
[ $type, $post ],
|
| 399 |
+
'YoastSEO AMP 0.6.0',
|
| 400 |
+
'Yoast\WP\AMP\schema_type'
|
| 401 |
+
);
|
| 402 |
+
|
| 403 |
+
/**
|
| 404 |
+
* Filter: 'Yoast\WP\AMP\schema_type' - Allow changing the Schema.org type for the post.
|
| 405 |
+
*
|
| 406 |
+
* @since 0.6.0
|
| 407 |
+
*
|
| 408 |
* @api string $type The Schema.org type for the $post.
|
| 409 |
*
|
| 410 |
* @param WP_Post $post
|
| 411 |
*/
|
| 412 |
+
$type = apply_filters( 'Yoast\WP\AMP\schema_type', $type, $post );
|
| 413 |
|
| 414 |
return $type;
|
| 415 |
}
|
| 423 |
* @return array The version dependent class names.
|
| 424 |
*/
|
| 425 |
private function get_class_selectors() {
|
| 426 |
+
$selectors = [
|
| 427 |
'header-color' => 'nav.amp-wp-title-bar',
|
| 428 |
'headings-color' => '.amp-wp-title, h2, h3, h4',
|
| 429 |
'text-color' => '.amp-wp-content',
|
| 436 |
'link-color-hover' => 'a:hover, a:focus',
|
| 437 |
|
| 438 |
'meta-color' => '.amp-wp-meta li, .amp-wp-meta li a',
|
| 439 |
+
];
|
| 440 |
|
| 441 |
// CSS classnames have been changed in version 0.4.0.
|
| 442 |
if ( version_compare( AMP__VERSION, '0.4.0', '>=' ) ) {
|
| 443 |
+
$selectors_v4 = [
|
| 444 |
'header-color' => 'header.amp-wp-header, html',
|
| 445 |
'text-color' => 'div.amp-wp-article',
|
| 446 |
'blockquote-bg-color' => '.amp-wp-article-content blockquote',
|
| 447 |
'blockquote-border-color' => '.amp-wp-article-content blockquote',
|
| 448 |
'blockquote-text-color' => '.amp-wp-article-content blockquote',
|
| 449 |
'meta-color' => '.amp-wp-meta, .amp-wp-meta a',
|
| 450 |
+
];
|
| 451 |
$selectors = array_merge( $selectors, $selectors_v4 );
|
| 452 |
}
|
| 453 |
|
classes/options.php
CHANGED
|
@@ -33,7 +33,7 @@ if ( ! class_exists( 'YoastSEO_AMP_Options' ) ) {
|
|
| 33 |
*
|
| 34 |
* @var array
|
| 35 |
*/
|
| 36 |
-
private $defaults =
|
| 37 |
'version' => 1,
|
| 38 |
'amp_site_icon' => '',
|
| 39 |
'default_image' => '',
|
|
@@ -50,7 +50,7 @@ if ( ! class_exists( 'YoastSEO_AMP_Options' ) ) {
|
|
| 50 |
'extra-css' => '',
|
| 51 |
'extra-head' => '',
|
| 52 |
'analytics-extra' => '',
|
| 53 |
-
|
| 54 |
|
| 55 |
/**
|
| 56 |
* Class instance.
|
|
@@ -64,14 +64,14 @@ if ( ! class_exists( 'YoastSEO_AMP_Options' ) ) {
|
|
| 64 |
*/
|
| 65 |
private function __construct() {
|
| 66 |
// Register settings.
|
| 67 |
-
add_action( 'admin_init',
|
| 68 |
}
|
| 69 |
|
| 70 |
/**
|
| 71 |
* Register the premium settings.
|
| 72 |
*/
|
| 73 |
public function register_settings() {
|
| 74 |
-
register_setting( 'wpseo_amp_settings', $this->option_name,
|
| 75 |
}
|
| 76 |
|
| 77 |
/**
|
|
@@ -79,7 +79,7 @@ if ( ! class_exists( 'YoastSEO_AMP_Options' ) ) {
|
|
| 79 |
*
|
| 80 |
* @param array $options Options as received in $_POST.
|
| 81 |
*
|
| 82 |
-
* @return
|
| 83 |
*/
|
| 84 |
public function sanitize_options( $options ) {
|
| 85 |
$options['version'] = 1;
|
|
@@ -93,7 +93,7 @@ if ( ! class_exists( 'YoastSEO_AMP_Options' ) ) {
|
|
| 93 |
// Only allow meta and link tags in head.
|
| 94 |
$options['extra-head'] = strip_tags( $options['extra-head'], '<link><meta>' );
|
| 95 |
|
| 96 |
-
$colors =
|
| 97 |
'header-color',
|
| 98 |
'headings-color',
|
| 99 |
'text-color',
|
|
@@ -102,7 +102,7 @@ if ( ! class_exists( 'YoastSEO_AMP_Options' ) ) {
|
|
| 102 |
'blockquote-text-color',
|
| 103 |
'blockquote-bg-color',
|
| 104 |
'blockquote-border-color',
|
| 105 |
-
|
| 106 |
|
| 107 |
foreach ( $colors as $color ) {
|
| 108 |
$options[ $color ] = $this->sanitize_color( $options[ $color ], '' );
|
|
@@ -110,7 +110,7 @@ if ( ! class_exists( 'YoastSEO_AMP_Options' ) ) {
|
|
| 110 |
|
| 111 |
// Only allow 'on' or 'off'.
|
| 112 |
foreach ( $options as $key => $value ) {
|
| 113 |
-
if (
|
| 114 |
$options[ $key ] = ( $value === 'on' ) ? 'on' : 'off';
|
| 115 |
}
|
| 116 |
}
|
|
@@ -215,15 +215,15 @@ if ( ! class_exists( 'YoastSEO_AMP_Options' ) ) {
|
|
| 215 |
* Get post types.
|
| 216 |
*/
|
| 217 |
private function update_post_type_settings() {
|
| 218 |
-
$post_type_names =
|
| 219 |
|
| 220 |
-
$post_types = get_post_types(
|
| 221 |
|
| 222 |
-
if ( is_array( $post_types ) && $post_types !==
|
| 223 |
foreach ( $post_types as $post_type ) {
|
| 224 |
if ( ! isset( $this->options[ 'post_types-' . $post_type->name . '-amp' ] ) ) {
|
| 225 |
$this->options[ 'post_types-' . $post_type->name . '-amp' ] = 'off';
|
| 226 |
-
if (
|
| 227 |
$this->options[ 'post_types-' . $post_type->name . '-amp' ] = 'on';
|
| 228 |
}
|
| 229 |
}
|
|
@@ -263,11 +263,11 @@ if ( ! class_exists( 'YoastSEO_AMP_Options' ) ) {
|
|
| 263 |
$parts,
|
| 264 |
1,
|
| 265 |
null,
|
| 266 |
-
|
| 267 |
'<script type="application/json">',
|
| 268 |
trim( $json ),
|
| 269 |
'</script>',
|
| 270 |
-
|
| 271 |
);
|
| 272 |
|
| 273 |
return implode( "\n", $parts );
|
| 33 |
*
|
| 34 |
* @var array
|
| 35 |
*/
|
| 36 |
+
private $defaults = [
|
| 37 |
'version' => 1,
|
| 38 |
'amp_site_icon' => '',
|
| 39 |
'default_image' => '',
|
| 50 |
'extra-css' => '',
|
| 51 |
'extra-head' => '',
|
| 52 |
'analytics-extra' => '',
|
| 53 |
+
];
|
| 54 |
|
| 55 |
/**
|
| 56 |
* Class instance.
|
| 64 |
*/
|
| 65 |
private function __construct() {
|
| 66 |
// Register settings.
|
| 67 |
+
add_action( 'admin_init', [ $this, 'register_settings' ] );
|
| 68 |
}
|
| 69 |
|
| 70 |
/**
|
| 71 |
* Register the premium settings.
|
| 72 |
*/
|
| 73 |
public function register_settings() {
|
| 74 |
+
register_setting( 'wpseo_amp_settings', $this->option_name, [ $this, 'sanitize_options' ] );
|
| 75 |
}
|
| 76 |
|
| 77 |
/**
|
| 79 |
*
|
| 80 |
* @param array $options Options as received in $_POST.
|
| 81 |
*
|
| 82 |
+
* @return array
|
| 83 |
*/
|
| 84 |
public function sanitize_options( $options ) {
|
| 85 |
$options['version'] = 1;
|
| 93 |
// Only allow meta and link tags in head.
|
| 94 |
$options['extra-head'] = strip_tags( $options['extra-head'], '<link><meta>' );
|
| 95 |
|
| 96 |
+
$colors = [
|
| 97 |
'header-color',
|
| 98 |
'headings-color',
|
| 99 |
'text-color',
|
| 102 |
'blockquote-text-color',
|
| 103 |
'blockquote-bg-color',
|
| 104 |
'blockquote-border-color',
|
| 105 |
+
];
|
| 106 |
|
| 107 |
foreach ( $colors as $color ) {
|
| 108 |
$options[ $color ] = $this->sanitize_color( $options[ $color ], '' );
|
| 110 |
|
| 111 |
// Only allow 'on' or 'off'.
|
| 112 |
foreach ( $options as $key => $value ) {
|
| 113 |
+
if ( substr( $key, 0, 11 ) === 'post_types-' ) {
|
| 114 |
$options[ $key ] = ( $value === 'on' ) ? 'on' : 'off';
|
| 115 |
}
|
| 116 |
}
|
| 215 |
* Get post types.
|
| 216 |
*/
|
| 217 |
private function update_post_type_settings() {
|
| 218 |
+
$post_type_names = [];
|
| 219 |
|
| 220 |
+
$post_types = get_post_types( [ 'public' => true ], 'objects' );
|
| 221 |
|
| 222 |
+
if ( is_array( $post_types ) && $post_types !== [] ) {
|
| 223 |
foreach ( $post_types as $post_type ) {
|
| 224 |
if ( ! isset( $this->options[ 'post_types-' . $post_type->name . '-amp' ] ) ) {
|
| 225 |
$this->options[ 'post_types-' . $post_type->name . '-amp' ] = 'off';
|
| 226 |
+
if ( $post_type->name === 'post' ) {
|
| 227 |
$this->options[ 'post_types-' . $post_type->name . '-amp' ] = 'on';
|
| 228 |
}
|
| 229 |
}
|
| 263 |
$parts,
|
| 264 |
1,
|
| 265 |
null,
|
| 266 |
+
[
|
| 267 |
'<script type="application/json">',
|
| 268 |
trim( $json ),
|
| 269 |
'</script>',
|
| 270 |
+
]
|
| 271 |
);
|
| 272 |
|
| 273 |
return implode( "\n", $parts );
|
classes/views/additional-css.php
CHANGED
|
@@ -13,5 +13,5 @@ td, th {
|
|
| 13 |
}
|
| 14 |
|
| 15 |
a, a:active, a:visited {
|
| 16 |
-
text-decoration: <?php echo ( (
|
| 17 |
}
|
| 13 |
}
|
| 14 |
|
| 15 |
a, a:active, a:visited {
|
| 16 |
+
text-decoration: <?php echo ( ( $this->options['underline'] === 'underline' ) ? 'underline' : 'none' ); ?>;
|
| 17 |
}
|
classes/views/admin-page.php
CHANGED
|
@@ -13,11 +13,9 @@ if ( ! defined( 'WPSEO_VERSION' ) ) {
|
|
| 13 |
exit();
|
| 14 |
}
|
| 15 |
|
| 16 |
-
$yoast_amp_yform =
|
| 17 |
$yoast_amp_yform->admin_header( true, 'wpseo_amp', false, 'wpseo_amp_settings' );
|
| 18 |
-
|
| 19 |
?>
|
| 20 |
-
|
| 21 |
<h2 class="nav-tab-wrapper" id="wpseo-tabs">
|
| 22 |
<a class="nav-tab" id="posttypes-tab" href="#top#posttypes"><?php esc_html_e( 'Post types', 'yoastseo-amp' ); ?></a>
|
| 23 |
<a class="nav-tab" id="design-tab" href="#top#design"><?php esc_html_e( 'Design', 'yoastseo-amp' ); ?></a>
|
|
@@ -33,19 +31,39 @@ $yoast_amp_yform->admin_header( true, 'wpseo_amp', false, 'wpseo_amp_settings' )
|
|
| 33 |
<?php
|
| 34 |
|
| 35 |
// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- WPSEO hook.
|
| 36 |
-
$yoast_amp_post_types = apply_filters( 'wpseo_sitemaps_supported_post_types', get_post_types(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 37 |
|
| 38 |
-
|
| 39 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 40 |
|
| 41 |
-
if ( is_array( $yoast_amp_post_types ) && $yoast_amp_post_types !==
|
| 42 |
foreach ( $yoast_amp_post_types as $yoast_amp_pt ) {
|
| 43 |
$yoast_amp_yform->toggle_switch(
|
| 44 |
'post_types-' . $yoast_amp_pt->name . '-amp',
|
| 45 |
-
|
| 46 |
'on' => __( 'Enabled', 'yoastseo-amp' ),
|
| 47 |
'off' => __( 'Disabled', 'yoastseo-amp' ),
|
| 48 |
-
|
| 49 |
$yoast_amp_pt->labels->name . ' (<code>' . $yoast_amp_pt->name . '</code>)'
|
| 50 |
);
|
| 51 |
}
|
|
@@ -98,10 +116,10 @@ $yoast_amp_yform->admin_header( true, 'wpseo_amp', false, 'wpseo_amp_settings' )
|
|
| 98 |
$yoast_amp_yform->light_switch(
|
| 99 |
'underline',
|
| 100 |
__( 'Underline', 'yoastseo-amp' ),
|
| 101 |
-
|
| 102 |
__( 'Underline', 'yoastseo-amp' ),
|
| 103 |
__( 'No underline', 'yoastseo-amp' ),
|
| 104 |
-
|
| 105 |
);
|
| 106 |
?>
|
| 107 |
|
|
@@ -120,10 +138,10 @@ $yoast_amp_yform->admin_header( true, 'wpseo_amp', false, 'wpseo_amp_settings' )
|
|
| 120 |
$yoast_amp_yform->textarea(
|
| 121 |
'extra-css',
|
| 122 |
__( 'Extra CSS', 'yoastseo-amp' ),
|
| 123 |
-
|
| 124 |
'rows' => 5,
|
| 125 |
'cols' => 100,
|
| 126 |
-
|
| 127 |
);
|
| 128 |
?>
|
| 129 |
|
|
@@ -149,10 +167,10 @@ $yoast_amp_yform->admin_header( true, 'wpseo_amp', false, 'wpseo_amp_settings' )
|
|
| 149 |
$yoast_amp_yform->textarea(
|
| 150 |
'extra-head',
|
| 151 |
__( 'Extra code', 'yoastseo-amp' ),
|
| 152 |
-
|
| 153 |
'rows' => 5,
|
| 154 |
'cols' => 100,
|
| 155 |
-
|
| 156 |
);
|
| 157 |
?>
|
| 158 |
|
|
@@ -182,10 +200,10 @@ $yoast_amp_yform->admin_header( true, 'wpseo_amp', false, 'wpseo_amp_settings' )
|
|
| 182 |
$yoast_amp_yform->textarea(
|
| 183 |
'analytics-extra',
|
| 184 |
__( 'Analytics code', 'yoastseo-amp' ),
|
| 185 |
-
|
| 186 |
'rows' => 5,
|
| 187 |
'cols' => 100,
|
| 188 |
-
|
| 189 |
);
|
| 190 |
}
|
| 191 |
else {
|
|
@@ -193,16 +211,15 @@ $yoast_amp_yform->admin_header( true, 'wpseo_amp', false, 'wpseo_amp_settings' )
|
|
| 193 |
$yoast_amp_yform->textarea(
|
| 194 |
'analytics-extra',
|
| 195 |
__( 'Analytics code', 'yoastseo-amp' ),
|
| 196 |
-
|
| 197 |
'rows' => 5,
|
| 198 |
'cols' => 100,
|
| 199 |
-
|
| 200 |
);
|
| 201 |
}
|
| 202 |
?>
|
| 203 |
</div>
|
| 204 |
</div>
|
| 205 |
-
|
| 206 |
<?php
|
| 207 |
|
| 208 |
$yoast_amp_yform->admin_footer();
|
| 13 |
exit();
|
| 14 |
}
|
| 15 |
|
| 16 |
+
$yoast_amp_yform = new YoastSEO_AMP_Form();
|
| 17 |
$yoast_amp_yform->admin_header( true, 'wpseo_amp', false, 'wpseo_amp_settings' );
|
|
|
|
| 18 |
?>
|
|
|
|
| 19 |
<h2 class="nav-tab-wrapper" id="wpseo-tabs">
|
| 20 |
<a class="nav-tab" id="posttypes-tab" href="#top#posttypes"><?php esc_html_e( 'Post types', 'yoastseo-amp' ); ?></a>
|
| 21 |
<a class="nav-tab" id="design-tab" href="#top#design"><?php esc_html_e( 'Design', 'yoastseo-amp' ); ?></a>
|
| 31 |
<?php
|
| 32 |
|
| 33 |
// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- WPSEO hook.
|
| 34 |
+
$yoast_amp_post_types = apply_filters( 'wpseo_sitemaps_supported_post_types', get_post_types( [ 'public' => true ], 'objects' ) );
|
| 35 |
+
|
| 36 |
+
/**
|
| 37 |
+
* Allow specific AMP post type overrides, especially needed for Page support.
|
| 38 |
+
*
|
| 39 |
+
* @deprecated 0.6.0. Use the {@see 'Yoast\WP\AMP\supported_post_types'} filter instead.
|
| 40 |
+
*
|
| 41 |
+
* @param array $post_types Post types to show in the sitemap.
|
| 42 |
+
*/
|
| 43 |
+
$yoast_amp_post_types = apply_filters_deprecated(
|
| 44 |
+
'wpseo_amp_supported_post_types',
|
| 45 |
+
[ $yoast_amp_post_types ],
|
| 46 |
+
'YoastSEO AMP 0.6.0',
|
| 47 |
+
'Yoast\WP\AMP\supported_post_types'
|
| 48 |
+
);
|
| 49 |
|
| 50 |
+
/**
|
| 51 |
+
* Allow specific AMP post type overrides, especially needed for Page support.
|
| 52 |
+
*
|
| 53 |
+
* @since 0.6.0
|
| 54 |
+
*
|
| 55 |
+
* @param array $post_types Post types to show in the sitemap.
|
| 56 |
+
*/
|
| 57 |
+
$yoast_amp_post_types = apply_filters( 'Yoast\WP\AMP\supported_post_types', $yoast_amp_post_types );
|
| 58 |
|
| 59 |
+
if ( is_array( $yoast_amp_post_types ) && $yoast_amp_post_types !== [] ) {
|
| 60 |
foreach ( $yoast_amp_post_types as $yoast_amp_pt ) {
|
| 61 |
$yoast_amp_yform->toggle_switch(
|
| 62 |
'post_types-' . $yoast_amp_pt->name . '-amp',
|
| 63 |
+
[
|
| 64 |
'on' => __( 'Enabled', 'yoastseo-amp' ),
|
| 65 |
'off' => __( 'Disabled', 'yoastseo-amp' ),
|
| 66 |
+
],
|
| 67 |
$yoast_amp_pt->labels->name . ' (<code>' . $yoast_amp_pt->name . '</code>)'
|
| 68 |
);
|
| 69 |
}
|
| 116 |
$yoast_amp_yform->light_switch(
|
| 117 |
'underline',
|
| 118 |
__( 'Underline', 'yoastseo-amp' ),
|
| 119 |
+
[
|
| 120 |
__( 'Underline', 'yoastseo-amp' ),
|
| 121 |
__( 'No underline', 'yoastseo-amp' ),
|
| 122 |
+
]
|
| 123 |
);
|
| 124 |
?>
|
| 125 |
|
| 138 |
$yoast_amp_yform->textarea(
|
| 139 |
'extra-css',
|
| 140 |
__( 'Extra CSS', 'yoastseo-amp' ),
|
| 141 |
+
[
|
| 142 |
'rows' => 5,
|
| 143 |
'cols' => 100,
|
| 144 |
+
]
|
| 145 |
);
|
| 146 |
?>
|
| 147 |
|
| 167 |
$yoast_amp_yform->textarea(
|
| 168 |
'extra-head',
|
| 169 |
__( 'Extra code', 'yoastseo-amp' ),
|
| 170 |
+
[
|
| 171 |
'rows' => 5,
|
| 172 |
'cols' => 100,
|
| 173 |
+
]
|
| 174 |
);
|
| 175 |
?>
|
| 176 |
|
| 200 |
$yoast_amp_yform->textarea(
|
| 201 |
'analytics-extra',
|
| 202 |
__( 'Analytics code', 'yoastseo-amp' ),
|
| 203 |
+
[
|
| 204 |
'rows' => 5,
|
| 205 |
'cols' => 100,
|
| 206 |
+
]
|
| 207 |
);
|
| 208 |
}
|
| 209 |
else {
|
| 211 |
$yoast_amp_yform->textarea(
|
| 212 |
'analytics-extra',
|
| 213 |
__( 'Analytics code', 'yoastseo-amp' ),
|
| 214 |
+
[
|
| 215 |
'rows' => 5,
|
| 216 |
'cols' => 100,
|
| 217 |
+
]
|
| 218 |
);
|
| 219 |
}
|
| 220 |
?>
|
| 221 |
</div>
|
| 222 |
</div>
|
|
|
|
| 223 |
<?php
|
| 224 |
|
| 225 |
$yoast_amp_yform->admin_footer();
|
readme.txt
CHANGED
|
@@ -1,10 +1,10 @@
|
|
| 1 |
=== Glue for Yoast SEO & AMP ===
|
| 2 |
Contributors: joostdevalk
|
| 3 |
Tags: AMP, SEO
|
| 4 |
-
Requires at least:
|
| 5 |
-
Tested up to: 5.
|
| 6 |
-
Stable tag: 0.
|
| 7 |
-
Requires PHP: 5.
|
| 8 |
License: GPLv2 or later
|
| 9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
| 10 |
|
|
@@ -35,6 +35,10 @@ To change your AMP page design, go to SEO -> AMP, and look at the design tab.
|
|
| 35 |
|
| 36 |
== Changelog ==
|
| 37 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 38 |
= 0.5 =
|
| 39 |
* Bugfixes:
|
| 40 |
* Fixes a problem where the AMP icon and Default image could not be unset when Yoast SEO 9.0+ has been installed.
|
| 1 |
=== Glue for Yoast SEO & AMP ===
|
| 2 |
Contributors: joostdevalk
|
| 3 |
Tags: AMP, SEO
|
| 4 |
+
Requires at least: 5.3
|
| 5 |
+
Tested up to: 5.4
|
| 6 |
+
Stable tag: 0.6
|
| 7 |
+
Requires PHP: 5.6.20
|
| 8 |
License: GPLv2 or later
|
| 9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
| 10 |
|
| 35 |
|
| 36 |
== Changelog ==
|
| 37 |
|
| 38 |
+
= 0.6 =
|
| 39 |
+
* Bugfixes:
|
| 40 |
+
* Fixes a bug where the saved option values weren't reflected in the form fields.
|
| 41 |
+
|
| 42 |
= 0.5 =
|
| 43 |
* Bugfixes:
|
| 44 |
* Fixes a problem where the AMP icon and Default image could not be unset when Yoast SEO 9.0+ has been installed.
|
yoastseo-amp.php
CHANGED
|
@@ -11,7 +11,7 @@
|
|
| 11 |
* Plugin Name: Glue for Yoast SEO & AMP
|
| 12 |
* Plugin URI: https://wordpress.org/plugins/glue-for-yoast-seo-amp/
|
| 13 |
* Description: Makes sure the default WordPress AMP plugin uses the proper Yoast SEO metadata
|
| 14 |
-
* Version: 0.
|
| 15 |
* Author: Joost de Valk
|
| 16 |
* Author URI: https://yoast.com
|
| 17 |
* Text Domain: yoastseo-amp
|
|
@@ -25,7 +25,7 @@ if ( ! class_exists( 'YoastSEO_AMP', false ) ) {
|
|
| 25 |
*/
|
| 26 |
class YoastSEO_AMP {
|
| 27 |
|
| 28 |
-
const VERSION = '0.
|
| 29 |
|
| 30 |
/**
|
| 31 |
* YoastSEO_AMP constructor.
|
| 11 |
* Plugin Name: Glue for Yoast SEO & AMP
|
| 12 |
* Plugin URI: https://wordpress.org/plugins/glue-for-yoast-seo-amp/
|
| 13 |
* Description: Makes sure the default WordPress AMP plugin uses the proper Yoast SEO metadata
|
| 14 |
+
* Version: 0.6
|
| 15 |
* Author: Joost de Valk
|
| 16 |
* Author URI: https://yoast.com
|
| 17 |
* Text Domain: yoastseo-amp
|
| 25 |
*/
|
| 26 |
class YoastSEO_AMP {
|
| 27 |
|
| 28 |
+
const VERSION = '0.6.0';
|
| 29 |
|
| 30 |
/**
|
| 31 |
* YoastSEO_AMP constructor.
|
