woocommerce și is_user_logged_in() - redirecționare la pagina principală pentru utilizatorii nelogati
Folosesc WooCommerce și doresc să redirecționez utilizatorii nelogați către pagina principală, dar am probleme în a determina unde ar trebui să implementez acest lucru.
Am cercetat și am aflat că pot folosi funcția is_user_logged_in() pentru a verifica dacă un utilizator este logat.
Am încercat să implementez în fișierul woocommerce/woocommerce-functions.php:
// Când permalink-urile implicite sunt activate, redirecționează pagina magazin către URL-ul arhivei tipului de post
if (is_user_logged_in() && isset($_GET['page_id']) && $_GET['page_id'] > 0 && get_option( 'permalink_structure' )=="" && $_GET['page_id'] == woocommerce_get_page_id('shop') ) :
wp_safe_redirect( get_post_type_archive_link('product') );
exit;
endif;
dar pagina rămâne vizibilă

În primul rând, niciodată nu modifica plugin-uri ale altor persoane sau fișierele de bază ale WordPress.
De asemenea, folosește acolade în loc de formatare frumoasă, deoarece formatarea frumoasă strică evidențierea codului în IDE, potrivirea acoladelor, verificatoarele de sintaxă și alte instrumente utile.
Așadar, pune acest cod:
// Când permalink-urile implicite sunt activate, redirecționează pagina magazinului către URL-ul arhivei tipului de postare
if (is_user_logged_in() && isset($_GET['page_id']) && $_GET['page_id'] > 0 && get_option( 'permalink_structure' )=="" && $_GET['page_id'] == woocommerce_get_page_id('shop') ) {
wp_redirect( get_post_type_archive_link('product') );
die();
}
Fie în:
- partea de sus a fișierului functions.php
- un plugin dedicat
- apelul hook-ului Init

Vei dori să inserezi codul tău în partea de sus a șabloanelor de pagină pentru paginile Woo pe care dorești să le afecteze redirecționarea, în loc să-l pui în fișierul de funcții. De exemplu, dacă dorești să redirecționezi utilizatorii când încearcă să acceseze o pagină individuală de produs, ai putea să-l pui în partea de sus a fișierului plugins->woocommerce->templates->single-product.php.
Totuși, atunci când editezi șabloane, recomand să faci o copie și să o plasezi în directorul temei tale, astfel încât atunci când Woo se actualizează, să nu suprascrie modificările pe care le-ai făcut. Deci, pentru exemplul dat mai sus (aplicat pe tema mea), aș copia single-product.php și l-aș plasa în themes->agency, apoi aș face modificările în acel fișier. Tema ta va folosi întotdeauna acel fișier înaintea celui din directorul de șabloane Woo.

mulțumesc, știi care pagină ar trebui modificată pentru a redirecționa utilizatorii care vizualizează pagina inițială a magazinului?

Deoarece pagina magazinului este de fapt un loop, ai putea adăuga un hook în fișierul functions.php. Copiază asta și spune-mi dacă funcționează. http://pastie.org/4830106. Am niște elemente ciudate pe pagina mea de magazin (pe scurt am șters-o), așa că nu pot să o testez eu. Dacă nu funcționează, o voi repara.

hmm după ce am adăugat asta în fișierul functions.php al temei mele, întregul site a încetat să funcționeze. trebuia să o adaug în fișierul de funcții al woocommerce?

Scuze pentru eroarea de sintaxă neglijentă, șterge asta și încearcă versiunea corectată http://pastie.org/4830960

OK, am testat codul și cu siguranță funcționează: http://pastie.org/4831059. Copiază-l în fișierul functions.php

Nu sunt de acord cu inserarea acelui cod în partea de sus a șabloanelor de pagină pentru paginile Woo. Ar trebui folosit template_redirect
action hook.
