• メニュー
  • メニュー

【WordPress備忘録】意図しないURLが投稿記事に表示されるときの回避方法

この記事はWordpress備忘録としての記事です。同じ悩みになった方には参考になるかもしれませんが、またハマる可能性があるので個人用メモです。

現象:URLを返すショートコードを自作しているときに、記事の上にリンクのされていない、URL文字列が意図なく表示される

以前もWordpressテーマを作っているときに同じ現象でハマり、何とか解決したのだけど、また同じ現象が…。しかし、どうやって解決したか忘れて、3時間以上ハマりました。

意図しないURLが投稿記事に表示されるときの回避方法

関連記事を

(xxxxはpost id)でカード表示、連続して表示する場合は、と続けると複数個表示することができるショートコードです。

function post_related_thumbnail($atts, $content = null){
      $content = do_shortcode($content);
	$content .= '<div class="trawell-section trawell-layout-b2 trawell-related">';
	$content .= '<div class="container">';
	$content .= '<div class="row">';
	if (!function_exists('is_countable')) {
      function is_countable($atts) {
	           $counter = count($atts);
	  }
	}else if (is_array($atts)) {
		$counter = count($atts);
	}
	for ($i = 0; $i < $counter ; $i++) {
		$p_id = $atts[$i];
		$post = get_post($p_id);
		$p_title = $post->post_title;
		/*$url = the_permalink($post); */
		$url = get_permalink($p_id);
		$excerpt = wp_trim_words ( strip_shortcodes( $post->post_content ), 80 );
        $trawell_featured_image = get_the_post_thumbnail($p_id, trawell_get_featured_image('trawell-b1-sid') );

		$content .= '<div class="col-12 inline-related">';
                $content .= '<article class="trawell-item row">';
		
		if ($trawell_featured_image):
		$content .= '<div class="col-5">';
			$content .= '<a href="' . $url . '" class="entry-image">'.trawell_wp_kses( $trawell_featured_image).'</a>';
		$content .= '</div>';	
	        endif;
		$content .= '<div class="col-7 no-left-padding">';
                 	$content .= '<div class="entry-header">';
			$content .= '<div class="entry-category color-text">'. trawell_get_category().'</div>';
			$content .= '<h3 class="entry-title h4 sm-h6"><a href="' . $url . '">'.$p_title.'</a></h3>';
			$content .= '<div class="entry-meta entry-meta-small">';
                   $content .= $excerpt;
            $content .= '</div>';
			$content .= '<p><a href="' . $url. '" class="green_link">この記事を読む</a></p>';
            $content .= '</div>';
            $content .= '</div>';
            $content .= '</article>';
		$content .= '</div>';
	}
	$content .= '</div>';
	$content .= '</div>';
	$content .= '</div>';
	return $content;
}
add_shortcode('related', 'post_related_thumbnail');

add_filterなどで対処を試みたけど、意図する表示もされず、意図せず記事上部に現れるURLも消えない・・・・ということでハマったところ。

以下のコードを入力してみたら、いらんURLは表示さえなくなりました。

ob_start();
ob_get_clean();

ob_star()関数は、出力のバッファリングを有効にし、ob_get_clean()関数はバッファの内容を出力せずに消去してくれるものになるので、バッファにあるURLを消去してくれたのだろうか・・・

表示はされなくなったけど、一部URL取得方法に問題があることを発見。

/*$url = the_permalink($post); */
$url = get_permalink($p_id);

the_parmalink で取得していたURLを、get_parmalinkに変更したところ、予期しないURLは表示されなくなりました。

the permalinkのAPIにこのように記載されていました。

ループ の中で処理されている投稿の パーマリンク の URL を表示します。このタグは ループ 内で使用されなければならず、一般的に各投稿のパーマリンクを表示するときに利用します。このテンプレートタグは処理されている投稿のパーマリンクを表示するだけです。そのため、あなたのブログにある任意の投稿のパーマリンクを表示するために使用することは出来ません。もしもユニークな投稿 ID を与えて投稿のパーマリンクを取得したいのなら、get_permalink() を参照してください。

https://wpdocs.osdn.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/the_permalink

ふむふむ、なるほど。任意の記事のURLを含みreturnをして記事に表示するという関数だったのに、get_permalink()を使用していなかったことが原因だったようです。

ただ、echoなどで出力していないのに、記事の冒頭に表示されるのはなぜなのでしょうか。。ここを知っている方がいらっしゃったらコメントください。オネガイシマス。


有益情報も流しているのでツイッターもぜひフォローお願いします。


参考になったらシェアお願いします!
toshiki@ひざのうえ起業家

3児&2犬(大型)のウェブ大好きパパです。

サイト作り・デザイン大好きで、どんどん新しいサイトを作ろうとしてしまう性格の持ち主。けど、深く深く極めるのも好きなハイブリットです。Wordpress歴は18年くらいです。

子どもが大きくなってしまう前に、子どもとの時間を作りたくて脱サラ計画中。ひざのうえにノートパソコンを置いてでも稼げる仕事で起業を目指しています。

10年ちょい前に世界一周チケットで主要都市だけ回る旅行も経験、これからもいっぱい旅行したい一心で切磋琢磨しています。旅行大好きだから。

好きな物:ウェブサイト/旅行(国内・海外)/動画編集/音楽(クラシック/JAZZ/ポップス)/山崎豊子/久石譲/ショパン/ピアノ/ラブラドールレトリバー/コーヒー/ワイン/スポーツ全般/スキーモーグル/高校野球/スキューバ

夢:キャンピングカーで子どもと犬と日本一周、もう一度乗りたい豪華客船クルーズ、映画音楽の作曲、プール付きか温泉付きの別荘で暖炉の前でリクライニングチェアで老眼鏡付けて分厚い洋書を手に犬を足元に居眠り。

ストーリーを見る

コメント・質問する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です