質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

3558閲覧

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

hirororo

総合スコア72

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/05/24 10:18

編集2016/05/24 11:38

はじめまして!

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

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

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

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

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

lang

1<div id="popular_post_content" class="front-loop"> 2 3<h2><i class="fa fa-flag"></i> 人気のある記事</h2> 4<div class="wrap"> 5<div class="front-loop-cont"> 6<?php 7$i = 1; 8if ( have_posts() ) : 9// wp_reset_query(); 10 11 12$current_user = wp_get_current_user(); 13 14$time1 = strtotime($current_user->user_registered); 15 16//$time1 = date("Y/m/d H:i:s", strtotime('-1 day')); 17 18$time2 = strtotime(date('Y/m/d H:i:s')); 19 20$seconddiff = abs($time2 - $time1); 21 22$diff = $seconddiff / (60*60*24); 23 24$daydiff = floor($diff) *2; 25 26 27$args=array( 28'meta_query'=> 29array( 30array( 'key'=>'bzb_show_toppage_flag', 31'compare' => 'NOT EXISTS' 32), 33array( 'key'=>'bzb_show_toppage_flag', 34'value'=>'none', 35'compare'=>'!=' 36), 37'relation'=>'OR' 38), 39'showposts'=>$daydiff, 40'meta_key'=>'views', 41'orderby'=>'meta_value_num', 42'order'=>'DESC' 43); 44query_posts($args); 45// query_posts('showposts=5&meta_key=views&orderby=meta_value_num&order=DESC'); 46while ( have_posts() ) : the_post(); 47 48$cf = get_post_meta($post->ID); 49$rank_class = 'popular_post_box rank-'.$i; 50// print_r($cf); 51?>

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

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

lang

1<div id="recent_post_content" class="front-loop"> 2 3<h2><i class="fa fa-clock-o"></i> 最近の投稿</h2> 4<div class="wrap"> 5<div class="front-loop-cont"> 6<?php 7$i = 1; 8 9if ( have_posts() ) : 10 11$current_user = wp_get_current_user(); 12 13$time1 = strtotime($current_user->user_registered); 14 15$time2 = strtotime(date('Y/m/d H:i:s')); 16 17$seconddiff = abs($time2 - $time1); 18 19$diff = $seconddiff / (60*60*24); 20 21$daydiff = floor($diff) *2; 22 23query_posts('showposts=$daydiff'); 24while ( have_posts() ) : the_post(); 25 26$cf = get_post_meta($post->ID); 27$recent_class = 'popular_post_box recent-'.$i; 28?>

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

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

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

■今現在の不明点

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

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

■参考サイト

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

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

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

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

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

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

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

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

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

  1. $daydiff を取得する関数を functions.php に作る。

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


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

投稿2016/05/24 18:29

kei344

総合スコア69400

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hirororo

2016/05/26 09:16

ご指摘、ありがとうございます! 特に、URLが想像できればアクセス出来てしまうのはすぐに対策しようと思います。 初心者で分からない点もありますが、改善点 しながら取り組んでいきたいと思います! 丁寧に教えて頂いてありがとうございます!
guest

0

ベストアンサー

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

投稿2016/05/24 11:47

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hirororo

2016/05/24 14:23 編集

ありがとうございます! 無事、プログラムが機能しました!! 他にもエラーがないかチェックしてみます。 取り急ぎですがお礼をさせてください、ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問