Quoi qu'il en soit, j'ai construit un formulaire et appelé une fonction dans le plugin pour définir le cookie lorsque le formulaire est soumis et redirigé vers la page. Grâce aux tests, je peux voir que le cookie est effectivement défini lorsque le formulaire est soumis, mais lorsque la redirection se produit, je perds le cookie et la valeur qui lui est associée. J'ai parcouru les forums et essayé de déboguer cela depuis longtemps et je pense qu'il me manque quelque chose de super simple. J'ai essayé wp_redirect
、wp_safe_redirect
、header Location:
、window.open()
etc. p>
Si j'utilise wp_die($_COOKIE)
avant la redirection, je peux voir mon cookie, donc je suis sûr que cela se produit après la redirection de la page vers une autre page.
Comment puis-je soumettre un formulaire, définir un cookie et rediriger (vers une autre page du même site) sans supprimer le cookie afin de pouvoir utiliser les données de la page redirigée ? < /p>
add_action('admin_post_action_configurator_form_submit', 'action_configurator_form_submit'); // logged in users add_action('admin_post_nopriv_action_configurator_form_submit', 'action_configurator_form_submit'); // not logged in users function action_configurator_form_submit () { // checking if nonce was submited and is valid, if not valid will exit check_ajax_referer('configurator_form_nonce', 'security'); if(isset($_POST['base_sku'])){ //store form entries as variables $base_Sku = $_POST['base_sku']; $type = $_POST['type']; $band = $_POST['band']; $polarization = $_POST['polarization']; $gain_Sku = $_POST['gain_sku']; $Az_Pattern = $_POST['azpattern']; $dual_Input = $_POST['dualinput']; $narrowband_Connector = $_POST['connector']; $beamtilt = $_POST['beamtilt']; $null_Fill = $_POST['nullfill']; $heavy_Duty = $_POST['heavyduty']; $invert_Mount = $_POST['invertmount']; $narrowband = $_POST['narrowband']; //Build sku group $antennaSku = $base_Sku . $type . $band . $polarization . $gain_Sku . $Az_Pattern; $fullSku = $antennaSku . '-' . $dual_Input . '-' . $narrowband . '-' . $narrowband_Connector . '-' . $beamtilt . '-' . $null_Fill . '-' . $heavy_Duty . '-' . $invert_Mount; $cookieValue = array( 'base_Sku' => $base_Sku, 'type' => $type, 'band' => $band, 'polarization' => $polarization, 'gain_Sku' => $gain_Sku, 'Az_Pattern' => $Az_Pattern, 'dual_Input' => $dual_Input, 'narrowband_Connector' => $narrowband_Connector, 'beamtilt' => $beamtilt, 'null_Fill' => $null_Fill, 'heavy_Duty' => $heavy_Duty, 'invert_Mount' => $invert_Mount, 'narrowband' => $narrowband, 'generatedSku' => $fullSku, ); //Find product by matching title based on Sku generated from form $page = get_page_by_post_name($antennaSku, OBJECT, 'product'); //Build cookie Usage: $data = json_decode($_COOKIE['antennasNow'], true); unset($_COOKIE['antennasNow']); setcookie('antennasNow', json_encode($cookieValue), time()+3600); if(!empty($page)){ //If matching product is found, redirect to it $url = get_permalink($page); redirect_to_antenna_product($url); } else { //Otherwise, redirect to a fallback page $url = '/selector-support'; redirect_to_antenna_product($url); } } } function redirect_to_antenna_product($url){ wp_safe_redirect($url); exit(); } function get_page_by_post_name($post_name, $output = OBJECT, $post_type = 'post' ){ global $wpdb; $page = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_title = %s AND post_type= %s", $post_name, $post_type ) ); if ( $page ) return get_post( $page, $output ); return null; } add_action('init','get_page_by_post_name');
Si cela peut vous aider, voici le formulaire d'action :
<form action="' . esc_url(admin_url('admin-post.php')) . '" method="post" id="configurator">
Essayez ceci :