Phase 5: Content and SEO - Yoast SEO, Schema.org markup, Open Graph, favicon support, XML sitemap
This commit is contained in:
Executable
+119
@@ -0,0 +1,119 @@
|
||||
<?php
|
||||
|
||||
namespace Yoast\WP\SEO\User_Meta\User_Interface;
|
||||
|
||||
use Yoast\WP\SEO\Conditionals\Admin_Conditional;
|
||||
use Yoast\WP\SEO\Conditionals\User_Can_Edit_Users_Conditional;
|
||||
use Yoast\WP\SEO\Conditionals\User_Edit_Conditional;
|
||||
use Yoast\WP\SEO\Integrations\Integration_Interface;
|
||||
use Yoast\WP\SEO\User_Meta\Application\Custom_Meta_Collector;
|
||||
|
||||
/**
|
||||
* Handles custom meta for users.
|
||||
*/
|
||||
class Custom_Meta_Integration implements Integration_Interface {
|
||||
|
||||
/**
|
||||
* The custom meta collector.
|
||||
*
|
||||
* @var Custom_Meta_Collector
|
||||
*/
|
||||
private $custom_meta_collector;
|
||||
|
||||
/**
|
||||
* The constructor.
|
||||
*
|
||||
* @param Custom_Meta_Collector $custom_meta_collector The custom meta collector.
|
||||
*/
|
||||
public function __construct( Custom_Meta_Collector $custom_meta_collector ) {
|
||||
$this->custom_meta_collector = $custom_meta_collector;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the conditionals for the integration.
|
||||
*
|
||||
* @return array<Yoast\WP\SEO\Conditionals> The conditionals.
|
||||
*/
|
||||
public static function get_conditionals() {
|
||||
return [
|
||||
Admin_Conditional::class,
|
||||
User_Can_Edit_Users_Conditional::class,
|
||||
User_Edit_Conditional::class,
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers action hook.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function register_hooks(): void {
|
||||
\add_action( 'show_user_profile', [ $this, 'user_profile' ] );
|
||||
\add_action( 'edit_user_profile', [ $this, 'user_profile' ] );
|
||||
|
||||
\add_action( 'personal_options_update', [ $this, 'process_user_option_update' ] );
|
||||
\add_action( 'edit_user_profile_update', [ $this, 'process_user_option_update' ] );
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the user metas that (might) have been set on the user profile page.
|
||||
*
|
||||
* @param int $user_id User ID of the updated user.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function process_user_option_update( $user_id ) {
|
||||
\update_user_meta( $user_id, '_yoast_wpseo_profile_updated', \time() );
|
||||
|
||||
if ( ! \check_admin_referer( 'wpseo_user_profile_update', 'wpseo_nonce' ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
foreach ( $this->custom_meta_collector->get_custom_meta() as $meta ) {
|
||||
if ( ! $meta->is_setting_enabled() ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$meta_field_id = $meta->get_field_id();
|
||||
$user_input_to_store = isset( $_POST[ $meta_field_id ] ) ? \sanitize_text_field( \wp_unslash( $_POST[ $meta_field_id ] ) ) : '';
|
||||
|
||||
if ( $meta->is_empty_allowed() || $user_input_to_store !== '' ) {
|
||||
\update_user_meta( $user_id, $meta->get_key(), $user_input_to_store );
|
||||
continue;
|
||||
}
|
||||
|
||||
\delete_user_meta( $user_id, $meta->get_key() );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds the inputs needed for SEO values to the User Profile page.
|
||||
*
|
||||
* @param WP_User $user User instance to output for.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function user_profile( $user ) {
|
||||
\wp_nonce_field( 'wpseo_user_profile_update', 'wpseo_nonce' );
|
||||
|
||||
/* translators: %1$s expands to Yoast SEO */
|
||||
$yoast_user_settings_header = \sprintf( \__( '%1$s settings', 'wordpress-seo' ), 'Yoast SEO' );
|
||||
|
||||
echo '
|
||||
|
||||
<div class="yoast yoast-settings">
|
||||
|
||||
<h2 id="wordpress-seo">' . \esc_html( $yoast_user_settings_header ) . '</h2>';
|
||||
|
||||
foreach ( $this->custom_meta_collector->get_sorted_custom_meta() as $meta ) {
|
||||
if ( ! $meta->is_setting_enabled() ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$meta->render_field( $user->ID );
|
||||
}
|
||||
|
||||
\do_action( 'wpseo_render_user_profile', $user );
|
||||
echo '</div>';
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user