サポート » 使い方全般 » 投稿のナンバーを表示する

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • gogoweb

    (@gogoweb)

    んー・・・
    最新の投稿から順番に表示するという前提なら
    wp_count_postsで投稿総数を拾って、投稿を読み込むたびに減らしていけばいいようなきもしますが、カレンダーと連動させたいのですよね?

    一度まとめて古い順番から読み込んでカスタムフィールドにでもナンバー割り振った方が後で楽なきがしますね。

    トピック投稿者 kurousa007

    (@kurousa007)

    gogowebさん>
    回答ありがとうございます。
    やはりカスタムフィールドの方がいいんでしょうか。
    ひとつひとつの投稿が、一番古い投稿から見て何番目かを自動取得してくれれば、あとのアーカイブなどは、タイトル一覧を表示するPHPなどで出力を考えています。

    「タイトルの前に自動で連番を振る」

    というPHPのブックを公開してる方がいて、そのサイトを見てみたのですが、サーバー落ちされていて進まずです。。。

    これからもどんどん該当記事が増えていく中、途中で削除する記事などが出てきた場合、手動でナンバーを振ると、そこからまた振り直しになってしまうのがネックなのです。

    今はこんな感じにしています。

     投稿No.<a href="<?php the_permalink(); ?>">
    <?php echo wp_count_posts()->updated ?>/<?php echo wp_count_posts()->publish ?></a></p>
    gogoweb

    (@gogoweb)

    効率が悪くていいなら・・・
    $wpdbでIDがpost_id以下のデータを取得する。(最古からID分までの投稿データを取得)
    その配列をcountで数える。
    で、古い順番にナンバリングされた値が出るような気がします。(現在検証できる場所にいないため未確認ですが)
    ただ、一回ごとに3000件以上あるデータベースにアクセスするのもなんだかなあと思ったり。
    なんか他にいい方法とかありそうですね

    LVP8

    (@lvp8)

    gogoweb さんのアイデアで

    functions.phpに

    function ps_number( $post_type = 'post', $op = '<=' ) {
    	global $wpdb, $post;
    	$post_type = is_array($post_type) ? implode("','", $post_type) : $post_type;
    	$number = $wpdb->get_var("
    		SELECT COUNT( * )
    		FROM $wpdb->posts
    		WHERE @post_date@ {$op} '{$post->post_date}'
    		AND @post_status@ = 'publish'
    		AND @post_type@ IN ('{$post_type}')
    	");
    	return $number;
    }

    @(6箇所)は、削除するかバッククォートに変更してください。

    single.php の表示したい箇所に
    <?php echo ps_number(); ?>

    // デフォルトは投稿(post)だけをカウント
    echo ps_number();

    // カスタム投稿 video だけカウント
    echo ps_number( ‘video’ );

    // post と video(配列で指定)
    echo ps_number( array( ‘post’, ‘video’ ) );

    // 表示している投稿タイプだけ
    echo ps_number( $post->post_type );

    コードの正確性や安全性
    完全には考慮されていません。また冗長なものになっている可能性があるのをご理解の上、
    ご自身で検証いただくようお願いいたします。

    LVP8

    (@lvp8)

    下から4行目は IN より = ですね。

    AND post_type = (‘{$post_type}’)

    トピック投稿者 kurousa007

    (@kurousa007)

    gogowebさん
    LVP8さん

    お二方本当にありがとうございます。
    今朝回答を見させていただいて、以下のようにしてできました。

    gogowebさんは、検証できる場にいらっしゃらないのにアイディアを出して頂いてありがとうございます。
    LVP8さんがそこから作って下さったコードで、
    functions.phpに、

    function ps_number( $post_type = 'post', $op = '<=' ) {
    	global $wpdb, $post;
    	$post_type = is_array($post_type) ? implode("','", $post_type) : $post_type;
    	$number = $wpdb->get_var("
    		SELECT COUNT( * )
    		FROM $wpdb->posts
    		WHERE post_date {$op} '{$post->post_date}'
    		AND post_status = 'publish'
    		AND post_type = ('{$post_type}')
    	");
    	return $number;
    }

    と、LVP8さんのコードを書いたら、希望通りの結果が得られました。
    その他の部分に色々なカスタマイズはありますが、不具合等ありません。

    最終的に

    投稿No.<a href="<?php the_permalink(); ?>">
    <?php echo ps_number( $post->post_type ); ?>
     /<?php echo wp_count_posts()->publish ?></a></p>

    として、記事の番号/総記事数と表記しました。
    ここから、連番のアーカイブ等作って行こうと思います。

    1日悩んでいたことが解決してとても嬉しいです。
    お知恵を貸していただき、ありがとうございました。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「投稿のナンバーを表示する」には新たに返信することはできません。