Пользовательский тип записи с полями ввода для разделения таблицы в базе данных.


На данный момент я использую пользовательский тип записи под названием "местоположения", я хотел бы иметь возможность добавлять поля ввода в пользовательский тип записи, в котором будет храниться такая информация, как (адрес, тип, номер телефона и т. Д.) В отдельной таблице, называемой "маркеры", Поэтому при создании новой записи она создаст новую запись в маркерах таблицы из следующих полей ввода / будет обновляться или удаляться при изменении или удалении записи.

Я не уверен, с чего начать чтобы связать их вместе для работы таким образом, я знаю, как сделать insert.php файл для добавления новых местоположений и создания базы данных, но не с wordpress таким образом. Приношу свои извинения, но я довольно новичок в SQL и PHP.

Author: espnicholas, 2012-08-13

3 answers

Вам следует избегать создания большего количества таблиц. Просто сделай это, если у тебя действительно есть на то веская причина. Обратите внимание, что wp_postmeta может хранить практически любые данные, и просто используя get_post_meta функция может выполнять всю работу в большинстве случаев.

Но если вы должны использовать другую таблицу и принимать ее в целом, то вы ищете save_post и delete_post крючки.

Репликация пользовательских полей

Потому что вы упомянули пользовательские поля, если хотите чтобы скопировать информацию из wp_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.

Метабоксы

Но, если вы хотите хранить информацию непосредственно в другой таблице, возможно, метабоксы подходят вам лучше.

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
Author: vmassuchetto, 2012-08-14 01:26:51

У вас есть 3 варианта.

  1. Просто используйте собственные пользовательские поля в WordPress, если у вас нет веских причин этого не делать, они вам подойдут и отлично будут работать с пользовательскими типами записей.

    Http://codex.wordpress.org/Custom_Fields

  2. Создайте свои собственные пользовательские поля и привяжите их к своему CPT с помощью wpdb. Вам нужна веская причина, чтобы сделать это вместо использования вариант 1.

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

  3. Ознакомьтесь с фреймворком pods, это в основном CPT с большим контролем над БД.

 0
Author: Wyck, 2012-08-13 22:24:59
INSERT INTO `wp_postmeta` (post_id, meta_key, meta_value) VALUES (*ID*, 'translation', *VALUE*;

Где ИДЕНТИФИКАТОР - идентификатор записи, для которой вы прикрепляете значение, а ЗНАЧЕНИЕ - это мета-значение поля "перевод".

Как я уже сказал, выполнимо... но вам понадобится отдельный запрос на вставку для каждого сообщения. Вы можете сбросить все это в один текстовый файл и запустить весь набор за один проход, если хотите, в противном случае может потребоваться столько же времени, сколько и для простого добавления ключа через пользовательский интерфейс WordPress.

 -1
Author: user111990, 2017-01-28 17:36:36