フォーラム

[解決済み] ページリストの表示のタイトル・日付の順番を変更したい (30 件の投稿)

  1. igarashi5620
    メンバー
    3 ヶ月前の投稿 #

    お世話になります。
    新規でページを作成した場合、下記のタグを入れることにより、
    リスト表示が可能ですが、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日
    タイトル

  2. igarashi5620
    メンバー
    3 ヶ月前の投稿 #

    別な方法での相談ですが、
    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で可能でしょうか?

  3. igarashi5620
    メンバー
    3 ヶ月前の投稿 #

    度々お世話になります。
    下記サイトでお知らせのプラグインを見つけました。
    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>
  4. shokun0803
    メンバー
    3 ヶ月前の投稿 #

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

  5. igarashi5620
    メンバー
    2 ヶ月前の投稿 #

    shokun0803 さん

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

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

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

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

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

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

  6. igarashi5620
    メンバー
    2 ヶ月前の投稿 #

    ちなみにウィジェットのページ機能では、
    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)タイトル)
    お知らせとして掲載したいのです。

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

  7. igarashi5620
    メンバー
    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つのタグを合わせるには、どうしたらよいのかが。。&でつなげばいいんですかね?
    引き続き試してみますが、アドバイスをいただけると幸いです。
    要望ばかりですみません。

  8. shokun0803
    メンバー
    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ですね!ソースはほとんど変わらないはずです。

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

  9. igarashi5620
    メンバー
    2 ヶ月前の投稿 #

    shokun0803 さん

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

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

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

    また連絡します。

  10. igarashi5620
    メンバー
    2 ヶ月前の投稿 #

    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>
  11. shokun0803
    メンバー
    2 ヶ月前の投稿 #

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

    <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;が好きですね;)

  12. igarashi5620
    メンバー
    2 ヶ月前の投稿 #

    shokun0803 さん

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

  13. igarashi5620
    メンバー
    1 ヶ月前の投稿 #

    shokun0803 さん

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

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

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

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

  14. shokun0803
    メンバー
    1 ヶ月前の投稿 #

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

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

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

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

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

  15. shokun0803
    メンバー
    1 ヶ月前の投稿 #

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

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

  16. igarashi5620
    メンバー
    1 ヶ月前の投稿 #

    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>
  17. shokun0803
    メンバー
    1 ヶ月前の投稿 #

    ん~と、私ちょっと勘違いしていたかもしれません。

    新規で作成したページのタイトルを「トピックス」とした場合、
    そのページのリスト表示は「トピックスを更新しました」と変えたいのですが、全部ではなく、最新ページ5件表示の中の任意のもののみ変えたいのです。

    この事ですが、タイトルは都度違うのですかね?

    つまり、新規作成したときにページタイトルを任意につけて、その任意につけたタイトルに対して「を更新しました」を付加したい、と。

    これは、例えば新しく作成したページに1週間だけ「NEW」をつけたいとかと同じ意味でしょうか?それとも、あくまでも「任意」のページに文言を付加したいのでしょうか?

    前者であれば日付などをキーにして表示も可能かと思います。
    後者であればカスタムフィールドを使って特定のカスタムフィールドに文字が入っている場合のみ差し替えるなんて方法でどうでしょう?

  18. igarashi5620
    メンバー
    1 ヶ月前の投稿 #

    shokun0803 さん

    説明が分かりづらくてすみません。

    つまり、新規作成したときにページタイトルを任意につけて、その任意につけたタイトルに対して「を更新しました」を付加したい、と。

    これは、例えば新しく作成したページに1週間だけ「NEW」をつけたいとかと同じ意味でしょうか?それとも、あくまでも「任意」のページに文言を付加したいのでしょうか?

    前者であれば日付などをキーにして表示も可能かと思います。
    後者であればカスタムフィールドを使って特定のカスタムフィールドに文字が入っている場合のみ差し替えるなんて方法でどうでしょう?

    「を更新しました」を付加したい、ズバリそういうことです。
    で、この場合、どちらかといえば後者に該当するかと思います。
    カスタムフィールドに文字が入っている場合のみ差替えるなんて可能なんですか???
    う〜ん、、カスタムフィールドはDescriptionとkeywordでしか使用したことがありませんでした。
    ご指導お願いいたします。

  19. shokun0803
    メンバー
    1 ヶ月前の投稿 #

    カスタムフィールドを使用したことがあるなら話は早いです。
    カスタムフィールドを表示する方法はご存知ですよね?

    で、一番簡単な方法は「new」なんて適当な名前のカスタムフィールドを作成して、文字を付加したいページにのみ「を更新しました」と記述することです。
    あとはカスタムフィールド「new」を調べて空じゃなかったらタイトルの後にカスタムフィールドの内容を表示してあげればご希望の表示になるかと思います。

    さらに、もう少しこだわった方法であれば、Custom Field Templateプラグインなどを使用してチェックボックスなどを作り、あとは上記とほぼ同じですが、カスタムフィールドを調べてonなら「を更新しました」をタイトルの後に追加で表示するように記述すればよいかと思います。

    前者の方法ならタイトルの後ろにつける文章はページごとに任意の文字が付加できるので用途は広がるかもしれません。後者の方法は不特定多数のユーザーが使用する場合など、使いやすさの面では勝手がいいかと思います。

    こんな案でどうでしょう?

  20. igarashi5620
    メンバー
    1 ヶ月前の投稿 #

    shokun0803 さん

    カスタムフィールドを表示する方法はご存知ですよね?

    これですかね?
    <?php the_meta(); ?>
    あとはこれ使って
    get_post_meta($post_id, $key, $single);
    いうカンジでいいんでしょうか?

    カスタムフィールドテンプレートのプラグインを使用する場合でも、
    上記のphpタグで、カスタマイズしたものを追加しないと表示されませんよね?
    概要はなんとなく理解出来たような。。

    あとはカスタムフィールド「new」を調べて空じゃなかったらタイトルの後にカスタムフィールドの内容を表示してあげればご希望の表示になるかと思います。

    ここのコードが難しそうな気がしますが?

  21. kvex
    メンバー
    1 ヶ月前の投稿 #

    そうでもないと思いますよ。
    shokun0803 さんがおっしゃられてるのを、単調に実現するならば

    <?php
    $res = get_post_meta($post->id, 'new', 'true');
    if($res){
    echo $res;
    }
    ?>
    みたいな感じでしょうか?

    解説
    ・カスタムフィールド'new'を取得
    ・なにか値(または文字列)が入っていればそれを表示
     何も入っていなければ、出力無し

  22. igarashi5620
    メンバー
    1 ヶ月前の投稿 #

    kvex さん

    すみませんが、下記のコードをサイドバーに記述して試したのですが、
    任意のページのカスタムフィールドに「new」と入れ
    値を「を更新しました。」と入れましたが、サイドバーには何も記述されませんでした。
    下記コードの後に、リストを出力するためのタグが必要なのでしょうか?

    <?php
    $res = get_post_meta($post->id, 'new', 'true');
    if($res){
    echo $res;
    }
    ?>

    また下記コードに上記のコードを追加したいのですが、どこに追加すれば良いでしょうか?
    よろしくお願いします。

    <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>
  23. shokun0803
    メンバー
    1 ヶ月前の投稿 #

    任意のページのカスタムフィールドに「new」と入れ
    値を「を更新しました。」と入れましたが、サイドバーには何も記述されませんでした。

    ん~、ループの中に記述する必要があるかな?

    また下記コードに上記のコードを追加したいのですが、どこに追加すれば良いでしょうか?

    <ul>
    <?php
    $postslist = get_posts('post_type=page&exclude=125,131');
    foreach ($postslist as $post) :
    setup_postdata($post);
    $res = get_post_meta($post->id, 'new', 'true');
    ?>
    <li>&raquo;<?php the_time('Y年m月d日'); ?><br /><a href="<?php the_permalink(); ?>"><?php the_title(); ?>
    <?php if( $res ) { echo esc_attr($res); } ?>
    </a></li>
    <?php endforeach; ?>
    </ul>

    こんな感じ?ごめんなさいテストしてません。

  24. igarashi5620
    メンバー
    1 ヶ月前の投稿 #

    shokun0803 さん

    ありがとうございます。
    ですが、以前と同じく下記のようにしか表示されません。
    一番上のトピックスのところが「トピックスを更新しました。」と付加されると良いのですが?

    »2009年10月15日
    トピックス
    »2009年10月15日
    *******
    »2009年10月15日
    *******
    »2009年09月28日
    *******
    »2009年09月18日
    *******

  25. shokun0803
    メンバー
    1 ヶ月前の投稿 #

    すみません、テストしてないもので・・・
    どこでしくじってるか試してもらえませんか?

    $res = get_post_meta($post->id, 'new', 'true');

    の直後に

    var_dump($res);

    とかしてもらってカスタムフィールドを取得しているか確認してみてください。

  26. igarashi5620
    メンバー
    1 ヶ月前の投稿 #

    shokun0803 さん

    ありがとうございます。
    返事が遅くなりすみません。

    上記のコードを入れたところ下記のとおり表示されましたが、
    取得されているのでしょうか?

    string(0) ""
    »2009年10月15日
    *******
    string(0) ""
    »2009年10月15日
    *******
    string(0) ""
    »2009年10月15日
    *******
    string(0) ""
    »2009年10月15日
    *******
    string(0) ""
    »2009年10月15日
    *******
  27. shokun0803
    メンバー
    1 ヶ月前の投稿 #

    すみません・・・取得してませんね・・・

    $res = get_post_meta($post->ID, 'new', 'true');

    これでお願いします。

  28. igarashi5620
    メンバー
    1 ヶ月前の投稿 #

    shokun0803 さん

    ありがとうございます。
    今度は下記のとおり、カスタムフィールドの値が表示されました。
    ようやく表示が見れて感激です。

    string(0) ""
    》2009年10月15日
    *******
    string(0) ""
    》2009年10月15日
    *******
    string(0) ""
    》2009年10月15日
    *******
    string(24) "を更新しました。"
    》2009年10月15日
    *******を更新しました。
    string(0) ""
    》2009年10月15日
    *******

    後は、下記のコードを削除しての運用でよろしいでしょうか?
    var_dump($res);

  29. shokun0803
    メンバー
    1 ヶ月前の投稿 #

    望みどおりの表示になっているのであればOKですよ;)
    var_dump()は変数の中身を表示するために記述しただけです。他にもprint_r()などとすることがあります。phpでコードを組むときは便利なので覚えておくといいですね!

  30. igarashi5620
    メンバー
    1 ヶ月前の投稿 #

    shokun0803 さん

    望みどおりの表示でした。
    大変お世話になりました。
    誠にありがとうございました。

返信

ログイン しなければ投稿できません。

About this Topic

Tags

タグ はまだありません。