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

98 lines
2.5 KiB
PHP

<?php
namespace AIOSEO\Plugin\Pro\Schema\Graphs\Course;
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
use memberpress\courses\models as CourseModels;
/**
* MemberPressCourse class
*
* @since 4.6.4
*/
class MemberPressCourse extends Course {
/**
* Returns the graph data.
*
* @since 4.6.4
*
* @param Object $graphData The graph data.
* @return array The parsed graph data.
*/
public function get( $graphData = null ) {
$data = parent::getGraphData( $graphData );
if ( ! aioseo()->helpers->isMemberPressCoursesActive() ) {
return [];
}
$courseId = get_the_ID();
$certificatesEnabled = get_post_meta( $courseId, '_mmcs_course_certificates_enable', true );
if ( is_string( $certificatesEnabled ) && 'enabled' === strtolower( $certificatesEnabled ) ) {
$data['hasCourseCertificate'] = [
'@type' => 'EducationalOccupationalCredential',
'name' => sprintf(
// Translators: 1 - The site name.
__( '%1$s Certificate of Completion', 'aioseo-pro' ),
get_bloginfo( 'name' )
)
];
}
if ( isset( $graphData->properties->autogenerate ) && ! $graphData->properties->autogenerate ) {
return $data;
}
$sections = CourseModels\Section::find_all_by_course( $courseId );
if ( ! empty( $sections ) ) {
$sectionData = [];
foreach ( $sections as $section ) {
$sectionData[] = [
'@type' => 'Syllabus',
'name' => $section->title,
'description' => $section->description
];
}
if ( ! empty( $sectionData ) ) {
$data['syllabusSections'] = $sectionData;
}
}
include_once MEPR_MODELS_PATH . '/MeprOptions.php';
include_once MEPR_MODELS_PATH . '/MeprProduct.php';
include_once MEPR_MODELS_PATH . '/MeprRule.php';
$post = get_post( $courseId );
$accessList = \MeprRule::get_access_list( $post );
if ( ! empty( $accessList['membership'] ) && is_array( $accessList['membership'] ) ) {
$offers = [];
$memberPressOptions = \MeprOptions::fetch();
foreach ( $accessList['membership'] as $membership ) {
$product = new \MeprProduct( $membership );
if ( 0 === absint( $product->price ) ) {
$offers[] = [
'@type' => 'Offer',
'category' => 'Free'
];
continue;
}
$offers[] = [
'@type' => 'Offer',
'category' => 'lifetime' !== $product->period_type ? 'Subscription' : 'Paid',
'price' => $product->price,
'priceCurrency' => $memberPressOptions->currency_code
];
}
$data['offers'] = $offers;
}
return $data;
}
}