embed

PHP

【WordPress】ブログカードを取得できないURLをaタグ(リンク)で表示する

更新日:2023/03/13

WordPressはURLを貼り付けるとブログカードを表示してくれます。

しかしURLが間違えていたり、相手側のサーバーの問題等でブログカードの情報を得られないときは、貼り付けたURLがそのまま表示されます。
「次のリンクをクリックしてください」などの表記をしている場合は、とても困ったことになりますね。

そこで、ブログカード表示できないとき、aタグでリンク表示する方法をお伝えします。

 

embed_maybe_make_linkフィルターを使用

WordPressがブログカードの取得に失敗すると、linkifunknownというフラグがオンならaタグが生成されます。
しかしなぜかオフなので、生成されません。

次にembed_maybe_make_linkフィルターが呼び出されるので、ここでaタグを生成します。

add_filter( 'embed_maybe_make_link' , function( $output, $url){
	$target = 'target="_blank"';
	$rel = 'rel="noopener noreferrer"';
	return '<a href="' . esc_url($url) . '" '.$target.' '.$rel.'>' . esc_html($url) . '</a>';
},10,2);

targetrel属性は、必要が無いときは空文字('')に変更してください。

 

タイトルを表示したいケース

リンク表示される文字をURLではなくて、タイトルにしたいケースがあります。

その場合は独自にショートコードを作成して、タイトルを指定します。

  // ショートカット登録
  // [blogcard href="ドメイン名"]タイトル[/blogcard]
add_shortcode( 'blogcard' , function( $atts , $content){
	global $blogcard_titles;
	global $wp_embed;

	if( empty($atts['href']) ) return not_blogcard('',$content);
	
	if( !isset($blogcard_titles)) $blogcard_titles = array();
	$blogcard_titles[$atts['href']] = $content;

	return $wp_embed->autoembed_callback( 
			array( '' , '' , $atts['href'] , ''));
});

  // ブログカード無効時のフィルター処理
add_filter( 'embed_maybe_make_link' , function( $output, $url){
	global $blogcard_titles;
	
	return ( !isset($blogcard_titles) || !array_key_exists($url,$blogcard_titles))
		? not_blogcard($url,$url) : not_blogcard($url,$blogcard_titles[$url]);
	
},10,2);

  // リンクタグ作成
function not_blogcard( $href , $title ){
	$target = 'target="_blank"';
	$rel = 'rel="noopener noreferrer"';
	return '<a href="' . esc_url($url) . '" '.$target.' '.$rel.'>' . esc_html($url) . '</a>';
}

このコードは、次のようなショートコードを作成しています。

[blogcard href="ドメイン名"]タイトル[/blogcard]

ショートコードのコールバックは、キーをURL、値をタイトルに持つ連想配列を作成した後に、投稿埋め込み処理を呼び出しています。
そしてembed_maybe_make_linkフィルターで、連想配列からタイトルを取得しています。

targetrel属性をコードに記述していますが、ショートコードの属性に含めることでURL毎に任意の値を含めることもできます。
今回はコードが分かりにくくなるので、見送りました。

必要だと思う方は、コードを変更してみてください。

 

ブログカードはおすすめしません

今回は外部リンクの貼り付けでURLのみが表示されるのを避ける方法をお伝えしたのですが、ブログカードを外部リンクで使用するのはおすすめできません。
理由はページの表示が遅くなるからです。

詳しくは次のページを読んでみてください。

WordPressはHTMやCSSの知識も必要。総合的な知識を身につけよう。

更新日:2023/03/13

書いた人(管理人):けーちゃん

スポンサーリンク

記事の内容について

null

こんにちはけーちゃんです。
説明するのって難しいですね。

「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。

裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。

掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。

ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php

 

このサイトは、リンクフリーです。大歓迎です。