Heim  >  Fragen und Antworten  >  Hauptteil

Cookies gehen nach der WordPress-Umleitung verloren

Wie auch immer, ich habe ein Formular erstellt und eine Funktion im Plugin aufgerufen, um das Cookie zu setzen, wenn das Formular gesendet und auf die Seite weitergeleitet wird. Durch Tests kann ich feststellen, dass das Cookie tatsächlich gesetzt ist, wenn das Formular gesendet wird, aber wenn die Weiterleitung erfolgt, verliere ich das Cookie und den damit verbundenen Wert. Ich habe lange Zeit Foren durchforstet und versucht, dies zu debuggen, und ich glaube, ich übersehe etwas ganz Einfaches. Ich habe es versucht wp_redirectwp_safe_redirectheader Location:window.open() usw. p>

Wenn ich wp_die($_COOKIE) verwende, bevor die Weiterleitung erfolgt, kann ich mein Cookie sehen, sodass ich sicher bin, dass es passiert, nachdem die Seite auf eine andere Seite umgeleitet wird.

Wie kann ich ein Formular absenden, ein Cookie setzen und weiterleiten (zu einer anderen Seite auf derselben Website), ohne das Cookie zu löschen, damit ich die Daten auf der umgeleiteten Seite verwenden kann? < /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');

Wenn es hilft, hier ist die Formularaktion:

<form action="' . esc_url(admin_url('admin-post.php')) . '" method="post" id="configurator">

P粉198814372P粉198814372429 Tage vor660

Antworte allen(1)Ich werde antworten

  • P粉464088437

    P粉4640884372023-09-10 17:03:22

    试试这个:

    setcookie( 'antennasNow', json_encode($cookieValue), time()+3600, '/' );
    

    Antwort
    0
  • StornierenAntwort