このシリーズでは、WordPress でシンプルな CRM システムを作成する方法を検討してきました。このシリーズの最初の部分では、「連絡先」カスタム投稿タイプを登録する WordPress プラグインを作成しましたが、連絡先の追加情報を保存する方法については説明していませんでした。
WordPress には、プラグインやテーマの開発者がさまざまな WordPress 管理画面にカスタム メタ ボックスを登録できるようにする add_meta_box()
関数があります。
WordPress は、投稿またはページを作成するときに表示する独自のメタ ボックスをいくつか登録します。たとえば、ページには Page PropertiesMeta Box:
があります。 メタ ボックスを 連絡先 カスタム投稿タイプに追加しましょう。このシリーズの最初のチュートリアルで作成したプラグイン ファイルを開きます。次に、プラグインのコンストラクターで、次と一致するようにコードを更新します。これにより、register_meta_boxes()
関数が add_meta_boxes
に登録されます。アクション:
次に、register_meta_boxes()
関数内に、add_meta_box()
への呼び出しを追加します。これにより、output_meta_box() 関数によってレンダリングされる、ContactDetails
という名前のメタ ボックスが必要であることが WordPress に伝えられます。コンストラクターの後に次のコードを追加します:
最後に、output_meta_box()
関数が必要です。これは、上記の add_meta_box
によって呼び出されます。 register_meta_boxes()
関数の後に次のコードを追加します:
連絡先 カスタム投稿タイプにメタ ボックスが表示されるかどうかを確認してみましょう。 連絡先 > 新しい連絡先の追加
に移動して、WordPress ダッシュボードで新しい連絡先を作成します。すべてが正しく記述されている場合は、次のスクリーンショットのようなものが表示されるはずです。
先に進み、このメタ ボックスに電子メール アドレス フィールドを追加しましょう。 output_meta_box
関数を次のコードに変更します:
プラグイン コードを保存し、連絡先の追加画面をリロードします。新しい電子メール アドレス フィールドが [連絡先の詳細] メタ ボックスに表示されるはずです:
まだ終わっていません。ユーザーがフィールドに入力した内容を保存するように WordPress に指示する必要があります。 WordPress では、save_post
アクションの関数を登録することでこれを行います。
ほとんどの操作と同様に、操作をプラグインのコンストラクターに登録します。
リーリー次に、save_meta_boxes()
関数を作成しましょう:
WordPress やその他のプラグインは save_post
アクションを頻繁に呼び出すことができるため、この関数は複数のアクションを実行します (定期的に下書きを自動的に保存するときや、別の投稿タイプを保存するときなど)。ユーザーが連絡先を保存または更新するときにのみカスタム フィールド データが保存されるようにする必要があります。
連絡先を保存する場合は、電子メール アドレスをクリーンアップします。 WordPress コーデックスより:
無効な UTF-8 をチェックし、単一の
つまり、テキスト文字列におかしな書式設定が存在しないことを保証します。
最後に、update_post_meta
を使用して、メール アドレスを投稿メタデータに保存します。投稿メタは、投稿に添付された一連のキーと値のペアであると考えてください。好きなだけ選択できます。この例では、キー _contact_email
に基づいてカスタム フィールドの値を保存します。
新しい 連絡先を作成し、電子メール アドレスを入力します。新しい連絡先を保存すると、電子メール アドレスがフィールドに表示されないことがわかります:
Post メタを読み取り、入力フィールドに表示するには、output_meta_box()
関数を編集する必要があります。 output_meta_box()
関数を次のコードに変更します:
get_post_meta() を使用して、特定の投稿 ID とメタ キーの組み合わせの値を取得します。メタキーが
_contact_email であることがわかります。それは
update_post_meta() で行うことだからです。 中保存自定义字段值时使用的键
提交和处理表单数据时,安全性极其重要。我们在保存数据时需要知道数据的来源是可信的。如果我们不能信任数据的来源,我们就不能存储它——数据可能会因试图利用错误或安全缺陷而受到损害或损坏。
WordPress 为我们提供了随机数(“使用一次的数字”),可以与表单数据一起发送。当我们的保存例程运行时,可以检查这个随机数,以确保它与我们期望的值匹配。
这有助于防止跨站点请求伪造 (CSRF) 攻击,即有人试图从不同的网站向我们的保存例程提交表单数据。
我们需要在上面的代码的两个地方添加安全性:
output_meta_box()
:向表单添加随机数save_meta_boxes()
:验证提交的随机数值让我们编辑 output_meta_box()
函数,将其替换为以下代码:
/** * Output a Contact Details meta box * * @param WP_Post $post WordPress Post object */ function output_meta_box($post) { $email = get_post_meta( $post->ID, '_contact_email', true ); // Add a nonce field so we can check for it later. wp_nonce_field( 'save_contact', 'contacts_nonce' ); // Output label and field echo ( '<label for="contact_email">' . __( 'Email Address', 'tuts-crm' ) . '</label>' ); echo ( '<input type="text" name="contact_email" id="contact_email" value="' . esc_attr( $email ) . '" />' ); }
这使用 wp_nonce_field()
生成一个名为 contacts_nonce
的隐藏字段,并执行名为 save_contact
的操作。它的价值是由WordPress产生的。
接下来,让我们在 save_meta_boxes()
中编辑保存例程:
/** * Saves the meta box field data * * @param int $post_id Post ID */ function save_meta_boxes( $post_id ) { // Check if our nonce is set. if ( ! isset( $_POST['contacts_nonce'] ) ) { return $post_id; } // Verify that the nonce is valid. if ( ! wp_verify_nonce( $_POST['contacts_nonce'], 'save_contact' ) ) { return $post_id; } // Check this is the Contact Custom Post Type if ( 'contact' != $_POST['post_type'] ) { return $post_id; } // Check the logged in user has permission to edit this post if ( ! current_user_can( 'edit_post', $post_id ) ) { return $post_id; } // OK to save meta data $email = sanitize_text_field( $_POST['contact_email'] ); update_post_meta( $post_id, '_contact_email', $email ); }
这为我们的保存例程添加了两项检查:
创建或编辑您的联系人,并确保电子邮件地址现已保存。
在下一篇文章中,我们将使用高级自定义字段将自定义字段添加到我们的联系人自定义帖子类型中,从而使我们能够创建具有更广泛输入类型的丰富用户界面.
以上がWordPress でシンプルな CRM を作成する: カスタムフィールドを作成するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。