大変初歩的な質問で申し訳ございません。
WordPressのfunctions.php内、自作のフィルターフックにおいて、
2、3日以下の課題に取り組んでいますが、全くクリアされないため、
ご質問を失礼いたします。
前提・実現したいこと
①カスタム投稿にて記事を新規投稿時、
②カスタム投稿画面に設置しているカスタムフィールド
(functions.phpへコードを書いて設置したもの)に、
③生成した乱数を自動入力させておく
発生している問題
カスタム投稿の新規投稿画面に進みますが、 カスタムフィールドが空欄のまま、乱数が自動入力されていません。 ※エラーはなく、phpファイルの保存自体は成功し、サイトも正常表示されます。
該当のソースコード
php
1【ソースコード】 2/** 3 * 乱数パスワード生成(カスタムフィールドに) 4 **/ 5add_filter('wp_insert_post_data','SetPwd', 10, 3); 6 7function SetPwd($data, $postarr){ 8 $pass = makeRandPwd($length); 9 if($data["post_type"] === "goods_info"){ 10 $value = get_post_meta( get_the_ID(), 'password', true ); 11 if($value == ""){ 12 update_post_meta($postid, 'password', $pass); 13 } 14 } 15 return $data; 16} 17 18function makeRandPwd($length) { 19 $length = 16; 20 $str = array_merge(range('a', 'z'), range('0', '9'), range('A', 'Z')); 21 $r_str = null; 22 for ($i = 0; $i < $length; $i++) { 23 $r_str .= $str[rand(0, count($str))]; 24 } 25 return $r_str; 26}
試したこと
フィルターフックの設定や、ユーザー定義関数の記述方式など、
書籍(「WordPressユーザーのためのPHP入門」)やWordPress Codexを参照したり、
簡単なコーディングにて、投稿タイプやカスタムフィールドの取得、ユーザー定義関数が
正常に動作することを確認いたしました。
また、上記ソースコードを保存時、エラーメッセージは出ておらず、
サイトも正常に表示されます。
補足情報(FW/ツールのバージョンなど)
- 使用サーバー : Xserver
- PHP version : PHP7.3.16
- WordPress version : WordPress 5.4.1
上記ソースコードに至るまで、何回か新規にコーディングし直したり、
Codexを参照し、関数やフィルターフックの使用方法が適正かどうか、
Web検索でのコーディング紹介サイトの参照、書籍での基本的知識の獲得などに基づき、
正規の記述方式を守ったつもりではございますが、
これ以上は、どこが根本的に誤っているのか、主観的に冷静な精査ができかねます為、
恥を忍んでこちらにご質問させていただきました。
主観と致しましては、
php
1add_filter('wp_insert_post_data','SetPwd', 10, 3); 2 3function SetPwd($data, $postarr){ 4 $pass = makeRandPwd($length); 5 if($data["post_type"] === "goods_info"){ 6 $value = get_post_meta( get_the_ID(), 'password', true ); 7 if($value == ""){ 8 update_post_meta($postid, 'password', $pass); 9 } 10 } 11 return $data; 12}
こちらの関数の記述内容において、
$data["post_type"]
の記述ミスでカスタム投稿タイプが指定できていない'wp_insert_post_data'
のフィルターフックが記述ミスで掛かっていないadd_filter
での、渡す変数の個数が間違っている- そもそも変数の記述が間違っている
などの誤りがあるのではないかと考えておりますが、どこがどう間違っているのか、
見当がつきかねる状況です。
第三者の方の視点から、どの箇所に誤りがあるのかご指摘いただけますと幸いです。
お手数ではございますが、以上、何卒宜しくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。