Tipo de postagem personalizada com campos de entrada para separar a tabela no banco de dados.

4

No momento em que estou usando um tipo de postagem personalizado chamado 'locais', gostaria de poder inserir campos de entrada no tipo de postagem personalizado que armazenaria as informações, como endereço, tipo, número de telefone etc. .) em uma tabela separada chamada "marcadores" Então quando uma nova postagem é feita, ela criará uma nova entrada nos marcadores de tabela dos seguintes campos de entrada / fará com que seja atualizável ou removível quando a postagem for alterada ou excluída.

Não sei ao certo por onde começar a vincular esses links para trabalhar dessa maneira, sei como criar um arquivo insert.php para adicionar novos locais e criar um banco de dados, mas não com o wordpress. . Minhas desculpas, mas eu sou muito novo para SQL e PHP.

    
por espnicholas 14.08.2012 / 00:00

3 respostas

5

Você deve evitar criar mais tabelas. Apenas faça se você realmente tiver um bom motivo para isso. Note que wp_postmeta pode armazenar praticamente qualquer tipo de dados, e simplesmente usar a função get_post_meta pode fazer todo o trabalho na maioria dos casos.

Mas se você precisar usar outra tabela e levá-la em geral, você está procurando pelo save_post e delete_post ganchos.

Replicação de campos personalizados

Como você mencionou os campos personalizados, se quiser replicar as informações de wp_postmeta para outra tabela, faria algo como:

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 ...");
}

O acima também se aplica ao delete_post hook.

Metaboxos

Mas, se você quiser armazenar as informações diretamente na outra tabela, talvez os metaboxes sejam melhores para você.

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
}

E depois, para salvá-lo:

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 ...");

}

E, claro, você pode fazer mais verificações com o código acima.

    
por vmassuchetto 14.08.2012 / 00:34
0

Você tem 3 opções.

  1. Use apenas os campos personalizados nativos no WordPress, a menos que tenha um boa razão para não, eles combinam perfeitamente com você tipos de postagem personalizados.

    enlace

  2. Crie seus próprios campos personalizados e ligue-os ao seu CPT usando o wpdb. Você precisa de um bom motivo para fazer isso em vez de usar a opção 1.

    enlace

  3. Confira o framework de pods , é basicamente CPT com mais controle sobre o DB.

por Wyck 14.08.2012 / 00:24
-1
INSERT INTO 'wp_postmeta' (post_id, meta_key, meta_value) VALUES (*ID*, 'translation', *VALUE*;

Onde ID é o ID da postagem à qual você está anexando o valor e VALUE é o valor meta do campo "tradução".

Como eu disse, factível ... mas você precisará de uma consulta INSERT separada para cada postagem. Você pode despejar todos eles em um único arquivo de texto e executar o conjunto inteiro em uma única passagem, se não quiser, caso contrário, pode levar apenas o tempo necessário para adicionar a chave pela interface do usuário do WordPress.

    
por user111990 28.01.2017 / 12:19