サポート » 使い方全般 » カスタム投稿で年別アーカイブをプルダウンで表示したい

  • どうもお世話になります。

    カスタム投稿で記事をつくり、年別アーカイブをプルダウンで表示したいのですが、
    年数を選択後のURLの語尾が
    www,hogehoge.com/date/2012?post_type=activity となってほしいところが
    www,hogehoge.com/date/2012 となり、デフォルトの投稿のアーカイブが表示されてしまい困っています。

    function.php に

    global $my_archives_post_type;
    add_filter( 'getarchives_where', 'my_getarchives_where', 10, 2 );
    function my_getarchives_where( $where, $r ) {
      global $my_archives_post_type;
      if ( isset($r['post_type']) ) {
        $my_archives_post_type = $r['post_type'];
        $where = str_replace( '\'post\'', '\'' . $r['post_type'] . '\'', $where );
      } else {
        $my_archives_post_type = '';
      }
      return $where;
    }
    add_filter( 'get_archives_link', 'my_get_archives_link' );
    function my_get_archives_link( $link_html ) {
      global $my_archives_post_type;
      if ( '' != $my_archives_post_type )
        $add_link .= '?post_type=' . $my_archives_post_type;
        $link_html = preg_replace("/href=\'(.+)\'\s/","href='$1".$add_link."'",$link_html);
    
      return $link_html;
    }

    上記の内容を挿入して

    wp_get_archives('show_post_count=1&type=yearly&post_type=activity');

    でリスト表示したものは、リンク先がこちらの望むURL(www,hogehoge.com/date/2012?post_type=activity)で出力されます。

    <select name="archive-dropdown" onChange='document.location.href=this.options[this.selectedIndex].value;'><option value=""><?php echo attribute_escape(__('過去の情報を探す')); ?></option>
    <?php wp_get_archives('show_post_count=1&type=yearly&post_type=news'); ?>
    </select>

    上記の書き方で、プルダウン表示した場合のリンクURLの語尾が、www,hogehoge.com/date/2012 となってしまいます。

    何か方法はありますでしょうか?
    よろしくお願いします。

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

    (@jim912)

    tdktmさん

    functions.phpに追加した中の

    $link_html = preg_replace("/href=\'(.+)\'\s/","href='$1".$add_link."'",$link_html);

    の部分が、リンク先を変更している部分です。リスト形式の場合はリンク先がhrefなので、これで動作しますが、プルダウンの場合は、optionになるため、上記のリンク先を変更している部分が動作しません。

    hrefとなっている部分をそのまま、optionに差し替えれば、リストではなく、プルダウンで動作するようになるはずです。

    ※ 例示コードは、デフォルトパーマリンクを考慮していないので、その場合、動作しない可能性があります。

    トピック投稿者 tdktm

    (@tdktm)

    jim912さん

    返答ありがとうございます!

    教えていただいた通り下記のコードに修正したのですが
    結果は変わらず、プルダウン選択後のURLは
    www,hogehoge.com/date/2012 と出てしまいました。。

    $link_html = preg_replace("/option =\'(.+)\'\s/","option='$1".$add_link."'",$link_html);

    何か修正する箇所が間違っているのかと思い、
    optionではなく、hrefをvalueに差し替えるのがいいのでは、と試したのですが
    結果は同じでした。

    $link_html = preg_replace("/value =\'(.+)\'\s/","value='$1".$add_link."'",$link_html);

    ちなみにhrefをoption、valueの両方で試して、プルダウン部分のソースを見たところ

    <select name="archive-dropdown" onChange='document.location.href=this.options[this.selectedIndex].value;'>
    <option value="">過去の出演情報を探す</option>
    <option value='http://www,hogehoge.com/date/2012'>2012</option>
    </select>

    どの結果もみな同じく、valueに挿入されるリンクURLから「?post_type=activity」が外れた状態になっています。

    jim912さんのお知らせいただいた内容と違う修正をしていましたら
    申し訳ありませんが、もう一度お知らせ願えますでしょうか。。

    トピック投稿者 tdktm

    (@tdktm)

    すいません。質問する前にパーマリンクについての説明が抜けていました。

    プラグインの「Custom Post Type Permalinks」を使用しており
    該当のカスタム投稿のパーマリンクは「/activity/%post_id%.html」と設定しています。

    どうぞよろしくお願い致します。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「カスタム投稿で年別アーカイブをプルダウンで表示したい」には新たに返信することはできません。