Wsparcie » Zaawansowane » Posty wyswietlane w tabeli z uzyciem Custom_Fields

  • Rozwiązano dewon

    (@dewon)


    Czesc Wszystkim,

    Na wstepie chcial bym zaznaczyc ze mam pewne (jak widac nie wielkie 🙂 ) doswiadczenie w uzywaniu WordPressa ale potrzebuje wskazowki w jednym zagadnieniu. Nie licze na konkretne podanie rozwiazania ale chociaz wskazanie jak ugryzc temat i ktora wiedze nadrobic 🙂

    Zadanie jakie przede mna sie pojawilo to zrobienie jednej z podstron tak aby wyswietlala w formacie tabeli tylko posty dodane do konkretnej kategorii. Chcial bym zeby naglowkami dla posta w tej tabeli byly dane z pol „wlasne pola” utowrzonymi w kazdym z tych postow. I tu wychodza moje braki w php i niewiedza. W moim rozumowaniu po:
    1 powinienem utowrzyc szablon dla tej strony tak zeby tworzyl tabele i wyswietlal posty tylko z konkretnej kategorii.
    2 stworzyc jakas petle w php ktora by wypelniala odpowiednie pola tabeli ( i tu pytanie czy moge w tej petli w jakis sposob odniesc sie do tych pol dodatkowych? )
    3 chcial bym zeby kazdy z tych postow tez wyswietlal sie w ustalonej formie tj. najpierw tabela z danymi z „wlasne pola” a pozniej szczegoly ktore byly by trescia postu. Pytanie czy to realizuje tworzac nowy „format ” ?

Viewing 9 replies - 1 through 9 (of 9 total)
  • Polecam zapoznanie się z wtyczką ACF i jej rodzajem pola Repeater – tam najłatwiej utworzysz custom fields, a tym samym wiersze do tej tabeli.

    Nie musisz robić nowego formatu wystarczy, że na górze zrobisz if., np:
    $tabela = get_field(’tabela’);
    if ($tabela && is_array($tabela)) {
    echo '<table>’;
    foreach ($tabela as $wiersz) {
    ?>
    <tr><td><?php echo $wiersz[’nazwa_pola_1′]; ?></td><td><?php echo $wiersz[’nazwa_pola_2′]; ?></td></tr>
    <?php
    }
    echo '</table>’;
    }

    Więcej info odnośnie wtyczki ACF znajdziesz na stronie twórców.

    Thread Starter dewon

    (@dewon)

    Wielkie dzieki za pomoc! 🙂

    Thread Starter dewon

    (@dewon)

    Troche poczytalem o tej wtyczce i wszystko wyglada fajnie, stworzylem taki szablon custom fieldsow dla konkretnej kategorii i teraz wchodzac w edycje danego wpisu mam do niego podpiete pola takie jak trzeba, dziala to elegancko. Z racji mojej slabej wiedzy na temat php zastnawiam sie jak moge z zrobic z tego tabele.
    Wersja pro tej wtyczki obejmuje tez repeater ale czy to nie jest tak ze dane do tabeli zbudowanej na tym typie pol trzeba bedzie wprowadzac „recznie” ? Bo w wiekszosci materialow jakie tak na szybko znalazlem te tabele maja wartosci wpisane na stale a moj cel jest taki ze osoba redagujaca posta uzupelnia wskazane custom fields (nr zlecenia, opis, data) i po opublikowaniu tego posta jest sobie strona na ktorej jest tabela zbierajaca te dane ze wsystkich postow w tej kategorii i prezentujaca je jako kolejne wiersze.
    Potrzebny mi do tego ten Repeater ? czy moge zrobic jakas petle w PHPie renderujaca mi taka tabele w oparciu tylko o te dodatkowe pola?

    Wiem ze moj opis moze wydawac sie troszke enigmatyczny 🙂 ale tak jak mowielm z braku wiekszego doswiadczenia musze operowac dosc prostymi do zobrazowania pojeciami 🙂

    Każdy post będzie miał tylko jeden wiersz tabeli? W takim razie nie trzeba Repeatera. Dodaj po prostu odpowiednie pola.

    Aby wyświetlić tabelę będziesz musiał skorzystać z wordpressowego query i funkcji echo get_field(’nazwa_pola’);

    Thread Starter dewon

    (@dewon)

    Jeszcze raz wielkie dzieki ! Szybko nadrobilem zaleglosci co do wp_query i odkrylem caly nowy swiat ! 🙂 get_field dziala idealnie. Jesli nie bylo by to zbyt wielkim naduzyciem cierpliwosci chcialem zapytac jeszcze o to jak zrobic zeby np 1 pole ktore jest numerem bylo jednoczesnie linkiem do posta z ktorego zostalo pobrane ? i drugi temat to w ACF zdefiniowalem jedno pole jako typ Data i w postach wyswietla sie ok ale w tabeli jest ciagkiem cyfr, czy na tabeli tez powinienem ustawic jakis format wyswietlania ?

    1. potrzebujesz jakiś counter do liczenia kolejnych numerów wiersza i możesz to zrobić tak:

    $row_counter++;
    echo '<a href="'.get_permalink($post->ID).'">'.$row_counter.'</a>';

    2. jak jest podane tutaj: https://www.advancedcustomfields.com/resources/date-picker/
    przyda Ci się: https://codex.wordpress.org/Formatting_Date_and_Time

    $date = get_field('date');
    // make date object
    $date = new DateTime($date);
    echo $date->format('j M Y');

    Thread Starter dewon

    (@dewon)

    Jak zwykle dzieki za wskazowki. Niestety brak podstawowej wiedzy w PHPie kosztuje mnie sporo czasu na eksperymentowaniu jak i gdzie to dodac oraz gdzie mi sie znowy jakis znak konca lini zgubil 🙂 no ale na tym polega edukacja 🙂

    1 punkt moze troche zle opisalem bo ostatecznie zmienna $row_counter okazala sie zbedna. Chcialem tylko zeby dane z 1 pola byly automatycznie linkiem do tego posta i uzylem tej struktury ktora podales, dziala swietnie.

    Obecnie mam tak:

    echo '<table>
    		  <tr>
    		  <th> aaa </th>
    		  <th> bbb </th>
    		  <th> ccc </th>
    		  </tr>';
    
    while ( $the_query->have_posts() ) {
    		$the_query->the_post();
    
    		$date = get_field('ccc');
    		$date3 = new DateTime('tomorrow');
    
    echo '<tr>';
    echo '<td><a href="'.get_permalink($post->ID).'">' .get_field('aaa'). '</a></td>
    	<td>' .get_field('bbb'). '</td>
    	<td>' .$date. '</td></tr>'; 
    
    	}
    	echo '</table>';

    Zdaje sobie sprawe ze z punktu widzenia doswiadczonego programisty pewnie nie wyglada to zbyt profesjonalnie ale tak jak mowielm na codzien zajmuje sie zupelnie inna czescia informatyki 🙂 Temat wyswietlania daty okazal sie banalny, po prost zle zdefiniowalem w ACF sposob w jaki ma sie wyswietlac to pole.
    I teraz kwestia z ktora nie bardzo sobie radze, mianowicie ostatnie pole w tabeli $date, zwraca mi ono date jaka zostala ustalona przez osobe tworzaca posta. Chcial bym teraz aby w tej tabeli data ta byla zielona jesli obecna data jest mniejsza niz wyznaczona i czerwona jesli jest juz po tej dacie. Stworzylem sobie taka prosta strukture:

    if ($date < $date3){
    
    	echo '<p style="color:blue";>'.$date->format('j/m/Y').'</p>';
    
    	} elseif ($date >  $date3) {
    
    	echo '<p style="color:red";>'.$date3->format('j/m/Y').'</p>';
    	}

    tylko teraz nie wiem jak to polaczyc ze soba, probowalem wklejac to w rozne miejsca sekcji „while” bo chce zeby ten warunek byl sprawdzany dla kazdego posta ale za chiny mi to nie dziala , prosil bym o jakas podpowiedz 🙂

    Thread Starter dewon

    (@dewon)

    Maly update:

    Wydaje mi sie ze ten if musi pojawic sie w miejscu w ktorym to pole mialo by zostac uzupelnione :

    while ( $the_query->have_posts() ) {
    		$the_query->the_post();
    
    		$date = get_field('ccc');
    		$date3 = new DateTime();
    		$text1 = 'TEKST 1';
    		$text2 = 'TEKST 2';
    
    	echo '<tr>';
    	echo '<td><a href="'.get_permalink($post->ID).'">' .get_field('aaa'). '</a></td>';
    	echo '<td>' .get_field('bbb'). '</td>';
    
    	if ($date < $date3){
    
    		echo '<td>'.$text1.'</td>';
    
    	}elseif ($date > $date3) {
    
    		echo '<td>'.$text2.'</td>';
    	}
    
    	echo '</tr>'; 
    
    	}
    	echo '</table>';

    roboczo uzylem zmiennej „$text” zeby sprawdzic czy to wogole dziala bo przy uzyciu „.$date->format(’j/m/Y’).” krzyczla ze cos mu tu nie pasuje w formacie, poza petla while ta struktura dziala wiec nie bardzo wiem czemu tu nie chce. Tak czy inaczej na „tekstowych” zmiennych to „prawie” dziala, wstawia wartosc z 1 czesci IFa ale jak zmienie date w tym polu na taka ktora spelniala by 2 warunek to juz zmienna $text2 sie nie wstawia.

    Thread Starter dewon

    (@dewon)

    rozwiazaniem okazalo sie uzycie:

    $date = get_field('ccc');
    $date = DateTime::createFromFormat('d-m-Y', $date);

    dopiero po ustaleniu formatu dla zmiennej date string pobrany z pola „ccc” zamienil sie na obiekt DateTime

    Dzieki za wszystkie wskazowki i porady !

Viewing 9 replies - 1 through 9 (of 9 total)
  • Temat ‘Posty wyswietlane w tabeli z uzyciem Custom_Fields’ jest zamknięty na nowe odpowiedzi.