サポート » テーマ » ページリストの表示のタイトル・日付の順番を変更したい

  • 解決済 igarashi5620

    (@igarashi5620)


    お世話になります。
    新規でページを作成した場合、下記のタグを入れることにより、
    リスト表示が可能ですが、HTMLに出力した場合、順番を(1)日付(2)タイトルの順に表示したいのですが、どのように変更すればよいかが不明です。
    どなたかご指導をお願いします。

    <?php wp_list_pages('title_li=&exclude=3,6,10,12,56&
    sort_column=post_date&show_date=created'); ?>

    〇現在
    ・タイトル
    2009年8月2日

    〇変更後
    ・2009年8月2日
    タイトル

15件の返信を表示中 - 1 - 15件目 (全42件中)
  • igarashi5620

    (@igarashi5620)

    別な方法での相談ですが、
    HTML出力をすると下記の表示になります。

    <div class="news">
    <ul>
    <li class="page_item page-item-57 current_page_item"><a href="" title="ページ1">ページ1</a> 2009年8月17日</li>
    </ul>
    </div>
    .news a {
    display:block;
    }

    現在はCSSで「display:block;」を使用することにより
    リンク部分の後ろを自動改行に設定しておりますが、
    この上下を入れ替えるにはCSSで可能でしょうか?

    度々お世話になります。
    下記サイトでお知らせのプラグインを見つけました。
    http://works-bb.net/2009/06/09/388.html

    これについてはブログ記事のみに関してでしたが、
    これと全く同じで、ページのリストを日付ありでウィジェットで使用したいのです。
    どなたかご存知ありませんか?
    非常に困っています。どのphpファイルを修正すればよいかが。。

    現時点では、ウィジェットで使用したいのです。
    試しに、wp-includes/default-widgets.phpのファイルの下記部分に<?php the_time(‘Y-m-d’); ?>を追加してみましたが、なにも変わりませんでした。

    <ul>
    		<?php  while ($r->have_posts()) : $r->the_post(); ?>
    		<li><?php the_time('Y-m-d'); ?><a href="<?php the_permalink() ?>" title="<?php echo esc_attr(get_the_title() ? get_the_title() : get_the_ID()); ?>"><?php if ( get_the_title() ) the_title(); else the_ID(); ?> </a></li>
    		<?php endwhile; ?>
    		</ul>

    初心者レベルでウィジェットを作るのは難しいでしょう。一応参考文献です
    で、sidebar.phpに直接書き込む方法になるのでしょうが、ソースの書き出しができればあとはcssで調整になりますので簡単です。
    まあ、そのソースの書き出しに困っているのでしょうけど・・・考え方としてはwp_list_pagesで直接書き出すのではなく、いったん配列などに格納して自分で書き出す方が早いと思いますよ。
    私も調整中の案件がありまして、参考になるならこちらを見てみてください。まあやることは若干違うでしょうがヒントにでもなれば;)

    shokun0803 さん

    ご指導ありがとうございます。
    ですが、ソースの書き出しの部分で

    いったん配列などに格納して自分で書き出す方

    というのが、初心者なもので分かりません。

    アドバイスいただいたページも拝見いたしましたが、内容が難しいです。。

    申し訳ないのですが、もう少し簡単な方法はないでしょうか?

    ちなみに既存のウィジェットでは難しいのでしょうか?

    ちなみにウィジェットのページ機能では、
    wp-includes/default-widgets.phpの下記部分をカスタマイズすることにより

    <ul>
    		<li><?php the_time('Y-m-d'); ?><br /><a href="<?php the_permalink() ?>" title="<?php echo $out; ?> </a></li>
    		</ul>

    順番の入れ替えの表示は可能になりました。

    そこで、2つの要望ですが、

    ・サイドバーの表示で、ウィジェットの機能をブログと固定ページで異なる表示にしたい
    ・固定ページのリストを、最近のページで最大5件表示に設定をしたい(ブログ記事のように)

    最終的な形としては、最近のページとブログのリストを最大5件分、サイドバーに表示をして
    (1記事の表示は、(1)日付、(2)タイトル)
    お知らせとして掲載したいのです。

    恐れ入りますが、ご教授をお願いいたします。

    shokun0803 さん

    すみませんでした。
    やはり異なるサイドバー表示にするにはウィジェットではなく、テンプレートタグで指定することにしました。
    ブログの記事については、下記の指定で1件のみ表示することは可能になりました。
    これが最新記事5件に出来れば良いです。

    最近の投稿<br />
    <?php the_time('Y-m-d'); ?><br />
    			<?php echo $prefix; ?><a href="<?php the_permalink() ?>"><?php if ( get_the_title() ) the_title(); else the_ID(); ?> </a>

    ページについては、下記を試しましたが、
    日付が1つしか表示しなく、ページすべてが表示してしまいます。

    最近のページ
    <?php the_time('Y-m-d'); ?><br />
    <?php wp_list_pages('title_li='); ?>
    <?php if(is_page()): ?>
    <?php bloginfo(); ?>
    <?php endif; ?>

    2つのタグを合わせるには、どうしたらよいのかが。。&でつなげばいいんですかね?
    引き続き試してみますが、アドバイスをいただけると幸いです。
    要望ばかりですみません。

    大変がんばっているようなのでヒントに留めておきます;)
    努力は必ず身になります、これができればいい勉強になりますよ!

    で、

    ブログの記事については、下記の指定で1件のみ表示することは可能になりました。
    これが最新記事5件に出来れば良いです。

    これはループもなにもしていないので1件しか表示できなくて当然ですね。
    前回も書きましたが、好きなように配置して好きなように表示するには配列などに取得して表示を調節する方がはるかに楽です。PHPの基本なのでがんばって挑戦してみましょう。
    ヒントですが、変数$postslistにget_posts関数を利用してデータを取得してみます。

    <pre>
    <?php
    $postslist = get_posts('orderby=post_date');
    print_r($postslist);
    ?>
    </pre>

    取得したデータをprint_rで表示してみました。デバッグするときなどの基本的な方法のひとつなので覚えておくと便利ですよ。このコードを試してみて$postslistの中にどのように配列ができているか確認してみましょう!

    あとは$postslistの中から必要なデータを取り出して表示するのですが、5件表示するなら5回ループさせなくてはなりませんね!回数指定ならforでもいいですが、データを取り出しながらならforeachが便利ですね!次のヒントは、

    foreach ($postslist as $post) :
    setup_postdata($post);
    the_date();
    echo "<br />";
    the_title();
    endforeach;

    こんな感じでしょうか。

    で、記事の取得は上記でよいのですが、ページの取得はget_postsでパラメータにpost_type=pageを指定すればOKですね!ソースはほとんど変わらないはずです。

    きっともう少しですよ!できたときの感動は一入でしょう;)

    shokun0803 さん

    大変貴重なご指導をありがとうございます。

    光が見えて来たような感じがします。

    上記の件、試してみます。

    また連絡します。

    shokun0803 さん

    大変ありがとうございました。
    下記のとおり、テンプレートタグを組み込むことにより、
    求めていたリストを作成することが出来ました。
    確認ですが、下記の記述で書き方は合っておりますでしょうか?
    すみませんが、よろしくお願いします。

    ○記事

    <ul>
    <?php
    $postslist = get_posts('orderby=post_date');
    foreach ($postslist as $post) :
    setup_postdata($post);
    echo "";
    ?>
    <li>》<?php the_time('Y年m月d日'); ?><br /><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
    <?php endforeach; ?>
    </ul>

    ○ページ

    <ul>
    <?php
    $postslist = get_posts('post_type=page&exclude=125,131');
    foreach ($postslist as $post) :
    setup_postdata($post);
    echo "";
    ?>
    <li>》<?php the_time('Y年m月d日'); ?><br /><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
    <?php endforeach; ?>
    </ul>

    基本的には問題ないと思いますが、個人的には

    <ul>
    <?php
    $postslist = get_posts('orderby=post_date');
    foreach ($postslist as $post) :
    setup_postdata($post);
    ?>
    <li>&raquo;<?php the_time('Y年m月d日'); ?><br /><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
    <?php endforeach; ?>
    </ul>
    <ul>
    <?php
    $postslist = get_posts('post_type=page&exclude=125,131');
    foreach ($postslist as $post) :
    setup_postdata($post);
    ?>
    <li>&raquo;<?php the_time('Y年m月d日'); ?><br /><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
    <?php endforeach; ?>
    </ul>

    の方がすっきりして好きです。echo "";が不要なのと、矢印は&raquo;が好きですね;)

    shokun0803 さん

    この度は大変お世話になりました。
    とても感謝しております。
    今回ご指導いただいたことを頭に入れて、
    PHPのタグについて、勉強をしていきたいと思います。
    本当にありがとうございました。

    shokun0803 さん

    度々恐れ入ります。
    上記に関連して、ご質問です。
    ページタイトルのリスト表示が可能になりましたが、
    固定ページで新規に作成した場合、ページタイトルがそのままリストに反映されますが、
    リスト側のタイトル表示を任意に変更することは可能でしょうか?
    例をあげると
    リンクページを作成した場合、

    ○ページタイトル、パンくずは「リンクページ」
    ○リスト表示は「リンクページを更新しました。」

    別件ですが、ページのリスト表示の階層の指定は可能でしょうか?
    例)
    3階層目のページは非表示の設定

    ご指導の程、よろしくお願いいたします。

    えっと、時間的な問題もあって完全なソース回答は難しいのですが・・・
    とりあえず、ひとつずつ解決してみましょうか?

    まず、ページタイトルの変更についてですね。
    これは今いるページがどのページか判断できれば可能です。
    判断の方法にはいくつかあるので、都合のよい方法を取られるとよいと思います。

    まず、ページIDを取得する方法。
    $post->IDで記事のIDが取得できると思うので、if文で前述のソースでsetup_postdata($post);のあとにIDを比較して同じだったら書き換えるでいいと思います。

    次に、タイトルそのものを取得する方法。
    これも同じく$post->post_nameでタイトルそのものを取得して書き換える方法。
    まあ、あまり考えにくいですが、テーマを他のサイトでも使いまわす前提で、IDはページを作った順番で変わってしまいますが、ページタイトルは必ず同じ名前をつけるとルールを決めていればこちらのほうが勝手がいいです。

    どちらにしてもページタイトルをDBの中で変更したりするのではなく、リストとして表示する直前で表示だけ書き換えてしまいましょうという方法です。

    別件ですが、ページのリスト表示の階層の指定は可能でしょうか?
    例)
    3階層目のページは非表示の設定

    少々面倒ですが、get_post_ancestors( $post->ID )で親のIDが順に取得できるはずですので、配列を数えて2つ以上あれば表示しないとかでいけるかもしれません。が、get_postsで取得したループでこの手が使えるか試していませんので、検証からがんばってみてください;)

    shokun0803 さん

    さっそくのご返信をいただきましてありがとうございます。

    ページタイトルの変更についてですが、

    次に、タイトルそのものを取得する方法。
    これも同じく$post->post_nameでタイトルそのものを取得して書き換える方法。
    まあ、あまり考えにくいですが、テーマを他のサイトでも使いまわす前提で、IDはページを作った順番で変わってしまいますが、ページタイトルは必ず同じ名前をつけるとルールを決めていればこちらのほうが勝手がいいです。

    どちらにしてもページタイトルをDBの中で変更したりするのではなく、リストとして表示する直前で表示だけ書き換えてしまいましょうという方法です。

    で、行きたいと思いますが、
    初心者なもので、どのようにすれば良いのかがイマイチ、ピンときていません。。

    現状だと、管理画面のページ編集画面で入力したタイトル部分と同じ文言が、リストにもパンくずにも反映されておりますが、下記コードを使用してのリスト表示の部分のみ、ページのタイトルとは違う内容にしたいのです。
    新規で作成したページのタイトルを「トピックス」とした場合、
    そのページのリスト表示は「トピックスを更新しました」と変えたいのですが、全部ではなく、最新ページ5件表示の中の任意のもののみ変えたいのです。例えば、「を更新しました」を手動で入力するとしても、それを、どこに入れたら良いかがわかりません。ページのタイトルに入れてしまうと、パンくずにも同じく表示されてしまうので、そこらへんが知りたいです。
    下記のコードも記述を変更しないと出来ないのでしょうか?

    <ul>
    <?php
    $postslist = get_posts('post_type=page&exclude=125,131');
    foreach ($postslist as $post) :
    setup_postdata($post);
    ?>
    <li>&raquo;<?php the_time('Y年m月d日'); ?><br /><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
    <?php endforeach; ?>
    </ul>
15件の返信を表示中 - 1 - 15件目 (全42件中)
  • トピック「ページリストの表示のタイトル・日付の順番を変更したい」には新たに返信することはできません。