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 !