108 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| namespace Activitypub\Integration;
 | |
| 
 | |
| use Activitypub\Model\Blog;
 | |
| use Activitypub\Collection\Users;
 | |
| 
 | |
| use function Activitypub\is_single_user;
 | |
| use function Activitypub\is_user_type_disabled;
 | |
| 
 | |
| /**
 | |
|  * Compatibility with the OpenGraph plugin
 | |
|  *
 | |
|  * @see https://wordpress.org/plugins/opengraph/
 | |
|  * @see https://codeberg.org/fediverse/fep/src/branch/main/fep/XXXX/fep-XXXX.md
 | |
|  * @see https://github.com/mastodon/mastodon/pull/30398
 | |
|  */
 | |
| class Opengraph {
 | |
| 	/**
 | |
| 	 * Initialize the class, registering WordPress hooks
 | |
| 	 */
 | |
| 	public static function init() {
 | |
| 		if ( ! function_exists( 'opengraph_metadata' ) ) {
 | |
| 			\add_action( 'wp_head', array( self::class, 'add_meta_tags' ) );
 | |
| 		}
 | |
| 
 | |
| 		\add_filter( 'opengraph_metadata', array( self::class, 'add_metadata' ) );
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Add the ActivityPub prefix to the OpenGraph prefixes.
 | |
| 	 *
 | |
| 	 * @param array $prefixes the current prefixes.
 | |
| 	 *
 | |
| 	 * @return array the updated prefixes.
 | |
| 	 */
 | |
| 	public static function add_prefixes( $prefixes ) {
 | |
| 		// @todo discuss namespace
 | |
| 		$prefixes['fediverse'] = 'https://codeberg.org/fediverse/fep/src/branch/main/fep/XXXX/fep-XXXX.md';
 | |
| 
 | |
| 		return $prefixes;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Add the ActivityPub metadata to the OpenGraph metadata.
 | |
| 	 *
 | |
| 	 * @param array $metadata the current metadata.
 | |
| 	 *
 | |
| 	 * @return array the updated metadata.
 | |
| 	 */
 | |
| 	public static function add_metadata( $metadata ) {
 | |
| 		// Always show Blog-User if the Blog is in single user mode
 | |
| 		if ( is_single_user() ) {
 | |
| 			$user = new Blog();
 | |
| 
 | |
| 			// add WebFinger resource
 | |
| 			$metadata['fediverse:creator'] = $user->get_webfinger();
 | |
| 
 | |
| 			return $metadata;
 | |
| 		}
 | |
| 
 | |
| 		if ( \is_author() ) {
 | |
| 			// Use the Author of the Archive-Page
 | |
| 			$user_id = \get_queried_object_id();
 | |
| 		} elseif ( \is_singular() ) {
 | |
| 			// Use the Author of the Post
 | |
| 			$user_id = \get_post_field( 'post_author', \get_queried_object_id() );
 | |
| 		} elseif ( ! is_user_type_disabled( 'blog' ) ) {
 | |
| 			// Use the Blog-User for any other page, if the Blog-User is not disabled
 | |
| 			$user_id = Users::BLOG_USER_ID;
 | |
| 		} else {
 | |
| 			// Do not add any metadata otherwise
 | |
| 			return $metadata;
 | |
| 		}
 | |
| 
 | |
| 		$user = Users::get_by_id( $user_id );
 | |
| 
 | |
| 		if ( ! $user || \is_wp_error( $user ) ) {
 | |
| 			return $metadata;
 | |
| 		}
 | |
| 
 | |
| 		// add WebFinger resource
 | |
| 		$metadata['fediverse:creator'] = $user->get_webfinger();
 | |
| 
 | |
| 		return $metadata;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Output Open Graph <meta> tags in the page header.
 | |
| 	 */
 | |
| 	public static function add_meta_tags() {
 | |
| 		$metadata = apply_filters( 'opengraph_metadata', array() );
 | |
| 		foreach ( $metadata as $key => $value ) {
 | |
| 			if ( empty( $key ) || empty( $value ) ) {
 | |
| 				continue;
 | |
| 			}
 | |
| 			$value = (array) $value;
 | |
| 
 | |
| 			foreach ( $value as $v ) {
 | |
| 				printf(
 | |
| 					'<meta property="%1$s" name="%1$s" content="%2$s" />' . PHP_EOL,
 | |
| 					esc_attr( $key ),
 | |
| 					esc_attr( $v )
 | |
| 				);
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| }
 |