Wordpress記事を古い順番で、ユーザー登録を行った日から経過した日数に応じて表示させたい

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,934

hirororo

score 58

はじめまして!

一昨日、こちらのサイトで質問させて頂いてから
プログラムの動作を確認することが出来ました。

Wordpress記事をユーザー登録を行った日から経過した日数に応じて可変させたい

まだ一点問題があるため、改めて質問させてください。

古い記事の順番でユーザー登録日数に応じて表示させたいのですが、
下のソースだと人気記事の順番で表示されてしまいます。

■コードを入れて動作が確認できたワードプレス内のソース

<div id="popular_post_content" class="front-loop">

<h2><i class="fa fa-flag"></i> 人気のある記事</h2>
<div class="wrap">
<div class="front-loop-cont">
<?php
$i = 1;
if ( have_posts() ) :
// wp_reset_query();


$current_user = wp_get_current_user();

$time1 = strtotime($current_user->user_registered);

//$time1 = date("Y/m/d H:i:s", strtotime('-1 day'));

$time2 = strtotime(date('Y/m/d H:i:s'));

$seconddiff = abs($time2 - $time1);

$diff = $seconddiff / (60*60*24);

$daydiff = floor($diff) *2;


$args=array(
'meta_query'=>
array(
array( 'key'=>'bzb_show_toppage_flag',
'compare' => 'NOT EXISTS'
),
array( 'key'=>'bzb_show_toppage_flag',
'value'=>'none',
'compare'=>'!='
),
'relation'=>'OR'
),
'showposts'=>$daydiff,
'meta_key'=>'views',
'orderby'=>'meta_value_num',
'order'=>'DESC'
);
query_posts($args);
// query_posts('showposts=5&meta_key=views&orderby=meta_value_num&order=DESC');
while ( have_posts() ) : the_post();

$cf = get_post_meta($post->ID);
$rank_class = 'popular_post_box rank-'.$i;
// print_r($cf);
?>

そこで下のようなソースにしてみると
記事が1ページだけ表示されてしまいました。

■以下ワードプレス内のソース

<div id="recent_post_content" class="front-loop">

<h2><i class="fa fa-clock-o"></i> 最近の投稿</h2>
<div class="wrap">
<div class="front-loop-cont">
<?php
$i = 1;

if ( have_posts() ) :

$current_user = wp_get_current_user();

$time1 = strtotime($current_user->user_registered);

$time2 = strtotime(date('Y/m/d H:i:s'));

$seconddiff = abs($time2 - $time1);

$diff = $seconddiff / (60*60*24);

$daydiff = floor($diff) *2;

query_posts('showposts=$daydiff');
while ( have_posts() ) : the_post();

$cf = get_post_meta($post->ID);
$recent_class = 'popular_post_box recent-'.$i;
?>

また、記事を古い順番で表示させたいので、

while ( have_posts() ) : the_post();の上に

query_posts($query_string. '&order=ASC');と
コードを入れたところ、記事の表示は順逆になりましたが
登録日数にかかわらず記事が全て表示されてしまいました。

■今現在の不明点

・更新日時が古い順番で記事を表示させる方法
・完成したコードをどこに入れればいいか

■使っているワードプレステーマ
XEORY EXTENSION

■参考サイト

ワードプレスフォーラム 「質問」古い記事を上にする方法はありますか? 

【WordPress】Xeoryのテーマをちょこっとだけカスタマイズする!前編

日本語Codex クラスリファレンス/WP User 

おかげさまでようやく完成に近づくことができました。

またご教授して頂ければ幸いです。

よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+2

とりあえず質問の機能に関しては hide2e3rさんの回答で出来たようなので、他の部分の指摘をさせてもらいます。

どこまで厳密に非表示にするのかにもよりますが、 特に設定しない場合 WordPress は様々な形で記事を出力する仕様になっています。
例えば、記事アーカイブ。一覧で記事を絞ったところでURLさえ想像が付けばアクセス可能です。

◆ とりあえず記事が出るページ
・インデックス
・投稿ページ
・固定ページ
・タクソノミー アーカイブ
・カテゴリ アーカイブ
・タグ アーカイブ
・作成者 アーカイブ
・年/月/日 アーカイブ
・カスタム投稿 アーカイブ
・検索結果
・RSS
・タクソノミー RSS
・カテゴリ RSS
・タグ RSS
・作成者 RSS
・年/月/日 RSS
・カスタム投稿 RSS
・管理画面内 投稿ページ
・管理画面内 固定ページ

「このあたりを考えておけばよいのでは」案

  1. $daydiff を取得する関数を functions.php に作る。
    その中で「ログインしていない」場合もついでに取得( $daydiff == 0 になるようにすれば良い)
  2. 記事に通し番号を持たせる
    カスタムフィールドに最初の記事から連番を与えておく= $daydiff と比較するために使える。
  3. 不要なアーカイブは出力しないように設定する
    うまくやればフックでリダイレクトしてしまえるはず。
  4. 記事ページでは「連番」と $daydiff を比較し、規定に達しなかったらリダイレクト
    アーカイブをリダイレクトするフックをうまく設計すればこれもついでにやれる。
  5. 管理画面に入らずにログインできる仕組みを作る

もっとスマートに、クレバーに出来るかもしれませんが、最低限であればこれくらいでいけると思います。まぁどこまで厳密にするかによりますが・・・。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/26 18:16

    ご指摘、ありがとうございます!

    特に、URLが想像できればアクセス出来てしまうのはすぐに対策しようと思います。

    初心者で分からない点もありますが、改善点 しながら取り組んでいきたいと思います!

    丁寧に教えて頂いてありがとうございます!

    キャンセル

checkベストアンサー

+1

showpostsは非推奨なのでquery_posts('order=ASC&posts_per_page='. $daydiff);を試してみて下さい。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/24 22:58 編集

    ありがとうございます!

    無事、プログラムが機能しました!!

    他にもエラーがないかチェックしてみます。

    取り急ぎですがお礼をさせてください、ありがとうございます!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.22%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる
  • トップ
  • PHPに関する質問
  • Wordpress記事を古い順番で、ユーザー登録を行った日から経過した日数に応じて表示させたい