サイトの作り方について
-
リスト形式のページを2つ作成し、それぞれ100ページがぶら下がる感じのサイトを作りたいのですが、「投稿」「固定」どちらで作成するのが良いのかわかりません。
とりあえず、固定ページを数ページ作成(内容は適当)しましたが、追加する度に「ページ属性」の「親」「テンプレート」選択する必要があるため、200ページなどを作成した場合、選択するのも大変になるのでは?と感じてます。
そこで、「投稿ページ」で作成した場合を考えると、リスト形式のページをどうすればいいのか?リスト形式のページを固定ページで作成すると、パンずく部分はどうなるのか?など・・・疑問がでてきます。
理想としては、下記ページのような感じです。
http://www.adminweb.jp/wordpress-plugin/リスト形式の2ページや記事200ページは何で作成すれば良いのでしょうか?
アドバイスをよろしくお願い致します。
-
いろいろ調べ、リスト形式の2ページはカテゴリにし、それぞれのテンプレート「category-slug1.php」「category-slug2.php」を作成することにしました。
現在、この2つのファイルを作成中ですが、いくつかわからないことがあります。
投稿記事のタイトルは先頭から2文字がアルファベットであり、これを昇順に並び替え、尚且つ、アルファベットごとに区切りたいと考えております。そこで、ループの外に<?php query_posts(‘cat=1&order=ASC’); ?>を追加したところ、昇順に並び替えることはできましたが、これをアルファベットごとに区切る方法がわかりません。
<?php query_posts(‘cat=1&order=ASC’); ?>に何かを追加することで、Aから始まる記事だけを抜き取る方法はあるのでしょうか?アドバイスをよろしくお願い致します。
たどりつきたい形
<dl> <dt>-A-</dt> <dd>AAA</dd> <dd>ABC</dd> </dl> <dl> <dt>-B-</dt> <dd>BAA</dd> <dd>BBC</dd> </dl> ・ ・ ・ <dl> <dt>-Z-</dt> <dd>ZAA</dd> <dd>ZBC</dd> </dl>
`
こんにちは、
ループの中で処理しては、どうでしょうか?
<?php if ( have_posts() ) { while( have_posts() ) { the_post(); if( $first_string !== タイトルの先頭文字 ) { echo '<dt>タイトルの先頭文字</dt>'; } // do stuff $first_string = ここに、タイトルの先頭一文字を変数にいれて } } ?>
先ほどの投稿内容ではアルファベット順にならないようです。
訂正しておきます。<?php query_posts('cat=1&order=ASC&orderby=title'); ?>
ところで、nobitaさんありがとうございます。
頂いた課題の件ですが、これをどう利用すれば良いのかわかりません。
もう一歩、いや、あと五歩くらい進めていただけませんか!ちなみに、現状は下記のようになっております。
<dl> <dt>-A-</dt> <?php query_posts('cat=1order=ASC&orderby=title'); ?> <?php if (have_posts()) : ?> <?php while (have_posts()) : the_post(); ?> <dd>"><?php the_title(); ?></dd> <?php endwhile; ?> <?php endif; ?> <?php wp_reset_query(); ?> </dl>
じゃ、100歩進めます
<dl> <?php query_posts( 'cat=1order=ASC&orderby=title' ); if ( have_posts() ) : while ( have_posts() ) : the_post(); $title = get_the_title(); $first_string = wp_html_excerpt( $title, 1, '' ); if ( $first_string !== $before_string ) { echo "<dt>$first_string</dt>"; } echo "<dd>$title</dd>"; $before_string = $first_string; endwhile; endif; wp_reset_query(); ?> </dl>
で、いけると思います
nobitaさん ありがとうございます。
(いや、ドラえもんのおかげかな)いつもの私なら、elseifを多用し作っていたことでしょう。
(作れたかどうかは定かではありませんが・・・)
初めてこのような書き方でWPを作成することができます。
本当にありがとうございました。query_postsの部分で&が抜けていたいので、訂正しておきます。
<dl> <?php query_posts( 'cat=1&order=ASC&orderby=title' ); if ( have_posts() ) : while ( have_posts() ) : the_post(); $title = get_the_title(); $first_string = wp_html_excerpt( $title, 1, '' ); if ( $first_string !== $before_string ) { echo "<dt>$first_string</dt>"; } echo "<dd>$title</dd>"; $before_string = $first_string; endwhile; endif; wp_reset_query(); ?> </dl>
解決済みにしたのでダメなのかな
これにはpermalinkが含まれておりませんでした。
いろいろやっているうちに下記の方法で思い通りになりました。
正直、何もわからず、Nobitaさんから頂いたコードを参考に見よう見真似でやったので、
これが正しいのか?もわかりません。もし、正しくない!、または、これもいいけど一般的にはこうだよ!
などありましたら、アドバイスをください。よろしくお願い致します。
`<dl> <?php query_posts( 'cat=1&order=ASC&orderby=title' ); if ( have_posts() ) : while ( have_posts() ) : the_post(); $title = get_the_title(); $permalink = get_permalink(); $first_string = wp_html_excerpt( $title, 1, '' ); if ( $first_string !== $before_string ) { echo "<dt>- $first_string -</dt>"; } echo "<dd><a href="$permalink">$title</a></dd>"; $before_string = $first_string; endwhile; endif; wp_reset_query(); ?> </dl>`
<dl> <?php query_posts( 'cat=1&order=ASC&orderby=title' ); if ( have_posts() ) : $html = '<dd><a href="%1$s">%2$s</a></dd>'; while ( have_posts() ) : the_post(); $title = get_the_title(); $first_string = wp_html_excerpt( $title, 1, '' ); $permalink = get_permalink(); if ( $first_string !== $before_string ) { echo "<dt>$first_string</dt>"; } // これは、ちょっと惜しい //echo "<dd><a href="$permalink">$title</a></dd>"; //正しくは // echo "<dd><a href=\"$permalink\">$title</a></dd>"; // リンクが混じったり複雑になる場合は、 // 以下のようにhtmlとスクリプトを分離すると、みやすいとか、( めんどくせえとか、いう人もいるかも ) printf( $html, esc_url( $permalink ) , $title ); $before_string = $first_string; endwhile; endif; wp_reset_query(); ?> </dl>
添削していただけて良かったです。
ありがとうございました。新たな課題については、調べながらやってみたものの・・・結果がでませんでした。残念。
せっかくこの方法を学んだので、別のテンプレートでも使ってみたのですが、なかなか思うようにできません。
そもそも、どの書き方が良いのでしょうか?その時々で選ぶべきなのでしょうか?ちなみに、他のテンプレートで試した結果です。
こちらが、いつもの1行タイプ。`<?php if (have_posts()) : ?> <?php while (have_posts()) : the_post(); ?> <ul> <li> <h1><a>"><?php the_title(); ?></a></h1> <p class="post-info">投稿:<?php echo get_the_date(); ?> <?php if (get_the_modified_date('Y年n月j日') != get_the_time('Y年n月j日')) : ?> (<span class="text-danger bg-danger">更新:<?php the_modified_date('') ?></span>) <?php endif; ?> <?php if(!is_page()): ?> Category:<?php the_category(', '); ?> <?php the_tags( 'Tags:', ', ' ); ?></p> <?php endif; ?> </li> </ul> <?php endwhile; ?> <?php endif; ?>`
こちらは、複数行タイプ。
カテゴリとタブの出力部分が囲っているulダグの外に出てしまいますけど・・・。`<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); $title = get_the_title(); $permalink = get_permalink(); $date = get_the_date(); $modified = get_the_modified_date(); $category = the_category(', '); $tags = the_tags('Tag:', ','); echo "<ul>"; echo "<li>"; echo "<h1><a href="$permalink">$title</a></h1>"; echo "<p class=\"post-info\">投稿:$date "; if ( get_the_modified_date('Y年n月j日') != get_the_time('Y年n月j日') ) { echo " (<span class=\"text-danger bg-danger\">更新:$modified</span>) "; } echo "Category:$category $tags</p>"; echo "</li>"; echo "</ul>"; endwhile; endif; ?>`
<dl><?php query_posts( 'cat=1&order=ASC&orderby=title' ); if ( have_posts() ) { /* * テンプレートは、テンプレートは、テンプレート関数とhtmlだけで構成されるのが理想的だと思いますが(一行タイプ) * 内容によって、PHPのコードブロックを書かなければならないことがあります。複数行からなるコードブロックを、無理に一行タイプで記述する事は * 可読性も落ちますし、あまり意味がないと私は考えています。 * ただ、メンテナンス性や可読性を良くするために、htmlとPHPをできるだけ分離して記述するとよいのではないかと考えています。 * * テンプレートで、動作の確認が十分できたら、関数化して、functions.phpに書き込むと、一行タイプで書くことが出来るようになりますよね */ $html = '<dd id="%7$s"> <h1> <a href="%1$s">%2$s</a> </h1> <p class="post-info">%3$s <span class=\"text-danger bg-danger\">%4$s</span> %5$s %6$s </p> </dd>'; while ( have_posts() ) { the_post(); /* echo しない関数を利用する場合は、 plugin等が、フックを利用できるように考慮しておいたほうがいいです * 例: the_permalinkを使った場合(一行タイプ)は、 the_permalinkというフックが利用できますが、 * $permalink = get_permalink();を使った場合には、 the_permalink というフックは利用できない * */ $category = ''; $tags = ''; $title = get_the_title(); if ( empty( $title ) ) { $title = esc_html__( 'No Title', 'text-domain' ); } $first_string = wp_html_excerpt( $title, 1, '' ); $permalink = get_permalink(); $date = sprintf( esc_html__( 'Posted Date %1$s', get_the_date() ) ); $modified = get_the_modified_date( 'Y年n月j日' ); $category_list = get_the_category_list( ', ' ); $category_count = count( explode( ',', $category_list ) ); $modified_date = get_the_modified_date( ); $published_date = get_the_time( 'Y年n月j日' ); $tag_list = get_the_tag_list( '', ', ' ); $tag_count = count( explode( ',', $tag_list ) ); if ( $modified == $published_date ) { $modified = sprintf( esc_html__( 'Published %1$s', 'text-domain' ), $published_date ); } else { $modified = sprintf( esc_html__( 'Updated %1$s', 'text-domain' ), $modified ); } /* $category = the_category(', '); //変数には入れられません */ $category = sprintf( _n( 'Category %1$s', 'Categories %1$s', $category_count, 'text_domain' ), $category_list ); /* $tags = the_tags('Tag:', ','); //変数には入れられません */ if ( $tag_list !== false ) { $tags = sprintf( _n( 'Tag %1$s', 'Tags %1$s', $tag_count, 'text_domain' ), $tag_list ); } if ( $first_string !== $before_string ) { echo "<dt>$first_string</dt>"; } printf( $html, $permalink, $title, $date, $modified, $category, $tags, 'post-' . get_the_ID() ); $before_string = $first_string; } wp_reset_query(); } ?></dl>
訂正
誤
<span class=\"text-danger bg-danger\">%4$s</span> %5$s %6$s </p>
正
<span class="text-danger bg-danger">%4$s</span> %5$s %6$s </p>
nobitaさん いつもありがとうございます。
ざっと見ただけで、私の範囲ではないなと感じてしまいました。
それでも、今まではこのような質問をしても回答を得られなかったため、そこでおわっておりましたが、これが良い参考例としていろいろ試すことができそうです。本当にありがとうございます。
また、何かありましたらよろしくお願い致します。ps
確かブログありましたよね。
以前、見たようなきがするのですが・・・
いろいろと参考にしたいので、よければ教えて下さい。テンプレートで、動作の確認が十分できたら、関数化して、functions.phpに書き込むと、一行タイプで書くことが出来るようになりますよね
と書いておきましたけど、関数化したやつを書いておきました。よろしく
- トピック「サイトの作り方について」には新たに返信することはできません。