Como obter o ID de entrada do Gravityform do envio do formulário do usuário atual? [fechadas]

4

Caso: Quando um usuário envia um formulário (Gravidade), o plug-in gera automaticamente um ID de entrada exclusivo para esse formulário específico. No meu caso, as configurações do formulário só permitem que o usuário envie o formulário uma vez, e somente se o usuário estiver registrado. Quando o usuário envia o formulário, uma página é criada com o conteúdo do formulário. O URL dessa página é gerado dinamicamente e baseado no ID de entrada (www.example.com/entry-ID).

Pergunta: Depois que o usuário enviou um formulário e o usuário está logado, desejo mostrar um link para a página criada pelo usuário. Não apenas após o envio, mas sempre que o usuário estiver logado novamente. Mas como obter e exibir o ID de entrada desse usuário em uma página se esse usuário estiver logado?

Eu tenho este código no page.php para identificar o usuário e determinar o que exibir:

<?php if ( is_user_logged_in() ) { ?>

<?php global $wpdb;
$user = wp_get_current_user();
$where = get_posts_by_author_sql( 'page', true, $user->ID );
$count = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->posts $where" );

if ( $count >= 1 ) { ?>
// This is what user see if form is submitted, where '{entry-ID}' should be replaced by the user's entry iD 
<h2>Hey <?php echo $current_user->display_name ?>, thank you for submitting the form. Visit your page here: www.example.com/{entry-ID}</h2>

<?php } else { ?>
// If user have not submitted a form, user is shown the info below with the form to submit
<h2>Hey <?php echo $current_user->display_name ?>, Thank you for joining. To create a page please submit the form below:</h2><?php echo do_shortcode('[gravityform id="2" name="just a form" title="false" description="false"]'); ?>

<?php } } else { ?>
// if user is not logged in, user is urged to log in to submit form
<h2><Please log in to create a page <?php do_action( 'wordpress_social_login' ); ?></h2>

<?php } ?>

Esta é a função que eu uso para criar o formulário (ID = 2) para criar uma 'página':

add_filter("gform_post_data", "change_post_type", 10, 2);
function change_post_type($post_data, $form){
    //only change post type on form id 1
    if($form["id"] != 2)
       return $post_data;

    $post_data["post_type"] = "page";
    return $post_data;
}
    
por tobe 19.04.2013 / 16:57

1 resposta

5

Você pode usar o gform_after_submission hook [1] para adicionar a ID de entrada (e provavelmente o formulário ID para minimizar a confusão se você tiver vários formulários) para as metainformações do usuário usando add_user_meta() .

<?php
add_action( 'gform_after_submission', 'wpse96468_map_user_to_entry', 10, 2 );
// to tie it to a specific form, use the format below,
// replacing '{$form_id}' with the actual form ID
// add_action( 'gform_after_submission_{$form_id}', 'wpse96468_map_user_to_entry', 10, 2 );

function wpse96468_map_user_to_entry( $entry, $form ) {
    // get your user's ID here
    // EDITED -- this should work, 
    // if only logged-in users can submit the form
    $user_id = $entry['created_by'];
    // set the arguments for the add_user_meta() function
    $meta_key = 'gform_entry_id';
    $meta_value = $entry['id'];
    // if you want to pass both the Entry and Form IDs, you can use an array:
    // $meta_value = array( 'entry_id' => $entry['id'], 'form_id' => $form['id'] );
    $unique = true;
        // optional, but the default is false,
        // and if I understand your question, you want this to be unique
    add_user_meta( $user_id, $meta_key, $meta_value, $unique );
}
?>

Uma maneira melhor (talvez)

Se você estiver usando GForms para criar uma postagem (ou página, presumivelmente), parece ser uma maneira mais fácil:

<?php
add_action( 'gform_after_submission', 'wpse96480_map_user_to_page', 10, 2);

function wpse96480_map_user_page( $entry, $form ) {
    $user_id = $entry['created_by'];
    $meta_key = 'generated_page_id';
    $meta_value = $entry['post_id']; // see note [2] for a link
    $unique = true;
    add_user_meta( $user_id, $meta_key, $meta_value, $unique );
}
?>

Para mostrar um link para a página gerada para o usuário que a gerou, você pode adicionar o seguinte a functions.php :

<?php
add_filter( 'the_content', 'wpse96480_get_generated_page_for_user' );
function wpse96480_get_generated_page_for_user( $content ) {
    if ( is_user_logged_in() ) {
        global $current_user;
        $current_user = get_currentuserinfo();
        $user_id = $current_user->ID;
        $meta_key = 'generated_page_id';
        $single = true;
        $page_id = get_user_meta( $user_id, $meta_key, $single );
        if( strlen( $page_id ) > 0 && is_numeric( $page_id ) ) {
            $page_link = '<a href="' . get_permalink( $page_id ) . '">' . get_the_title( $page_id ) . '</a>';
            $content .= "Hey {$current_user->display_name}, thank you for submitting the form. View your page here: $page_link";
        } else {
            $content .= "Hey {$current_user->display_name}, please fill in the form below<br />\n";
            $content .= do_shortcode('[gravityform id="2" name="Join the movement of Gooders" title="false" description="false"]');
        }
    }
    return $content;
}
?>

Em resposta aos seus comentários

Assumindo que sua geração de página é feita conforme solicitado na pergunta original (por exemplo, example.com/{entry-ID} e você só quer codificar você pode inserir em um arquivo de modelo de página ( page.php ou similar), aqui está minha sugestão:

Adicione o ID da entrada às informações meta do usuário, conforme detalhado no primeiro trecho de código - aquele que começa com add_action( 'gform_after_submission', 'wpse96468_map_user_to_entry', 10, 2 ); . Todo o código que pode entrar no seu arquivo functions.php , para que ele esteja sempre disponível para o formulário Formulários de Gravidade.

Em seguida, adicione o exemplo de código a seguir ao seu arquivo de modelo de página ( page.php por padrão):

<?php
    if ( is_user_logged_in() ) {
        global $current_user;
        // $current_user = get_currentuserinfo();
        // seems I was clobbering the existing $current_user variable
        $user_id = $current_user->ID;
        $meta_key = 'gform_entry_id';
        $single = true;
        $entry_id = get_user_meta( $user_id, $meta_key, $single );
        if( strlen( $entry_id ) > 0 && is_numeric( $entry_id ) ) {
            // we have an entry ID now
            ?>
            <h2>Hey <?php echo $current_user->display_name ?>, thank you for submitting the form. Visit your page here: www.example.com/<?php echo( $entry_id ); ?></h2>
            <?php
        } else {
            // we don't have an entry ID for this user
            ?>
            <h2>Hey <?php echo $current_user->display_name ?>, Thank you for joining. To create a page please submit the form below:</h2><?php echo do_shortcode('[gravityform id="2" name="Join the movement of Gooders" title="false" description="false"]'); ?>
            <?php
        }
    } else {
        // user is not logged in
        ?>
        <h2><Please log in to create a page <?php do_action( 'wordpress_social_login' ); ?></h2>
        <?php
    }
?>

Acho que isso deve fazer o que você está procurando.

[1] A documentação do usuário do Gravity Forms requer que você faça o login no site.

[2] enlace - você está procurando post_id na página.

    
por Pat J 19.04.2013 / 18:17