Odpowiedź forum utworzona

Viewing 15 replies - 1 through 15 (of 15 total)
  • Forum: Zaawansowane
    W odpowiedzi na: Więcej w tej kategori

    Spokojnie. Rozwiązanie jest już bardzo blisko 🙂

    Dodaj do tablicy $args jeszcze to: 'post_type' => 'produkty'

    Forum: Zaawansowane
    W odpowiedzi na: Więcej w tej kategori

    Błę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 kategori

    Wybacz. 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 kategori

    Widzę mały błąd. W tablicy $args ma być $term->term_id, a nie $term.

    Forum: Zaawansowane
    W odpowiedzi na: Więcej w tej kategori

    Cześć,

    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...
      ...
    
    }
    
     ?>

    Cześć
    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:”

    Cześć.
    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 );
    
    ?>

    Thread Starter Damian Gora

    (@webtroter)

    Dzię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 &nbsp 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
    Damian

    Forum: Wtyczki
    W odpowiedzi na: Wysuwane okienko z tekstem

    Znalazłem coś takiego:

    Tab Slide

    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.

    Forum: Wtyczki
    W odpowiedzi na: lightbox

    Widzę, że już sobie poradziłeś. Pomogło dodanie atrybutu „rel”?

    Forum: Wtyczki
    W odpowiedzi na: lightbox

    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 atrybut rel="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>

    Forum: Wtyczki
    W odpowiedzi na: lightbox

    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 zalogowaniu
    Damian Gora

    (@webtroter)

    Co 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
    Damian Gora

    (@webtroter)

    Łopatologicznie:
    Tworzenie pola:

    1. 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.
    2. 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:

    1. 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().
    2. Użyj CSS do ostylowania własnych pól. WP tworzy klasy .post-meta-key oraz .post-meta
Viewing 15 replies - 1 through 15 (of 15 total)