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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

WordPress

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

PHP

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

Q&A

解決済

2回答

3217閲覧

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

hirororo

総合スコア72

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

WordPress

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

PHP

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

1グッド

3クリップ

投稿2016/05/21 21:51

編集2016/05/22 08:00

はじめまして!

以前、こちらのサイトで質問させて頂いてからあともう少しで完成するところまで進むことが出来ました。

改めて質問させて下さい。

プログラミング初心者で、ある塾のWordpressサイトを運営しています。

取引先で期限付きでサイト作成を依頼され、期限内に必ず達成させたいという思いで書かせて頂きます。

早速なのですが、

Wordpresサイトで会員登録のプラグイン(WP_Menbership)を導入した後、phpとsqlでユーザー登録を行った日から経過した日数に応じた数の記事を閲覧できるプログラムを作るにはどう取り組めばいいでしょうか?

出来れば、毎日自動で2記事を更新出来るように設定したいと考えています。

例えば、AさんとBさんがいたとします。

Aさんは、新規会員登録して、まだ初日なので、2記事だけ見れる
(2記事以外は画面に表示されず隠れた状態)

一方Bさんは新規会員登録してから、10日経ったので、22記事を閲覧できる

と言ったシステムを導入したいのです。

■試してみたこと

XEORY extensionというテーマの中の
front.phpファイルを編集することで

5記事表示→3記事表示

に変更することができました。

データベースとテーブルの名の確認はできています。

▷考えてみたPHP文

lang

1$time1 = $current_user->user_registered; 2 3$time2 = date("Y/m/d H:i:s", strtotime('0 day')); 4 5$seconddiff = abs($time2 - $time1); 6 7$diff = $seconddiff / (60 * 60 * 24); 8 9$daydiff = floor($diff) + 1;

▷補足

$time1を

$time1 = $current_user->user_registered;と入力するとページエラーが出てしまうのですが、

$time1 = date("Y/m/d H:i:s", strtotime('-1 day'));
このように変えることで、プログラムは機能していました。

▷わからないこと

SQLのデータベースから呼び出せるログインユーザーIDが分からない状況です。

▷使っている会員サイトを作るためのワードプレスプラグイン
・WP_Menbership

主に、新規会員登録ページとログインページを作るためのプラグインです。

今も尚、調べてますが数週間調べても解決に至らず、ご教授して頂ければ幸いです。

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

kei344👍を押しています

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

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

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

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

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

miyabi-sun

2016/05/21 23:27

読みづらいです。フッターにあるヘルプリンクからMarkdownのフォーマットが乗っていますので、PHPのコード部分だけでも```で括ってほしいです。
kei344

2016/05/22 00:41

文章の途中の改行を減らしてください。読点のたびに改行するのは読みにくいです。
miyabi-sun

2016/05/22 08:44

修正ありがとうございます。
guest

回答2

0

ベストアンサー

$current_user->user_registered;よりも前に$current_user = wp_get_current_user();が記載されていないようなら追加してみてください。
日本語Codex クラスリファレンス/WP User
日本語Codex 関数リファレンス/get userdata
ユーザー関連の情報を取得するのはこのあたりが参考になりそうです、WPの関数classを調べるならまずはcodexをあたってみましょう

投稿2016/05/21 22:31

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

hirororo

2016/05/23 17:59 編集

アドバイスありがとうございいます! 送っていただいたサイトを参考にさせていただきます! $current_user->user_registered;よりも前に $current_user = wp_get_current_user();を追加してみました。 ▷変更後のソース ```lang-php $current_user = wp_get_current_user(); $time1 = $current_user->user_registered; $time2 = date("Y/m/d H:i:s", strtotime('0 day')); $seconddiff = abs($time2 - $time1); $diff = $seconddiff / (60*60*24); $daydiff = floor($diff) + 1; ``` ページエラーは出なくなり記事は表示されるようになりましたが、次の問題が発生しました。 登録日が現在のユーザーと10日前のユーザーの記事が同じ数で表示されてしまいます。 ex) 登録日が異なるユーザーAとユーザーBの表示される記事数 ユーザーA: 2016/05/11 00:00:00 1記事 ユーザーB: 2016/05/01 00:00:00 1記事 そこで試してみたことを以下に並べてみます。 ■試してみたこと $daydiffの演算を変更 ex) 変更前 $daydiff = floor($diff) + 1; //(ユーザーAとBともに)表示される記事数1 変更後 $daydiff = floor($diff) + 2 //(ユーザーAとBともに)表示される記事数2 変更後 $daydiff = floor($diff) * 2 //(ユーザーAとBともに)表示される記事数10 になりました。 考えられる原因として、、 ・計算式に問題がある ・データベースからユーザー登録日の情報を受け取れてない と仮設して取り組んでいます、 ワードプレスコーデックなどで調べてみましたが未だに解決策を模索中です。 アドバイス頂けると幸いです。 よろしくお願いいたします。
退会済みユーザー

退会済みユーザー

2016/05/23 20:33

hirororoさんがまずすべきなのはvar_dump($current_user->user_registered);だと思います。 また計算結果をみて仮設を立てるのではなく$time1,$time2,$seconddiff,$diffの各値をvar_dumpして具体的にどういった内容になっているのか確認したほうがいいと思います。
kei344

2016/05/24 01:49

横から失礼します。 $current_user->user_registeredに値が入っていると仮定して、 $time1 = $current_user->user_registered; $time2 = date("Y/m/d H:i:s", strtotime('0 day')); はどちらも文字列です。 miyabi-sunさんの書かれているように、 $time1 = strtotime( $current_user->user_registered ); $time2 = time(); とすれば秒数が採れると思います。
hirororo

2016/05/24 09:53

おかげで無事、プログラムを機能させることに成功しました! 詳しいアドバイスをしていただき、ありがとうございます! こちらが機能することに成功したプログラムになります。 $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) + 1; まだ、一点問題が残っているのですが、今回の質問と少し違ったものになるため改めて質問させて頂きます。
guest

0

私はWPはあまり知らないので、日付の取得に関してはサポートできません。
経過日数の計算回りに限って回答します。

PHP

1$time1 = $current_user->user_registered; 2$time2 = date("Y/m/d H:i:s", strtotime('0 day')); 3$seconddiff = abs($time2 - $time1); 4$diff = $seconddiff / (60 * 60 * 24); 5$daydiff = floor($diff) + 1;

$current_user->user_registeredは文字列ではないですか?
$time2 = date("Y/m/d H:i:s", strtotime('0 day'))は一目瞭然で文字列です。
その後$seconddiff = abs($time2 - $time1);で登録後の経過秒数を確認したいのだと思われますが…

PHP

1$ php -a 2Interactive shell 3 4php > $hoge = "2016-05-22 8:42"; 5php > $piko = "2014-03-14 16:16:17"; 6php > echo $hoge - $piko; 72 // 日付のセパレートがスラッシュ(/)だったとしても同じ結果

結果はご覧の通り2になります。
理由は公式サイトの文字列の数値への変換を読んでください。
これではいくら頑張っても経過年数しか取れない訳です。

ここで役に立つのがstrtotime関数です。
この関数を使うと全ての日付っぽい文字列は1970/1/1からの経過秒数となります。
後はこれを計算してやれば良いだけですね。

php

1php > $hoge = "2016-05-22 8:42"; 2php > $piko = "2014-03-14 16:16:17"; 3php > echo strtotime($hoge); 41463906520 5 6php > echo strtotime($piko); 71394813777

最後に2行目ですが、ユーザーが作成した日付$time1は「過去」であり、変動はしません。
$time2は今である必要があります。
今を返す関数はtime()です。

PHP

1php > echo time(); 21463875209

上記を踏まえて頑張ってみてください。

投稿2016/05/22 00:00

miyabi-sun

総合スコア21158

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

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

hirororo

2016/05/23 17:32 編集

アドバイスありがとうございいます! アドバイスを元に、変更したら無事動きました! 他の問題も発生しましたが^^; 変更後のソースはこちらになりました。 ```lang-php $current_user = wp_get_current_user(); $time1 = $current_user->user_registered; $time2 = date("Y/m/d H:i:s", strtotime('0 day')); $seconddiff = abs($time2 - $time1); $diff = $seconddiff / (60*60*24); $daydiff = floor($diff) + 1;
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問