Files
2026-04-28 15:13:50 +02:00

92 lines
2.4 KiB
PHP

<?php
namespace AIOSEO\Plugin\Common\Schema\Graphs\WebPage;
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
use AIOSEO\Plugin\Common\Integrations\BuddyPress as BuddyPressIntegration;
/**
* ProfilePage graph class.
*
* @since 4.0.0
*/
class ProfilePage extends WebPage {
/**
* The graph type.
*
* @since 4.5.6
*
* @var string
*/
protected $type = 'ProfilePage';
/**
* Returns the graph data.
*
* @since 4.5.4
*
* @return array The graph data.
*/
public function get() {
$data = parent::get();
$post = aioseo()->helpers->getPost();
$queriedObject = get_queried_object();
if (
( is_singular() && ! is_a( $post, 'WP_Post' ) ) ||
( ! is_singular() && ! is_a( $queriedObject, 'WP_User' ) )
) {
return [];
}
$isBuddyPressMemberPage = BuddyPressIntegration::isComponentPage() && 'bp-member_single' === aioseo()->standalone->buddyPress->component->templateType;
if ( $isBuddyPressMemberPage ) {
$author = aioseo()->standalone->buddyPress->component->author;
$authorId = $author->ID;
} else {
$authorId = is_a( $queriedObject, 'WP_User' ) ? $queriedObject->ID : $post->post_author;
$author = is_a( $queriedObject, 'WP_User' ) ? $queriedObject : get_user_by( 'id', $authorId );
}
global $wp_query; // phpcs:ignore Squiz.NamingConventions.ValidVariableName
$articles = [];
foreach ( $wp_query->posts as $post ) { // phpcs:ignore Squiz.NamingConventions.ValidVariableName
if ( $post->post_author !== $authorId ) {
continue;
}
$articles[] = [
'@type' => 'Article',
'url' => get_permalink( $post->ID ),
'headline' => $post->post_title,
'datePublished' => mysql2date( DATE_W3C, $post->post_date, false ),
'dateModified' => mysql2date( DATE_W3C, $post->post_modified, false ),
'author' => [
'@id' => get_author_posts_url( $authorId ) . '#author'
]
];
}
$data = array_merge( $data, [
'dateCreated' => mysql2date( DATE_W3C, $author->user_registered, false ),
'mainEntity' => [
'@id' => get_author_posts_url( $authorId ) . '#author'
],
'hasPart' => $articles
] );
if ( $isBuddyPressMemberPage ) {
$data['mainEntity']['@type'] = 'Person';
$data['mainEntity']['name'] = $author->display_name;
$data['mainEntity']['url'] = BuddyPressIntegration::getComponentSingleUrl( 'member', $authorId );
}
return $data;
}
}