20210829のPHPに関する記事は4件です。

Wordpressでカスタム投稿の新着順にユーザー一覧を作成する

get_usersを使えば、ユーザーの一覧を取得できます。 関数リファレンス/get users ユーザーID、登録日でソートすることはできけど、カスタム投稿の新着順にソートするできないみたい。 検索してみても、同じようなことをしてるサイトが見つからなかったけど、やってみたらできたので、それのメモ。 完成形 まずは完成形を。 <?php $userlist = []; // 最終的に出力するユーザー一覧の配列 // ユーザーを取得 $args = [ 'orderby' => 'ID', 'order' => 'ASC', ]; $users = get_users($args); foreach ($users as $user){ $uid = $user->ID; $usernicename = $user->user_nicename; // ユーザーに紐付く最新記事の取得 $args = [ 'orderby' => 'post_date', 'order' => 'DESC', 'post_type' => 'photos', // カスタム投稿タイプを指定。例としてphotos 'author' => $uid, 'numberposts' => 1, ]; $mypost = get_posts($args); if (!$mypost) { // 投稿がないユーザーは除外 continue; } $postid = $mypost[0]->ID; $postdate = $mypost[0]->post_date; $userlist[] = [ 'usernicename' => $usernicename, 'displayName' => $user->display_name, 'postdate' => $postdate, ]; }; // ユーザーを投稿の新着順にソート array_multisort(array_column($userlist, 'postdate'), SORT_DESC, $userlist); foreach ($userlist as $post) : ?> <li> <a href="<?= get_bloginfo("url") . '/user/' . $post['usernicename'] ?>"> <p class="name"><?= $post['displayName'] ?></p> </a> </li> <?php endforeach ?> 一応解説します。 ユーザー取得 ここでユーザー一覧を取得します。 最終的に投稿日順に並び替えるので、ソート順はなんでもいいのですが、ここではIDの昇順で取得。 // ユーザーを取得 $args = [ 'orderby' => 'ID', 'order' => 'ASC', ]; $users = get_users($arga); ユーザーごとに新着記事を取得 取得したユーザー一覧をforeachで回します。 その中でユーザーが投稿したカスタム投稿の最新記事を取得し、$mypostに格納します。 また、記事の投稿がないユーザーは表示したくないので、if (!$mypost)で スキップしてます。 // ユーザーに紐付く最新記事の取得 $args = [ 'orderby' => 'post_date', 'order' => 'DESC', 'post_type' => 'photos', // カスタム投稿タイプを指定。例としてphotos 'author' => $uid, 'numberposts' => 1, ]; $mypost = get_posts($args); if (!$mypost) { // 投稿がないユーザーはスキップ continue; } 投稿日を取得して配列に格納する 取得した最新記事からpost_dateを取り出し、$userlistに格納する ここまでできたらもう一息です。 $postdate = $myposts[0]->post_date; $userlist[] = [ 'usernicename' => $usernicename, 'displayName' => $user->display_name, 'postdate' => $postdate, ]; カスタム投稿の新着順でソート array_multisortでpostdate順にソートしてやれば、投稿日順にソートされたユーザー一覧配列の出来上がりです。 あとはこの配列をforeachで出力してやれば、完成です。 array_multisort(array_column($userlist, 'postdate'), SORT_DESC, $userlist); foreach ($userlist as $post) : ?> <li> <a href="<?= get_bloginfo("url") . '/user/' . $post['usernicename'] ?>"> <p class="name"><?= $post['displayName'] ?></p> </a> </li> <?php endforeach ?> 最後に これで取得したユーザー一覧をカスタム投稿の新着順に並べることができました。 ちなみに、get_the_post_thumbnail_url($mypost[0]->ID)としてやれば、記事に登録されたアイキャッチ画像を取得することができます。 やってみたら意外と簡単にできたました。 もし同じようなことをしたい人がいたら、参考にしてくれたら嬉しいです。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【初心者向け】バリデーションについて〜Laravel〜

今回は、バリデーションの概要と設定方法、エラーメッセージの表示方法について説明します。 バリデーションとは バリデーションとは、ユーザーが入力した情報がその仕様や文法などに照らして適切な形式で記述されているかをチェックするための仕組みです。 たとえば、数字で入力してもらいたい年齢欄に名前を漢字で入力されたらサービスの提供を適切に行えなくなってしまいますよね。 それを防ぐためにバリデーションを利用します。 バリデーションの設定方法 コントローラーのアクション内に以下のように記述すれば、バリデーションを設定することができます。 〇〇Controller.php $rules([ '連想キー(カラム名)' => 'バリデーションルール', ]); $this->validate($request, $rules); 複数のバリデーションルールを設定したいときは、「|」を使って繋げて記述します(例:'required | max:500')。 バリデーションは、送信された情報が要求した形式に合致していなかったらフォーム画面が再表示される仕様になっているため、このままでは、ユーザーはフォームがちゃんと送信できたのか、今の送信は何がだめだったのかが分かりません。 そこで、ユーザーにも分かるようにエラーメッセージを表示し、再入力しやすいように入力した値はフィールドに残してあげます。 エラーメッセージの表示方法 フォームを用意したテンプレートを以下のように修正していきます。 index.blade.php <div> @error('カラム名') <span class="input-error">{{ $message }}</span> @enderror <input type="text" name="name" value="{{ old('カラム名') }}"> </div> このようにすることで、カラムごとにエラーメッセージを表示してあげることができます。 また、inputタグにvalue="{{ old('カラム名') }}"を入れてあげることで、前回入力した値が再表示されるようになります。 エラーメッセージの日本語化 このままだと、エラーメッセージは英語で表示されてしまうので、日本語に変えたい人は以下の設定が必要になります(やり方は何通りかあります)。 1) config>app.php内に記述されている'locale'=>'en'を'locale'=>'ja'に修正します。 2) resources>lang内に「ja」というディレクトリを作成し、その中にvalidation.phpファイルを作成します。 3) resources>lang/en>validation.phpの中身を2)で作ったvalidation.phpにコピペします。 4) ja>validation.php内の該当するバリデーションルールのThe以降の部分を日本語に書き換えます。 以上で、自分が表示させたい日本語のエラーメッセージが表示されるようになります。 別のやり方は調べたらいろいろ出てくると思うので、ググって自分が1番いいと思う方法で実装してみてください。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

composer require -w tymon/jwt-authがエラー

趣向 composer require -w tymon/jwt-auth を使用するとエラーが出てしまい jwt-authをインストールすることができなかった。 Laravel: 8.40 PHP: 8.0 エラー 下記のエラーがでてしまう。 Your requirements could not be resolved to an installable set of packages. Problem 1 - Root composer.json requires tymon/jwt-auth ^0.5.12 -> satisfiable by tymon/jwt-auth[0.5.12]. - tymon/jwt-auth 0.5.12 requires illuminate/support ~5.0 -> found illuminate/support[v5.0.0, ..., 5.8.x-dev] but these were not loaded, likely because it conflicts with another require. Installation failed, reverting ./composer.json and ./composer.lock to their original content. 解決 以下のコマンドで実行する。 composer require -w tymon/jwt-auth --ignore-platform-reqs ※composer require barryvdh/laravel-cors コマンドも同様でした
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【MAMP】PHPのPath設定(.zprofile)

まず、ルートディレクトリに移動します。 $ cd 下記を記述してパスを通します。 php7.3.27の部分は、自分の使っているMAMPのPHPのバージョンに変更して下さい。 $ export PATH=/Applications/MAMP/bin/php/php7.3.27/bin:$PATH 最後に、下記コマンドを打ち込み設定を反映を反映させます。 $ source ~/.zprofile PHPのバージョン変更が反映されているか確認してみましょう。 $ php -v
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む