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 )
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|