Merged in feature/from-pantheon (pull request #16)
code from pantheon * code from pantheon
This commit is contained in:
@@ -0,0 +1,115 @@
|
||||
<?php
|
||||
/**
|
||||
* WPSEO Premium plugin file.
|
||||
*
|
||||
* @package WPSEO\Premium\Classes
|
||||
*/
|
||||
|
||||
/**
|
||||
* Enqueues a JavaScript plugin for YoastSEO.js that adds custom fields to the content that were defined in the titles
|
||||
* and meta's section of the Yoast SEO settings when those fields are available.
|
||||
*/
|
||||
class WPSEO_Custom_Fields_Plugin implements WPSEO_WordPress_Integration {
|
||||
|
||||
/**
|
||||
* Initialize the AJAX hooks.
|
||||
*
|
||||
* @codeCoverageIgnore Method relies on dependencies.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function register_hooks() {
|
||||
global $pagenow;
|
||||
|
||||
if ( ! WPSEO_Metabox::is_post_edit( $pagenow ) && ! WPSEO_Metabox::is_post_overview( $pagenow ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
add_action( 'admin_enqueue_scripts', [ $this, 'enqueue' ] );
|
||||
}
|
||||
|
||||
/**
|
||||
* Enqueues all the needed JS scripts.
|
||||
*
|
||||
* @codeCoverageIgnore Method relies on WordPress functions.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function enqueue() {
|
||||
wp_enqueue_script( 'wp-seo-premium-custom-fields-plugin' );
|
||||
wp_localize_script( 'wp-seo-premium-custom-fields-plugin', 'YoastCustomFieldsPluginL10', $this->localize_script() );
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads the custom fields translations.
|
||||
*
|
||||
* @return array The fields to localize.
|
||||
*/
|
||||
public function localize_script() {
|
||||
return [
|
||||
'custom_field_names' => $this->get_custom_field_names(),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve all custom field names set in SEO ->
|
||||
*
|
||||
* @return array The custom field names.
|
||||
*/
|
||||
protected function get_custom_field_names() {
|
||||
$custom_field_names = [];
|
||||
|
||||
$post = $this->get_post();
|
||||
|
||||
if ( ! is_object( $post ) ) {
|
||||
return $custom_field_names;
|
||||
}
|
||||
|
||||
$options = $this->get_titles_from_options();
|
||||
$target_option = 'page-analyse-extra-' . $post->post_type;
|
||||
|
||||
if ( array_key_exists( $target_option, $options ) ) {
|
||||
$custom_field_names = explode( ',', $options[ $target_option ] );
|
||||
}
|
||||
|
||||
return $custom_field_names;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves post data given a post ID or the global.
|
||||
*
|
||||
* @codeCoverageIgnore Method relies on dependencies.
|
||||
*
|
||||
* @return WP_Post|array|null Returns a post if found, otherwise returns an empty array.
|
||||
*/
|
||||
protected function get_post() {
|
||||
// phpcs:disable WordPress.Security.NonceVerification.Recommended -- Reason: We are not controlling the request.
|
||||
if ( isset( $_GET['post'] ) && is_string( $_GET['post'] ) ) {
|
||||
// phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are casting the unsafe value to an integer.
|
||||
$post_id = (int) wp_unslash( $_GET['post'] );
|
||||
if ( $post_id > 0 ) {
|
||||
return get_post( $post_id );
|
||||
}
|
||||
}
|
||||
// phpcs:enable WordPress.Security.NonceVerification.Recommended
|
||||
|
||||
if ( isset( $GLOBALS['post'] ) ) {
|
||||
return $GLOBALS['post'];
|
||||
}
|
||||
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the value of the WPSEO_Titles option.
|
||||
*
|
||||
* @codeCoverageIgnore Method relies on the options.
|
||||
*
|
||||
* @return array The value from WPSEO_Titles option.
|
||||
*/
|
||||
protected function get_titles_from_options() {
|
||||
$option_name = WPSEO_Options::get_option_instance( 'wpseo_titles' )->option_name;
|
||||
|
||||
return get_option( $option_name, [] );
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user