私が解決しようとしている問題はWordPressループの中にあります、私はビデオ埋め込みまたは画像だけを表示したいです、どんなテキストでもないです。
現在、WordPressエディタで新しい投稿(標準フォーマット)を作成するとき、私の投稿のほとんどは次のようになります。
http://youtube.com/somevideo
Some supporting text below the video
そしてもちろん、WordPressはそこに入れたYouTubeやVimeoのリンクを使って自動的に埋め込まれたビデオを作成します。
投稿のリストを表示するとき、私はSome supporting text below the video
にビデオだけを表示させたくありません。
現在私のcontent.php
ページはかなり基本的なもので、<?php the_content(); ?>
を使って内容を表示しているだけです。
各投稿でこのテキストを削除する方法はありますか?
これは get_media_embedded_in_content()
関数を使って行うことができます。
/**
* Display only the first media item in the content
*
* @link http://wordpress.stackexchange.com/a/199398/26350
*/
! is_admin() && add_filter( 'the_content', function( $content )
{
// Get the avialable media items from the content
add_filter( 'media_embedded_in_content_allowed_types', 'wpse_media_types' );
$media = get_media_embedded_in_content( $content );
remove_filter( 'media_embedded_in_content_allowed_types', 'wpse_media_types' );
// Only use the first media item if available
if( $media )
$content = array_shift( $media );
return $content;
} , 99 );
カスタムのmedia types
を次のように定義することができます。
function wpse_media_types( $types )
{
return [ 'audio', 'video', 'object', 'embed', 'iframe', 'img' ];
}
これは、コンテンツからすべてのURLを抽出し、それが使用可能なoEmbedであるかどうかを確認する別の方法です。
/**
* Display only the first oEmbed in the content
*
* @link http://wordpress.stackexchange.com/a/199398/26350
*/
! is_admin() && add_filter( 'the_content', function( $content )
{
require_once( ABSPATH . WPINC . '/class-oembed.php' );
$wp_oembed = _wp_oembed_get_object();
$urls = wp_extract_urls( $content );
foreach( (array) $urls as $url )
{
if( $wp_oembed->get_provider( $url ) )
$content = $url;
}
return $content;
}, 1 );
これを使用したい場所にさらに制限を追加することをお勧めします。