サポート » テーマ » サイドバー「最近の投稿」一覧の表示を一部変更したい

  • 関数 wp_get_archives() についての質問です。
    よろしくお願いいたします。

    現在、サイドバーに「最近の投稿」の一覧を表示しております。

    <ul id="sidebar-arc">
    <?php wp_get_archives('type=postbypost'); ?>
    </ul>

    これは思った通りに表示されました。

    ここから発展して、現在表示している投稿のリンクのみを削除したいのですが、
    PHPは全くわからず「WordPress Codex」も参考にしてみましたが、
    理解が及ばず。。ご教授いただきたいです。

    自分が考えられる範囲でお恥ずかしいのですが、一覧を表示する際に以下のような
    条件分岐がしたいと思っています。

    <?php
    if ( is_single('<?php the_title(); ?>')) {
    	//リンクなし
    } else {
    	//リンクあり
    }
    ?>

    例えば、以下のような表示を

    ・タイトル1
    ・タイトル2
    ・タイトル3

    「タイトル2」の投稿ページを表示している場合にのみ

    ・タイトル1
    ・タイトル2
    ・タイトル3

    と、上記のように表示したいと思っています。

    今回が初投稿です。不手際があればすぐに訂正させていただきたいと思います。
    どうぞよろしくお願いいたします。

1件の返信を表示中 - 1 - 1件目 (全1件中)
  • モデレーター jim912

    (@jim912)

    yukさん、こんにちは。

    残念ながら、条件分岐だけでは実現は不可能です。
    wp_get_archives内部でリンクのhtmlを生成している get_archives_link にフックし、正規表現にて、URLを取得。これを現在表示している投稿のリンクと照合させて、同一であれば、リンクを削除したものに差し替えるという処理になります。

    具体的には、下記コードとなります。
    これを使用しているテーマのfunctions.phpなどに追記すれば、表示している投稿のリンクだけ削除されるはずです。

    function remove_current_post_archives_link( $link_html ) {
    	global $post;
    	if ( is_single() ) {
    		$regex = "/<a href='([^']+)' title='[^']+'>[^<]+<\/a>/";
    		if ( preg_match( $regex, $link_html, $m ) ) {
    			if ( get_permalink( $post->ID ) == $m[1] ) {
    				$replace = strip_tags( $m[0] );
    				$link_html = str_replace( $m[0], $replace, $link_html );
    			}
    		}
    	}
    	return $link_html;
    }
    add_filter( 'get_archives_link', 'remove_current_post_archives_link' );
1件の返信を表示中 - 1 - 1件目 (全1件中)
  • トピック「サイドバー「最近の投稿」一覧の表示を一部変更したい」には新たに返信することはできません。