Como armazenar e receber variáveis ​​em sessões WP?

28

Eu tenho um formulário com algumas caixas de seleção e caixas de entrada e mostra o que o usuário deseja por meio de uma chamada ajax. O problema é que, quando o usuário clica no item e a página de detalhes é mostrada e decide voltar à página anterior, ele precisa clicar e selecionar sua opção anterior novamente.

Gostaria de fazer com que o WP armazene todas as opções da sessão quando o botão da página de detalhes for clicado e salve as informações reais da sessão e, quando ele visitar a página novamente, os valores serão verificados nas sessões e definidos, se houver. encontrado.

Isso poderia ser feito no WP?

Se sim, como?

Vamos simplificar demais e dizer que temos algo assim em nossa forma:

<input class="car_color" type="checkbox" name="car_color" value="1" />
<input class="car_color" type="checkbox" name="car_color" value="2" />
<input class="car_color" type="checkbox" name="car_color" value="8" />
<input class="car_color" type="checkbox" name="car_color" value="4" />
<input class="car_color" type="checkbox" name="car_color" value="6" />

Eu não uso o botão enviar no meu formulário, ele é tratado via AJAX na alteração de entrada.

E nos meus resultados, via ajax, tenho um link para a página de detalhes:

<a class="detail-info-link" href="<?php echo $url ?>">

Alguma idéia de como posso armazenar meus valores na Sessão e chamá-los ao revisitar / recarregar / voltar no navegador?

Eu preciso ser capaz de ler o material armazenado da sessão e usá-lo via? Javascript? e acionar minha função de pesquisa via ajax, que já está funcionando bem.

Eu só preciso armazenar (provavelmente antes de ir para o link $ no href do botão de detalhes e ler e enviar variáveis ​​de sessão (se elas existirem).

Derfder
fonte
Se a resposta foi útil para você, considere aceitá-la. Consulte » O que devo fazer quando alguém responder à minha pergunta? «E / ou» Por que a votação é importante? «, Mais informações sobre o modelo de desenvolvimento do WordPress estão disponíveis na Central de Ajuda .
Nicolai
Eu acho que o link abaixo irá ajudá-lo. wordpress.stackexchange.com/questions/105453/…
Vivekanand Saraswati

Respostas:

32

As sessões não estão ativadas no wordpress por padrão, se você deseja ativar as sessões php, adicione isso no início do seu functions.php:

if (!session_id()) {
    session_start();
}

Agora você pode usar $_SESSION['your-var'] = 'your-value';para definir uma variável de sessão. Dê uma olhada na documentação do PHP sobre sessões .



Atualizar:

Havia uma segunda resposta que, em minha opinião, também tinha um valor - infelizmente ela foi excluída, estou adicionando novamente as informações aqui. A resposta estava se referindo ao WP Session Manager, um plug-in escrito por @eamann como uma solução alternativa.
Eu li algumas coisas sobre o plug-in, mas nunca o usei porque - até agora - estou usando sessões PHP - nunca tive o problema de não poder usá-las. Esta é uma declaração / comentário do próprio autor do plug-in, que descobri algumas vantagens possíveis.

Nicolai
fonte
posso pedir para você dar uma olhada em uma pergunta relacionada ao campo personalizado aqui: wordpress.stackexchange.com/questions/265852/… ?
Istiaque Ahmed
1

adicione isso em suas funções.php

<?php

function tatwerat_startSession() {
    if(!session_id()) {
        session_start();
    }
}

add_action('init', 'tatwerat_startSession', 1);
Abdo-Host
fonte
1

Vou explicar como definir uma sessão de nome de usuário com o plugin Native PHP Sessions for WordPress . Você pode aplicar essa lógica ao seu problema.

Adicione isso ao seu arquivo functions.php

if (!session_id()) {
    session_start();
}

  if ( isset( $_POST['wp-submit'] ) ){

    $_SESSION['username']=$_POST['log'];

  }

$ _POST ['log'] está referenciando a caixa de entrada de nome de usuário no formulário de login do wordpress. Quando um usuário faz login, o nome de usuário é armazenado em $ _SESSION ['nome de usuário']. No seu caso, você alteraria 'log' para os nomes de variáveis ​​de formulário que possui 'car_color'.

Referencie o nome de usuário posteriormente em outro arquivo php

$username=$_SESSION['username'];
embulldogs99
fonte
0

Talvez não haja sessões usuais no Wordpress ... de qualquer maneira, o Wordpress conhece o conceito de usuário. Você pode gerenciar informações relacionadas a usuários específicos com as funções add_user_meta, update_user_meta, get_user_meta, e delete_user_meta.

Se você precisar das informações salvas dessa maneira em JavaScript, poderá escrever um pequeno script PHP que vomite o que você precisa e chamá-lo com Ajax.

Philipp Zedler
fonte
2
Isso só é bom se o usuário está logado.
Tim Hallman
0

Na página PHP que recebe a solicitação AJAX, defina $ _SESSION dessa maneira.

$car_color = <user selected form input data>;
$_SESSION['car_color'] = $car_color;

Acesse a variável $ _SESSION

if(isset($_SESSION['car_color'])) {
    $value = $_SESSION['car_color'];
} else {
    $value = 'Please select a car color.';
}

Este tutorial entra em mais detalhes sobre configuração e descarte adequados de sessões.

nu everest
fonte