web-dev-qa-db-ja.com

データベース上のテーブルを区切るための入力フィールドを持つカスタム投稿タイプ。

現時点では、 'locations'というカスタム投稿タイプを使用しています。入力フィールドをカスタム投稿タイプに配置して、住所、タイプ、電話番号などの情報を保存することができます。それで、新しい投稿が作られるとき、それは次の入力フィールドからテーブルマーカーに新しいエントリーを作成するでしょう/投稿が変更されるか削除されるとき、それは更新可能か削除可能にします。

このような方法で作業するためにこれらのリンクをどこから開始するのかわからない場合、私はinsert.phpファイルを作成して新しい場所を追加しデータベースを作成する方法を知っています。謝罪しますが、私はSQLとPHPについてはかなり新しいです。

4
espnicholas

これ以上テーブルを作成しないでください。あなたが本当に良い理由があるならば、それをしてください。 wp_postmetaは実質的にあらゆる種類のデータを格納でき、ほとんどの場合、 get_post_meta 関数を使用するだけですべての作業を実行できます。

しかし、で別のテーブルを使用し、それを一般的に取っているのであれば、 save_postdelete_post フックを探していることになります。

カスタムフィールドの複製

カスタムフィールドについて言及しているので、replicatewp_postmetaから別のテーブルへの情報を使いたい場合は、次のようにします。

add_action('save_post', 'save_markers');
function save_markers($post_id) {
    global $wpdb;
    $marker = get_post_meta($post_id, 'marker_custom_field', true);
    // go and put $marker on the markers table
    $wpdb->query("INSERT INTO markers ...");
}

上記はdelete_postフックにも当てはまります。

メタボックス

しかし、もし他のテーブルに直接情報を保存したいのなら、 metaboxes があなたにぴったりです。

add_action( 'add_meta_boxes', 'marker_add_meta_box');
function marker_add_meta_box() {
    add_meta_box( 
        'marker_metabox',
        __('Marker Title', 'your-plugin-textdomain'),
        'marker_metabox',
        'post' 
    );
}

function marker_metabox ($post) {
    wp_nonce_field(plugin_basename( __FILE__ ), 'your-plugin-texdomain');
    $marker = get_marker_from_another_table();
    ?>
    <label for="marker_field">
        <?php _e('Marker field description', 'your-plugin-texdomain'); ?>
    </label>
    <input type="text" id="marker_field" name="marker_field" value="<?php echo $marker; ?>" size="25" />
    <?php
}

そしてそれを保存するために:

add_action('save_post', 'save_markers');
function save_markers ($post_id) {
    if (defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE) 
        return;
    if ('locations' != $_POST['post_type'])
        return;
    if (!current_user_can( 'edit_post', $post_id ))
        return;

    /* Here you have $marker and $post_id, then you can just
       do the reference in your markers table. */

    global $wpdb;

    $marker = $_POST['marker_field'];
    $wpdb->query("INSERT INTO markers VALUES ...");

}

そしてもちろん、あなたは上記のコードでより多くの検証をすることができます。

5
vmassuchetto

あなたは3つの選択肢があります。

  1. WordPressのネイティブカスタムフィールドを使用してください。そうしない正当な理由がない限り、それらは問題なく適しており、カスタム投稿タイプで完璧に機能します。

    http://codex.wordpress.org/Custom_Fields

  2. 独自のカスタムフィールドを作成し、wpdbを使用してそれらをCPTに結び付けます。 option1を使用する代わりにこれを行うには正当な理由が必要です。

    http://codex.wordpress.org/Class_Reference/wpdb

  3. pods framework をチェックしてください - /、それは基本的にDBをもっと制御するCPTです。

0
Wyck