ID, UserMetaFields::PERSON_NAME, true );
$url = (string) get_user_meta( $user->ID, UserMetaFields::PERSON_URL, true );
printf( '
%s
', esc_html__( 'Acez SEO AI — author data (schema.org Person)', 'acez-seo' ) );
echo '';
}
public function save( int $user_id ): void
{
if ( ! isset( $_POST[ self::NONCE_FIELD ] ) )
{
return;
}
$nonce = sanitize_text_field( wp_unslash( $_POST[ self::NONCE_FIELD ] ) );
if ( ! wp_verify_nonce( $nonce, self::NONCE_ACTION ) )
{
return;
}
if ( ! current_user_can( 'edit_user', $user_id ) )
{
return;
}
$name = isset( $_POST[ UserMetaFields::PERSON_NAME ] ) ? sanitize_text_field( wp_unslash( $_POST[ UserMetaFields::PERSON_NAME ] ) ) : '';
$url = isset( $_POST[ UserMetaFields::PERSON_URL ] ) ? esc_url_raw( wp_unslash( $_POST[ UserMetaFields::PERSON_URL ] ) ) : '';
$changed = $name !== (string) get_user_meta( $user_id, UserMetaFields::PERSON_NAME, true )
|| $url !== (string) get_user_meta( $user_id, UserMetaFields::PERSON_URL, true );
update_user_meta( $user_id, UserMetaFields::PERSON_NAME, $name );
update_user_meta( $user_id, UserMetaFields::PERSON_URL, $url );
// The Person node is baked into the cached JSON-LD graph, and the
// CacheInvalidator only watches acez_seo_* options — user meta needs
// an explicit bump (only on an actual change).
if ( $changed )
{
CacheVersion::bump();
}
}
}