Tag: sklep

Wykluczenie strony z menu – WordPress

Chyba będę raz na jakiś czas wrzucał tutaj tip&tricks do zastosowania przy zabawach z api WordPressa. Blogów na ten temat jest wiele i nie mam zamiaru z nimi konkurować. Dlatego kryterium wrzucania będzie takie: jeśli długo szukałem jakiegoś rozwiązania i nie mogłem znaleźć, jeśli znalazłem, czuję, że mi się jeszcze przyda, a boję się, że szybko to zapomnę – wyląduje to tutaj. Taki publiczny notes ze snippetami, który być może pomoże i części z Was.

Pracuję obecnie nad pluginem do tworzenia sklepów internetowych. Wiem, że mam już WP Sprzedawcę. Ten plugin będzie sobie istniał, ale jako właśnie taki skromny, do szczególnych zastosowań. Równolegle mam zamiar wydać duży plugin, który pozwoli tworzyć sklepy internetowe na bazie WordPressa, dostosowany do polskich realiów. Ale do rzeczy.

Plugin instalując się tworzy specjalne strony: na koszyk, na wprowadzenie danych odnośnie wysyłki przez klienta… Tej ostatniej lepiej, żeby nie było w menu na stronie. Jak tego dokonać?

Domyślnie menu jest produkowane przez funkcje wp_list_pages() umieszczoną w skórce. Można do niej przekazać parametr exclude=3 co wykluczy z menu stronę o ID równym ‘3’. Czy jest jednak sposób by wp_list_pages() zawsze wykluczało jakąś stronę, tak byśmy w instrukcji instalacji naszego plugina nie musieli pisać “po zainstalowaniu otwórz wszystkie pliki skórki i zamień każde wystąpienie funkcji wp_list_pages() na …”? Takie podejście trzeba przyznać nie byłoby rzeczą wspaniałą, nie zmuszajmy użytkownika systemu CMS do grzebania w jego kodzie!

Długo szukałem i znalazłem. Niestety nie ma żadnego filter haka czy action haka na tę funkcję. wp_list_pages korzysta jednak do pobrania listy stron z funkcji get_pages(), którą już z kolei filtrować możemy.

Zatem wszystko co musimy zrobić to przefiltrować funkcję get_pages() i ze zwracanej przez nią tablicy wyciąć ten element, który zawiera obiekt o ID równym ‘3’ (brzmi złożonie, ale przeczytajcie opis funkcji, aby zrozumieć jaki rodzaj danych zwraca; jest to tablica obiektów, każdy obiekt ma pola odpowiadające nazwom kolumn z tabeli stron w bazie danych).

Na nasze nieszczęście (ale niewielkie) funkcja get_pages() używana jest nie tylko przy tworzeniu menu stron, ale na przykład także w panelu admina. Szkoda by było jakby także tam zniknęła nam nasza strona. Zatem musimy do naszej funkcji, zanim jeszcze tablica pozbawiana wykluczanej strony, dodać warunek aby pozbawianie to nie odbywało się, jeśli funkcja wywoływana jest w panelu administracyjnym WordPressa.

OK, wiemy już wszystko.

Najpierw dodajemy filtr.

add_filter('get_pages', 'usun_strone');

Następnie tworzymy naszą funkcję usun_strone(), która jako parametr otrzymuje tablice stron.

function usun_strone($pages) {

}

W bloku funkcji wstawiamy najpierw warunek sprawdzający czy to panel administracyjny i jeśli tak – przerywamy działanie funkcji zwracając tablicę stron z powrotem w niezmienionej postaci.

$to_wp_admin = ( ( defined( 'WP_ADMIN' ) && WP_ADMIN == true ) 
|| ( strpos( $_SERVER[ 'PHP_SELF' ], 'wp-admin' ) !== false ) );
if ( $to_wp_admin ) return $pages;

Jeśli jednak nie jest to Kokpit, zróbmy pętle na tablicy stron, sprawdźmy czy ID jest równe trzy i jeśli nie, dodajmy element tablicy do nowej tablicy, a potem ją zwróćmy.

$new_pages = array();
foreach ($pages as $page) {
 if ($page->ID == '3') {
  continue;
  }
 else {
  $new_pages[] = $page;
  }
 }

return $new_pages;

To wszystko.

Przy okazji mam pytanie do Was: czy jest jakiś sposób aby w bloku funkcji sprawdzić przez jaką funkcję jest dana funkcja wywołana? Ja niestety nie znam takiego, ale pomyślałem, że fajnie by było, gdyby taka możliwość była. W powyższym kodzie nie musielibyśmy sprawdzać czy get_pages() jest wywoływane w panelu admina, czy jeszcze jakoś inaczej, a zrobilibyśmy warunek “jeśli funkcja ta jest wywoływana przez wp_list_pages(), tylko wtedy usuń stronę o ID równym 3”.

Zna ktoś taki sposób? Czekam na Wasze komentarze.

0

WP Sprzedawca 0.3 – ostatnia wersja rozwojowa – wprowadza dostęp do wpisów za opłatą

Wersja 0.3 wydana i jest to zarazem ostatnia wersja przed wydaniem 1.0.

Od tej pory do wersji 1.0 będę tylko wprowadzał zmiany kosmetyczne (przeniesienie konfiguracji z edytowania pliku do menu admina, inne poprawki). Niemal na pewno nie będę wprowadzał nowych funkcjonalności; te pojawią się jako przygotowanie do wersji 2.0.

Plugin jest darmowy dla osób, które pobrały wersję 0.2. Te osoby proszę o kontakt na priv podając nr telefonu (jeśli pobierały smsem) lub adres email jaki wpisały (jeśli pobierały płacąc przelewem). Osoby, które pobrały smsem proszę o podanie też emaila na który wyślę paczkę z pluginem 🙂

Pozostałe osoby – te które mają jeszcze wersję 0.1 lub nie mają żadnej – muszą przygotować się na potężny wydatek kilku złotych! 😉

Uwaga: osoby, które kupią wersję 0.3 kolejne aktualizacje aż do 1.0 będą otrzymywać za darmo.

CO NOWEGO?

* Dodano możliwość ukrycia treści wpisów tak aby były dostępne za opłatą. Bez wprowadzenia opłaty wyświetla się tylko tytuł wpisu, elementy opisowe (tagi, nazwa kategorii, data publikacji itp), komentarze pod nim oraz zdefiniowana przez autora ilość akapitów (domyślnie = 0).
* Możliwość konfiguracji przez ile dni (liczone w sekundach) po wykupieniu płatnego dostępu wpisy będą widoczne czytelnikowi.
* Rozpoczęto przenoszenie konfiguracji z edytowania pliku .php do panelu administracyjnego. Obecnie w panelu w sekcji WP Sprzedawca > Ustawienia Dotpay należy podać swój nr ID w serwisie Dotpay

Plugin WP Sprzedawca 0.3 możesz pobrać stąd.

0