Damian Gora
Odpowiedź forum utworzona
-
Forum: Zaawansowane
W odpowiedzi na: Więcej w tej kategoriSpokojnie. Rozwiązanie jest już bardzo blisko 🙂
Dodaj do tablicy $args jeszcze to:
'post_type' => 'produkty'
Forum: Zaawansowane
W odpowiedzi na: Więcej w tej kategoriBłędnie założyłem, że funkcja
wp_get_post_categories()
pobiera ID posta ze zmiennej globalnej $post.Poniżej gotowy kod:
<?php if (get_post_type() === 'produkty') { $post_id = get_the_ID(); //Pobierz kategorię ( term ) $cat = wp_get_post_categories($post_id); $term = ''; if (isset($cat[0])) // Pobiera pierwszą kategorię, jeżeli jest ich więcej $term = get_term_by('id', $cat[0], 'category'); // Gdy udało się pobrać kategorię if (!empty($term)) { // Pobierz produkty $args = array( 'posts_per_page' => 5, 'exclude' => array($post_id), // Nie pobieraj produktu, który jest teraz wyświetlany 'category' => $term->term_id ); $products = get_posts($args); // Gdy udało się pobrać jakieś produkty if (!empty($products)) { foreach ($products as $product) { echo $product->post_title . '<br />'; // ... Tutaj pisz HTML } } } } ?>
Forum: Zaawansowane
W odpowiedzi na: Więcej w tej kategoriWybacz. Wyjątkowo pisałem kod od razu w komentarzu i nie sprawdzałem go. Widzę, że umknął mi nawias zamykający ifa w
if(isset($cat[0])
. Powinno być tak:if(isset($cat[0]))
Gdyby dalej coś było nie tak, to wieczorem przetestuje kod i wkleję w pełni działający. Niemniej jednak myślę, że sobie już poradzisz z tego miejsca.
Forum: Zaawansowane
W odpowiedzi na: Więcej w tej kategoriWidzę mały błąd. W tablicy $args ma być $term->term_id, a nie $term.
Forum: Zaawansowane
W odpowiedzi na: Więcej w tej kategoriCześć,
Dość szybko można taki moduł napisać. Kod będzie się znajdował w pliku single.php
Na początek trzeba sprawdzić post type i pobrać kategorię:<?php if(get_post_type() === 'produkty'){ //Pobierz kategorię ( term ) $cat = wp_get_post_categories(); $term = ''; if(isset($cat[0]) // Pobiera pierwszą kategorię, jeżeli jest ich więcej $term = get_term_by('id', $cat[0], 'category'); // Pobierz posty $args = array( 'posts_per_page' => 5, 'exclude' => array(get_the_id()), // Nie pobieraj produktu, który jest teraz wyświetlany 'category' => $term ); $products = get_posts( $args ); // Tutaj pęta foreach i HTML... ... } ?>
Forum: Wtyczki
W odpowiedzi na: usuwanie zbędnych rzeczy z nagłówka stronyCześć
Aktualnie Twoja strona nie działa ( white screen ), wiec ciężko coś sprawdzić. Niemniej jednak takie słowa w tytule może generować wtyczka Yoast WordPress SEO.W kokpicie kliknij na menu SEO -> Tytuły i Meta Tagi -> Taksonomie (tab) i usuń słowo „Archiwa:”
Forum: Wtyczki
W odpowiedzi na: Dodanie widoku ilości komentarzy na stronie głównejCześć.
Jeżeli chcesz wyświetlić liczbę komentarzy w formie Komentarzy(x), to łatwiej będzie użyć funkcji:get_comments_number()
np. w postaci:<?php $num_comments = get_comments_number(); printf('Komentarzy(%d)', $num_comments); ?>
Lub z uwzględnieniem języków i dobrych praktyk:
<?php $num_comments = get_comments_number(); printf(__("Comments(%d)", 'textdomain'), $num_comments); ?>
W rozwiązaniu MrShemek jest mały chochlik związany z odmianą liczebników w języku polskim. WordPress z tego co mi wiadomo nie umożliwia prawidłowej odmiany liczebników w języku polskim. Trzeba się posiłkować dodatkowym kodem. W pliku functions.php można dodać funckję:
<?php function numerals_in_polish($num_comments){ $text = '% komentarze'; // Domyślny wariant // Reguły dla pierwszych 19 liczb if ($num_comments <= 19) { if ($num_comments > 4 || $num_comments === 0) { // Zbiór od 5 do 19 $text = '% komentarzy'; } elseif (in_array($num_comments, array(2, 3, 4))) { // Zbiór dla 2,3,4 $text = '% komentarze'; } else { // Reszta czyli 1 $text = '% komentarz'; } } else { // Reguły dla liczb od 20 w górę $last_char = substr((string) $num_comments, -1, 1); // Zwraca ostatnią cyfrę if (in_array( $last_char, array(0, 1, 5, 6, 7, 8, 9))) { // Końcówki z 0, 1, 5, 6, 7, 8, 9 $text = '% komentarzy'; } elseif (in_array($last_char, array(2, 3, 4))) { // Końcówki 2, 3, 4 $text = '% komentarze'; } } return $text; } ?>
Wtedy można przed wywołaniem funkcji
comments_number
sprawdzić formę gramatyczną i dodać ją jako trzeci parametr. Wyglądałoby to tak:<?php $num_comments = get_comments_number(); // Pobranie liczby komentarzy $text = numerals_in_polish($num_comments); // Ustawienie formy gramatycznej // Wyświetlenie comments_number( 'Brak komentarzy', '1 komentarz', $text ); ?>
Forum: Wtyczki
W odpowiedzi na: Automatic NBSP – prośba o test wtyczkiDzięki za odpowiedź.
Dokładnie tak jak piszesz. Ten temat jest specyficzny tylko dla polskiego i czeskiego języka.
Twoja wtyczka Sierotki https://wordpress.org/plugins/sierotki/ świetnie załatwia sprawę w polskim języku. W większości przypadków wystarczy.
Wtyczka, którą napisałem umożliwia definiowanie własnych słów lub fraz, które mają być objęte twarda spacją. Nie tylko walczy więc z sierotkami, ale umożliwia dodawanie encji
 
do fraz, które z założenia autora tekstu nie powinny być rozdzielane. Dzięki temu staje się uniwersalnym narzędziem kontrolującym łamanie linii.–
Pozdrawiam
DamianForum: Wtyczki
W odpowiedzi na: Wysuwane okienko z tekstemZnalazłem coś takiego:
Forum: Wtyczki
W odpowiedzi na: Wiele stron na stronie głównej.Najprościej będzie pobrać zawartość podstrony do tablicy lub obiektu funkcją get_post(), a następnie wyświetlić w dowolnej formie.
Widzę, że już sobie poradziłeś. Pomogło dodanie atrybutu „rel”?
Wtyczka https://wordpress.org/plugins/wp-lightbox-2/ powinna załadować pliki „wp-lightbox-2.js” oraz „lightbox.min.css”. Owszem, masz je załadowane, ale tylko na stronie głównej. Na podstronie http://www.swiatwnetrz-gdynia.pl/realizacje/ już nie.
1. Upewnij się, że w szablonach „page.php” i innych masz funkcję
wp_footer()
przed zamknięciem</body>
2. Dodaj atrybutrel="lightbox"
do każdego linku, które chcesz aby się odpaliło w lightboxie.<a href="images/image-1.jpg" rel="lightbox" title="Opis">Zjęcie</a>
Jaką dokładnie wtyczkę zainstalowałeś?
W źródle kodu nie widzę, aby załadowany był plik js oraz css Lightboxa.
Forum: Wtyczki
W odpowiedzi na: Content po zalogowaniuCo masz na myśli pisząc „Wnętrze posta”?
Jeżeli znasz podstawy PHP i działania WP to możesz osiągnąć swój cel dodając funkcję sprawdzającą czy użytkownik jest zalogowany:
is_user_logged_in()
. Jeżeli jest zalogowany – wyświetlasz treść, w innym wypadku formularz logowania. Możesz użyć gotowej funkcji do wyświetlania formularza logowania:wp_login_form()
.Aby określić bardziej szczegółowo, które treści mają być widoczne publicznie, a które nie, możesz wykorzystać zestaw funkcji warunkowych Conditional Tags
Forum: Wtyczki
W odpowiedzi na: Własne dodatkowe poleŁopatologicznie:
Tworzenie pola:- W edycji postów włącz sobie widok „Własne pola”. W prawym górnym rogu ekranu okna masz „Opcje ekranu”. Upewnij się że checkbox „Własne pola” jest zaznaczony.
- Na dole powinien pojawić się metabox z własnymi polami. Utwórz nowe wpisując jako nazwę np. „Cena” i wartość np. „10zł”. Zapisz post.
Wyświetlanie pola:
- Jeżeli Twoja strona nie wyświetliła dodatkowego pola, to znaczy że szablon którego używasz ich nie obsługuje. W takim wypadku musisz edytować plik szablonu odpowiedzialny za wyświetlanie wpisu (pętla). Najczęściej jest to loop.php albo content.php. Otwórz go i np. za funkcją
the_content()
umieść funkcjęthe_meta()
. - Użyj CSS do ostylowania własnych pól. WP tworzy klasy
.post-meta-key
oraz.post-meta