サポート » 使い方全般 » 固定ページのサイドバーに投稿ページへのリンクを表示させたい。

  • こんにちは。はじめて投稿します。

    固定ページのサイドバーに投稿ページへのリンクを表示させたいです。
    (子ページへのリンクと併記になるように)
    サイドバーはサブナビで表示させています。

    例:固定ページ(親)を「プロ野球」にします。

    この子ページに
    「ファイターズページ」
    「マリーンズページ」
    「ライオンズページ」
    という固定ページがあり、

    それに関連した投稿ページ
    「試合結果ニュース」があります。

    その場合、サブナビのデフォルトだと、

    プロ野球
    ——————
    ・ファイターズページ
    ・マリーンズページ
    ・ライオンズページ

    と、表示されます。

    その際、一番下に

    ・試合結果ニュース

    を表示させるにはどうしたらいいでしょうか。

    プロ野球
    ——————
    ・ファイターズページ
    ・マリーンズページ
    ・ライオンズページ
    ・試合結果ニュース

    ↑こんな感じです。

    (ワードプレスを始めて3日目です。とんちんかんなやり取りになったら申し訳ありません。)
    よろしくお願いします。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック投稿者 chosuke

    (@chosuke)

    すみません。投稿のカテゴリを間違えました。
    変更方法がわからないので・・このままですみません。

    モデレーター gatespace

    (@gatespace)

    ※使い方全般に移動しました。

    chosukeさん

    使っているテーマやサイドバーの実装が分からないので、『Twenty Eleven』テーマでウィジェットを使って表示させている、という前提で。WordPressを始めたばかりとのことなので、プラグイン『Exec-PHP』を使った例を紹介します。

    ウィジェットは「固定ページ」の代わりに「テキスト」を使います。
    『Exec-PHP』を有効化させた後、テキストウィジェットに、Codex「wp_list_pages」のページに載っているコードをペースト、保存します。

    <?php
      if($post->post_parent)
      $children = wp_list_pages("title_li=&child_of=".$post->post_parent."&echo=0");
      else
      $children = wp_list_pages("title_li=&child_of=".$post->ID."&echo=0");
      if ($children) { ?>
      <ul>
      <?php echo $children; ?>
      </ul>
      <?php } ?>

    これで「固定ページ」ウィジェットと同じ表示になるかとおもいます。

    そのうえで、上記コードを次のように修正します。

    修正前:

    <?php echo $children; ?>

    修正後:

    <?php
      echo $children;
      global $post;
      $post = get_post($id=N); // N には表示させたい投稿のIDを記載
      ?>
      <li><a href="<?php the_permalink();?>"><?php the_title(); ?></a></li>

    『Exec-PHP』はテキストウィジェットや記事本文内でPHPコードを実行できる便利なプラグインです。反面、うっかりすると穴のあるコードを埋めることにもなるのでご留意ください。

    トピック投稿者 chosuke

    (@chosuke)

    teckingさん

    ご親切にありがとうございます。プラグインなどの情報をきちんと伝えるべきでしたよね。
    申し訳ありません。

    プラグインは「All in One Sub Navi Widget」を使っています。

    テーマは無料配布のテンプレートをカスタマイズしています。

    リンクを張りたいのは、記事IDではなく、
    カテゴリのトップとなります。
    http:www/hogehoge/category/
    のように。

    sidebar.phpはこういうソースです。

    <section id="sidebar">
    <?php if(is_page()): ?>
            <div id="primary" class="widget-area">
    		<?php dynamic_sidebar('primary-widget-area'); ?></div>
    
            <!-- #primary end -->
    <?php endif; ?>		
    
    <?php if(is_archive() ): ?>	
    
    		<div id="secondary" class="widget-area">
    			<?php dynamic_sidebar('secondary-widget-area'); ?>
    		</div>
    <!--#secondary end-->
    
    <?php endif ?>	
    
    <?php if(is_single() ): ?>
    		<div id="secondary" class="widget-area">
    			<?php dynamic_sidebar('secondary-widget-area'); ?>
    		</div><!--#secondary end-->
    <?php endif ?>
          </section><!-- #sidebar end -->

    ウィジェットはfunction.phpで制御しています。

    本当はサイトをご覧いただきたいのですが、
    商用で制作しているもののためアクセス制限をかけようとしたのですが、
    うまくいかなかったのですみません。。

    たとえば primary-widget-area で『All in One Sub Navi Widget』を使う場合、こんなコードでやってみてはどうでしょう? 

    ウィジェット部分のHTML文字列をいったん変数 $out に格納し、preg_replace() でカテゴリートップへのリンク・カテゴリータイトルを追記した後に出力する、という流れです。『All in One Sub Navi Widget』が、出力時に ul タグに sub_navi というCSSクラスを付記することを利用しています。
    (やや強引な手法、かつざっくり検証しただけなのでご容赦を)

    <?php
    ob_start();
    dynamic_sidebar('primary-widget-area');
    $out = ob_get_clean();
    
    $cat = get_category(N); // Nには追加したいカテゴリーのIDを記載
    $str = '<a href="' . get_category_link($cat->cat_ID) . '">' . $cat->cat_name . '</a>';
    echo preg_replace( '/(<ul class="sub_navi">)(.+?)(<\/ul>)/s', '$1$2<li>' . $str . '</li>$3', $out);
    ?>
    トピック投稿者 chosuke

    (@chosuke)

    teckingさん

    何度もアドバイスいただきありがとうございます。
    諸事情でテスト環境が変わって現在全データを引っ越し中です。
    無事に終わりましたら検証させていただきます。
    お返事が遅くなり申し訳ありません。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「固定ページのサイドバーに投稿ページへのリンクを表示させたい。」には新たに返信することはできません。