Prawa autorskie © 2012 Webfaces blog. Wszelkie prawa zastrzeżone. Motyw Snowblind autor Themes by bavotasan.com.

Jeśli używasz WordPressa jako CMS, ta wiadomość jest będzie dla Ciebie jak wiatr w żagle: własne typy wpisów (ang. custom post types) pomogą Ci w bardziej elastyczny sposób dostosować witrynę do potrzeb Twoich lub Twojego klienta.
Każdy, kto wykorzystywał WordPressa jako systemu o szerszej funkcjonalności niż tradycyjny blog, prędzej czy później doszedł do wniosku, że prosty mechanizm wpisów i kategorii to za mało. Począwszy od WordPressa w wersji 3.0 można tworzyć własne typy wpisów. Co to oznacza? Zobaczmy jak to działa w praktyce. Tutorial ten będzie miał formę studium przypadku, czyli analizy problemu wykonanej na rzeczywistym przykładzie.

Przykład zastosowania
Opis problemu
Być może już wcześniej zauważyłaś/-eś, że na tym blogu w pasku bocznym po lewej stronie mamy sekcję pt. „Czy wiesz, że…” wyświetlającą krótką notatkę zachęcającą do przeczytania jakiegoś artykułu z tego bloga. Zwróćmy uwagę, że treść notatki wyświetla się losowo. Każda z takich notatek jest w jakiś sposób w WordPressie zapamiętana. Jak? Moglibyśmy wprowadzić ją jako zwykły wpis i przyporządkować do jakiejś kategorii, jednak wówczas teksty notatek byłyby automatycznie wyświetlane:
- na stronie głównej
- w kanałach nowości RSS
- w archiwum
- w wynikach wyszukiwania
- jako wpisy danego autora
- itd.
a tego wszystkiego chcemy uniknąć, ponieważ notatki te nie stanowią istoty naszego bloga, są czymś w rodzaju „wzmianki na marginesie”. Ręczne pomijanie ich z wyświetlania z uwzględnieniem wszystkich tych przypadków, to zbyt dużo pracy. Poza tym nie chcemy przechowywać ich z „tradycyjnymi” wpisami, żeby uniknąć misz-maszu wśród naszych artykułów.
Własne typy wpisów jako rozwiązanie
Co innego gdybyśmy mogli pamiętać własne wpisy gdzieś jakby „na boku”. Na pomoc przychodzą własne typy danych (custom post types). Zobaczmy na obrazku obok, w jaki sposób pamiętam teksty tych notatek w WordPressie tego bloga:
Każda notatka składa się z:
- tytułu (nie jest wyświetlany na ustronie, ale nam przyda się do identyfikacji notatki)
- opisu, czyli treści notatki (description)
- wpisu do którego się odwołuje (reference post)
- daty utworzenia notatki (note date)
Edycja notatki wygląda niemal identycznie jak edycja tradycyjnego wpisu w WordPressie. Zobacz obrazek obok. Typ nazwałam note (angielski odpowiednik słowa „notatka”), ale równie dobrze moglibyśmy go nazwać „ciekawostka” czy zupełnie inaczej.
Jak założyć i wyświetlić w WordPressie wpisy oparte o własny typ wpisu
Realizacja przedstawionej wyżej funkcjonalności sprowadza się do wykonania 3 kroków:
- 1. Założenie własnego typu danych
- 2. Dodanie kilku wpisów utworzonego typu
- 3. Wyświetlenie losowo wybranego wpisu na pasku bocznym
Krok 1. Założenie własnego typu danych o wybranej nazwie
Wszystkie zmiany wykonywane w tym kroku należy wpisywać do pliku functions.php.
Krok 1.1. Rejestracja własnego typu wpisu
Własny typ wpisu tworzymy i rejestrujemy za pomocą funkcji register_post_type. W naszym przykładzie typ ten będzie nosił nazwę note (notatka).
add_action('init', 'note_register');
function note_register() {
$args = array(
'label' => __('My notes'),
'singular_label' => __('My note'),
'public' => true,
'show_ui' => true,
'capability_type' => 'post',
'hierarchical' => false,
'rewrite' => true,
'supports' => array('title')
);
register_post_type( 'note' , $args );
}
Na rysunku obok widać efekt wykonania tego kroku: w menu bocznym w naszym panelu administracyjnym powinna pojawić się nowa sekcja „My notes” z dwoma pozycjami do wyboru „My notes” oraz „Dodaj nowy”.
Po kliknięciu w „Dodaj nowy” zobaczymy ekran jak pokazano obok. Widzimy, że ekran przypomina nieco tradycyjny ekran edycji wpisu: ma tytuł (title), lecz jednak nie ma posiada ekranu edycji treści (editor). Ekranu edycji nie włączamy celowo, gdyż do wprowadzania pozostałych wartości wykorzystamy własne pola (ang. custom post fields), o czym później. Włączenie obsługi tytułu umożliwił nam parametr: ‘supports’ => array(‘title’).
Wykaz innych parametrów akceptowanych przez funkcję register_post_type znajdziemy w Kodeksie WordPressa.
Krok 1.2. Dodanie własnego ekranu do edycji treści wpisu
Oprócz tytułu wpisu (naszej notatki) chcielibyśmy mieć możliwość przechowywania, wyświetlania i edycji następujących pól:
- opisu, czyli treści notatki (description)
- tematu wpisu do którego się odwołuje nasza notatka (reference post)
- daty utworzenia notatki (note date)
Za pomocą funkcji add_meta_box utworzymy własną sekcję edycji dla naszych wpisów (notatek):
add_action("admin_init", "admin_init");
function admin_init() {
add_meta_box("noteInfo-meta", __( 'Note information') , "meta_options", "note", "normal", "low");
}
Opis najważniejszych parametrów:
- noteInfo-meta – HTML-owy identyfikator sekcji
- Note information – tytuł sekcji wyświetlany na ekranie (widoczny na obrazku niżej)
- meta_options – funkcja, która wyświetli na ekranie, w postaci HTML-a daną sekcję (kod funkcji niżej)
- note – typ ekranu na którym będzie wyświetlona sekcja edycji, tutaj będzie to nazwa utworzonego przez nas typu wpisu
Znaczenie pozostałych parametrów funkcji add_meta_box możemy doczytać w Kodeksie
Poniżej kod funkcji meta_options, który pozwala na wyświetlenie pól edycji. U nas będą to pola note_content (etykieta „Enter note content”) oraz post_ref (etykieta Enter reference post title).
function meta_options() {
global $post;
$custom = get_post_custom($post->ID);
$note_content = $custom["note_content"][0];?>
<label style="display: block; margin-bottom: 5px"> <?php _e( 'Enter note content:') ?> </label><textarea cols="20" rows="5" name="note_content" style="width:99%"><?php echo esc_attr( $note_content ); ?> </textarea>'
<?php $ref_post = $custom["ref_post"][0]; ?>
<label><?php _e( 'Enter reference post title:') ?></label><input type="text" name="ref_post" value="<?php echo esc_attr( $ref_post ); ?>" size="80" style="width:97% />
<?php }
Na obrazku obok pokazano efekt uzyskany po wykonaniu tego kroku. Wyświetlamy własny meta-box, inaczej sekcję edycji (z etykietą „Note information”) czyli obszar, w którym pokazujemy własne pola skojarzone z danym wpisem:
- note_content – pole typu textarea (textarea cols=”20″ rows=”5″ name=”note_content”)
- ref_post – pole tekstowe (input type=”text” name=”ref_post”)
Za pomocą funkcji get_post_custom wyciągamy z bazy zawartość wszystkich własnych pól skojarzonych z danym wpisem. Jest to (czyli sięgnięcie poprzez tę funkcję do bazy) niezbędne, kiedy otwieramy istniejący już wpis do ponownej edycji.
Krok 1.3. Zapisanie w bazie wartości wprowadzonych przez użytkownika
Gdybyśmy w tym momencie kliknęli w „Dodaj nowy” i wprowadzili jakieś wartości dla własnych pól note_content i/lub ref_post, okaże się, że nasze dane wylecą w przysłowiowy kosmos. Aby trafiły do bazy potrzebny będzie jeszcze mechanizm, za pomocą którego WordPress odczyta z ekranu wartości wprowadzone/zmodyfikowane przez użytkownika i zapamięta je w bazie.
W tym celu napiszemy funkcję save_note_data, która zostanie wywołana przez WordPress w momencie dodania/modyfikacji wpisu. Aby tak się stało wbijamy się z jej wywołaniem do akcji save_post. W celu podpięcia się w core’owy cykl przetwarzania WordPressa wykorzystamy funkcję add_action, gdzie jako pierwszy parametr podajemy właśnie save_post:
add_action('save_post', 'save_note_data');
function save_note_data() {
global $post;
update_post_meta($post->ID, "note_content", $_POST["note_content"]);
update_post_meta($post->ID, "ref_post", $_POST["ref_post"]);
}
Za pomocą funkcji update_post_meta zapisujemy lub aktualizujemy w bazie wartości dla własnych pól (custom post fields): note_content oraz ref_post przypisanych do danego wpisu (właśnie aktualizowanej notatki).
Krok 1.4. Wyświetlenie pól wpisu w kolumnach
Gdy teraz będziemy dodawać nowe wpisy-notatki, a następnie wejdziemy w ponowną edycję dowolnego z nich, wartości w polach note_content oraz ref_post będą pamiętane jak należy. Jednak gdy w panelu admin. spróbujemy wyświetlić wykaz wszystkich naszych notatek (czyli klikniemy w „My notes”) czeka nas małe rozczarowanie. Zobaczymy wprawdzie tytuł i datę każdej z nich, ale nic poza tym – patrz rysunek obok.
W tym kroku dodamy dwie kolumny do tego widoku. Naszym celem jest pokazanie w układzie kolumnowym również pól note_content oraz ref_post.
Krok 1.4.1. Wyświetlenie nagłówków kolumn
W celu wyświetlenia nagłówków kolumn z własnymi etykietami do pliku function.php wpisujemy poniższy kod:
add_filter("manage_edit-note_columns", "note_edit_columns");
function note_edit_columns($columns) {
$columns = array(
"cb" => "<input type=\"checkbox\" />",
"title" => __('Note title'),
"note_content" => __('Description'),
"ref_post" => __('Reference post'),
'date' => __('Note date'),
);
return $columns;
}
Uwaga! Niezmiernie ważna jest nazwa pierwszego parametru funkcji add_filter: manage_edit-note_columns. Po przedrostku manage_edit- musi się znaleźć nazwa typu wpisu, zgodna z tą, którą podaliśmy w kroku 1.1 (w funkcji register_post_type), u nas będzie to note, zakończona postfiksem _columns.
Na obrazku obok przedstawiono efekt wykonania tego kroku. Pojawiły się tytuły nowych kolumn Description title oraz Reference post a dotychczasowe (tytuł i data wpisu) zmieniły swoje etykiety.
W powyższym fragmencie kodu jest jeszcze jeden tejamniczy zapis:
"cb" => "<input type=\"check.ox\" />"
To przypisanie musimy pozostawić, żeby nie zniknęła nam pierwsza z domyślnych kolumn, jaką jest okienko typu checkbox umożliwiające wykonywanie akcji zbiorowych na naszych wpisach.
Krok 1.4.2 Wyświetlenie wartości w kolumnach
Zaraz, zaraz… Mamy już eleganckie nagłówki wszystkich kolumn, ale dlaczego wartości widoczne są tylko w dwóch z nich?
Musimy jeszcze powiedzieć WordPressowi, do jakich pól w bazie ma sięgnąć, żeby uzupełnić zawartość kolumn wyświetlających dane z naszych własnych pól (custom post fields): note_content oraz ref_post.
add_action("manage_posts_custom_column", "note_custom_columns");
function note_custom_columns($column) {
global $post;
switch ($column) {
case "note_content":
$custom = get_post_custom();
echo $custom["note_content"][0];
break;
case "ref_post":
$custom = get_post_custom();
echo $custom["ref_post"][0];
break;
}
}
Z naszą funkcją note_custom_columns wpinamy się w przetwarzanie WordPressa w punkcie manage posts custom column” target=blank”
Dla kolumny note_content wyświetlamy wartość z pola note_content, dla kolumny ref_post postępujemy analogicznie. Zauważmy, że do odczytu wartości z własnych pól (ang. custom fields) posłużyliśmy ponownie (jak w kroku 1.2) funkcją get_post_custom.
Odświeżamy ekran z naszymi notatkami i powinniśmy zobaczyć wykaz podobny jak na obrazku obok.
Od tego momentu możemy dodawać, modyfikować i usuwać wpisy własnego typu (notatka).
Krok 2. Dodanie kilku wpisów utworzonego typu
Mamy już pełny interfejs do zarządzania naszymi notatkami. Teraz dodajmy kilka wpisów wykorzystując opcję My notes->Dodaj nowy.
Po wykonaniu tego kroku powinniśmy uzyskać efekt pokazany na rysunku obok.
Krok 3. Wyświetlenie losowo wybranego wpisu na pasku bocznym
Jak dotąd nasze notatki siedzą tylko w bazie i są widoczne w panelu administracyjnym. Czas pokazać je światu, czyli wyświetlić na stronie. Jako że są to w dalszym ciągu wpisy WordPressowe do ich wyświetlania należy zbudować query. Naszym celem jest wyświetlenie tylko jednego, losowego wpisu, który ma sie pojawić na pasku bocznym, w sekcji widgetowej. Owieramy plik sidebar.php i dopisujemy:
<div class="side-widget">
<h2><?php _e('Did you know...') ?></h2>
<?php global $post;
$r = new WP_Query(array('posts_per_page' => 1, 'no_found_rows' => true,
'post_type' => 'note', 'orderby' => 'rand'));
if ($r->have_posts()) :
while ($r->have_posts()) : $r->the_post();
$custom = get_post_custom($post->ID);
echo '<p>' . $custom["note_content"][0] . '</p>';
endwhile;
wp_reset_postdata();
endif;?>
</div>
Komentarz do najistotniejszych fragmentów kodu:
- ‘posts_per_page’ => 1 – wybieramy tylko jeden wpis
- ‘post_type’ => ‘note’ – wybieramy tylko spośród wpisów typu notatka (note)
- ‘orderby’ => ‘rand’ – wybieramy wpis losowy
- ‘no_found_rows’ => true – wyłączamy automatyczne zliczanie wszystkich wpisów w wyniku w celu przyspieszenia zapytania
Do wyświetlenia głównej treści notatki (note_content) wykorzystujemy funkcję get_post_custom i odwołujemy się do pola note_content, podobnie jak to robiliśmy już wcześniej.
Informacje dodatkowe
Pokazane wyżej kroki w pełni pozwalają na realizację naszego zadania – po ich wykonaniu możemy już cieszyć się efektem. Będzie podobny do tego jak na tym blogu w lewej, bocznej kolumnie.
Ale przydałby się coś jeszcze: możliwość wykonania podglądu lub wyświetlenia strony z treścią pojedynczego wpisu.
Na rysunku obok widzimy, że po najechaniu myszą na tytuł wpisu oraz opcję Zobacz w dolnym pasku przeglądarki (Firefox) widzimy URL strony, na której wpis będzie widoczny. Naszym celem jest pokazanie na niej tytułu i treści wpisu.
W katalogu z naszym motywem zakładamy plik o nazwie single-note.php. Nazwa ta nie jest przypadkowa. Pierwszy jej człon (single) jest odpowiednikiem nazwy znanego nam szablonu single.php, służącego do wyświetlania pojedynczego wpisu, a drugi (note) odpowiada typowi wpisu jaki nadaliśmy w kroku 1.1. Oba człony muszą być połączone myślnikiem.
Do pliku single-note.php wklejamy kod wyróżniony poniżej. Kontekst (to co jest przed i za wyróżnieniem) będzie się oczywiście różnić, w zależności od budowy struktury danego motywu.
<?php get_header(); if ( have_posts() ) while ( have_posts() ) : the_post(); $custom = get_post_custom($post->ID); ?> <h2><?php echo $post->post_title ?></h2> <p><?php echo $custom["note_content"][0] ?></p> endwhile; get_footer(); ?>
Co się stanie jeśli nie utworzymy dedykowanego pliku single-note.php?
Zgodnie z hierarchią szablonów, WordPress sięgnie do pliku index.php. Nasz wpis-notatka jest wpisem jak każdym inny, więc wykorzystanie standardowej pętli WordPressa pokaże jakiś wynik, ale w naszym przypadku tylko częściowo. Na ekranie poglądu wpisu zobaczymy jedynie sam tytuł wpisu-notatki. Jej treść przechowujemy we własnym polu (note_content), a wyświetlania tego pola nie znajdziemy ma w ogólnym pliku index.php. Dlatego najlepiej napisać własny szablon dla wyświetlania pojedynczego wpisu.
To już wszystko. Pamiętaj, że ten tutorial jest utworzony z myślą o Tobie. Jeśli któryś z przedstawionych tu punktów jest dla Ciebie niejasny, śmiało zapytaj o to w komentarzach. Możesz również ekspresowo sprawdzić, jak działa mechanizm własnych typów wpisów, korzystając z kompletu prezentowanych tu kodów – do pobrania niżej.
Pliki do pobrania
Niżej znajdują paczka plików do pobrania, zawierająca wszystkie kody źródłowe wykorzystane w tym tutorialu.










10-08-2011 at 17:41
Sprawdzam, czy dobrze zrozumiałam: jeśli wprowadzę te instrukcje w życie, zgodnie z w/w punktami, to na moim blogu we wpisach czytelnikom wyświetli się to, co w tym wpisie nazywa się „czy wiesz, że..”, tak?
Anna jest autorem Mam favicona!
10-08-2011 at 21:08
Dokładnie tak, czyli dobrze zrozumiałaś
10-08-2011 at 19:46
Mam wrażenie, że piszecie (nie wiem, która z Was) artykuły pod moje potrzeby.
Przy okazji, chcę zauważyć, że poza merytorycznie dobrą treścią Waszego wpisu, jego struktura (pod względem SEO) na 6+
Profesjonalizm połączony z perfekcjonizmem (w dobrym tego słowa znaczeniu).
A teraz, dla tych, którzy tu trafili (tak jak ja), od strony bloga i nie zorientowali się jeszcze, że zajmujecie się tworzeniem fajnych i dobrze wykonanych stron internetowych polecam zapoznanie się z Waszą stroną główną: http://www.webfaces.pl/
MarioC jest autorem Struktura strony – bardzo ważny element SEO
10-08-2011 at 21:13
MarioC, nie ukrywam, że tym razem lepiej się postarałam o dobrą strukturę pod SEO, właśnie po lekturze Twojego artykułu z tą a’la tabelka porównawczą do struktury książki, o, właśnie ten, który Ci się podpiął pod komentarzem. To znaczy bardziej starałam się zapanować nad hierarchiczną struktura nagłówków, bo przyznam, że wcześniej nagłówki bardziej dobierałam na zasadzie: „stawiam na h2 bo jest najlepiej widoczny”
16-08-2011 at 10:27
Wpis dołączam do mojej kolekcji perełek
Mam tylko jeden pomysł racjonalizatorski
Podczas wprowadzania nowej notatki jest pole reference post, gdzie należy wprowadzić tytuł posta. Trudno jednak zapamiętać dokładnie tytuły wszystkich wpisów na blogu
W takim wypadku nawet zamiana tego pola tekstowego na listę wyboru znacznie ułatwiłaby dodawnie notatek. Co o tym myślisz?
Ola jest autorem the_content vs. the_excerpt
16-08-2011 at 17:38
Ciekawe co tam jeszcze jest w Twojej kolekcji perełek
Z tą listą to rzeczywiście dobry pomysł. Już nawet zakasałam rękawy, żeby od razu wdrożyć go w życie, ale w praniu okazało się, że ja potrzebuję i tak jeszcze link do tego wpisu (wykorzystuję go w treści notatki), więc chyba zostanę przy mojej obecnej metodzie na piechotę:
1. Wchodzę do archiwum na moim blogu
2. Wciskam na tytule artykułu prawy klawisz myszy i wybieram „Kopiuj adres odnośnika” po czym wstawiam go do treści notatki
3. Wracam do archiwum, zaznaczam tytuł posta i przeklejam (copy-paste) w treści notatki jako opis odnośnika i drugi raz w polu referencyjnym.
16-08-2011 at 18:28
Jedna z tych rzeczy, które warto by mieć rozpracowane na przyszłość. Na własne potrzeby można się zadowolić prowizorką, ale np. dla klienta już niezbyt
W takich sytuacjach tęsknię troszkę za Drupalem, gdzie po prostu definijesz pole jako ‘node-refernce’ i możesz sobie wybierać między ‘select list’ i ‘autocomplete text field’
Ola jest autorem the_content vs. the_excerpt
17-08-2011 at 9:59
Tak, zgadzam się, im mniej tego rodzaju wytycznych dla klienta, tym lepiej świadczy o jakości naszego „produktu”. Tego rodzaju wskazówki dla klienta opisałam nawet jako jeden z najczęściej popełnianych błędów deweloperów używających WordPressa jako CMS.
Nie mam doświadczenia w Drupalu, ale skoro takie rzeczy są dostępne od ręki, to faktycznie duży plus. Ola, piszesz, że tęsknisz trochę za Drupalem, to dlaczego przeniosłaś się na WP?
17-08-2011 at 17:33
Żeby była jasność – jest też mnóstwo rzeczy związanych z Drupalem, za którymi nie tęsknię
A na WP się nie przeniosłam. Po prostu trafiają projekty, dla których bardziej odpowiedni jest Drupal albo Joomla niż WP i właśnie nie tak dawno nad jednym pracowałam
Ola jest autorem the_content vs. the_excerpt
21-09-2011 at 23:16
Witam
ponownie sobie przeczytałam artykuł i postanowiłam zrealizować pomysł. Ale jestem laikiem, i potrzebuję dodatkowej wskazówki: w którym dokładnie miejscu w pliku functions.php mam wstawić ten kod?
A drugie pytanie: czy jak ściągnę te pliki to mam dokładnie wszystko skopiować i wkleić? Po otwarciu bowiem są jeszcze tagi /body i /html, one tez muszą być skopiowane do pliku, który już istnieje w motywie?
I mała uwaga: chyba commentluv trochę nie działa
Pozdrawiam
22-09-2011 at 8:01
Ania, najlepiej, żebyś zrobiła te zmiany gdzieś na wersji roboczej swojej witryny, a jeśli takiej nie posiadasz, to zarób sobie kopie plików functions.php i sidebar.php przed wprowadzeniem zmian i jak się coś posypie, to będziesz mogła przywrócić stare wersje.
1. Wchodzisz do pliku functions.php z paczki, zaznaczasz całość i przeklejasz do swojego pliku functions.php na końcu (za aktualną zawartością).
Po wykonaniu tego kroku już powinnaś zobaczyć w panelu admina to, co na obrazku w kroku 1.1
Możesz dodać treści jednej notatki na próbę i zapisać. Teraz, żeby ona się pojawiła w sidebarze (na pasku bocznym), musisz zmodyfikować plik sidebar, czyli wykonać punkt 2:
2. Widzę, że używasz motywu graphene. Wchodzisz do pliku sidebar.php i za linią:
<?php do_action('graphene_after_sidebar1'); ?>oraz przed linią:
wklejasz taki kod:
<div class="sidebar-wrap clearfix"> <h3><?php _e('Did you know...') ?></h3> <?php global $post; $r = new WP_Query(array('posts_per_page' => 1, 'no_found_rows' => true, 'post_type' => 'note', 'orderby' => 'rand')); if ($r->have_posts()) : while ($r->have_posts()) : $r->the_post(); $custom = get_post_custom($post->ID); echo '<p>' . $custom["note_content"][0] . '</p>'; endwhile; wp_reset_postdata(); endif;?> </div>Po zapisaniu zmian (wysłaniu pliku na serwer) i odświeżeniu dowolnej strony powinnaś zobaczyć nową pozycję w sidebarze, na samym dole z napisem „Did you know…”
Comment luv nie działa tylko dla Twojej strony. Wpisz sobie testowo (bez wysyłania komentarza
w polu „www” adres innego bloga i będzie ok.
09-10-2011 at 23:00
Wszystko działa idealnie
jeszcze tylko zmienię „did you know..” na coś po polsku
22-09-2011 at 9:18
hm…z tym commentluv to dziwna sprawa…masz rację, że nie działa na mojej podstawowej stronie; ale taka sytuacja jest tylko tutaj :/
dziękuję za porady, wieczorem potestuję
Anna jest autorem Jaką niszę wybrać, by zarabiać w internecie?
29-11-2011 at 2:19
A ciekawe czy można by coś takiego umieścić w samym poście, np. w środku tekstu z lewej.
29-11-2011 at 22:36
Tak, można. Najlepiej wcześnie przygotować ten fragment kodu w postaci tzw. shortcode’u, który umieszcza się w functions.php i nadaje mu jakaś przyjazną nazwę. Wówczas będzie można wstawić ten kod w dowolnym miejscu podczas edycji postu lub strony używając wskazanej nazwy shortcode’u w nawiasach klamrowych. Wiesz jak się pisze shortcode’y?
12-12-2011 at 10:29
Witam
A jak dodać do tego możliwość wstawiania plików z wykorzystaniem biblioteki mediów w WP ? takie rozwiązanie jest tu:http://sicdigital.com/2010/07/create-custom-post-type-for-image-upload-wordpress3/ – ale nie działa do końca poprawnie…
12-12-2011 at 23:30
Najprościej to będzie dodać możliwość wstawiania featured images (ikony wpisów).
Podczas rejestracji custom post type w parametrze supports dodajesz wsparcie dla thumbnail:
'supports' => array('title','thumbnail')Dla przypomnienia, żeby ikony wpisów działały, trzeba w pliku functions.php mieć również linię add_theme_support( ‘post-thumbnails’ );
18-01-2012 at 23:54
A jak ma się sytuacja, gdy chcę zastosować standardowy edytor TinyMCE zamiast zdefiniowanego? Tzn. jak zapisać dane do bazy podane przez edytor? Mówię o tym fragmencie kodu: ‘supports’ => array(‘title’, ‘editor’) . Z góry dziękuję za odpowiedź!
19-01-2012 at 1:06
Cofam pytanie, już wszystko wiem, wydawało mi się, że posty się nie zapisują do bazy, a to nie w tym leżał problem. Można śmiało usunąć oba posty.
19-02-2012 at 16:32
Niestety u mnie nie działa tak jak trzeba. Nie wiem gdzie popełniam błąd aby wszystko wyświetlało się poprawnie.
1. Po wpisaniu do pliku functions.php
// 3. Poniżej kod funkcji meta_options, który pozwala na wyświetlenie pól edycji.
function meta_options() {
global $post;
$custom = get_post_custom($post->ID);
$note_content = $custom["note_content"][0]; ?>
<input type="text" name="ref_post" value="” size=”80″ style=”width:97%” />
oraz
Notice: Undefined index: ref_post in /home/nazwa/ftp/blog/wp-content/themes/Oribiz/functions.php on line 145
chodzi o linijkę:
2. A po wpisaniu kodu do pliku funcions.php
add_action(‘save_post’, ‘save_note_data’);
function save_note_data() {
global $post;
update_post_meta($post->ID, „note_content”, $_POST["note_content"]);
update_post_meta($post->ID, „ref_post”, $_POST["ref_post"]);
}
Wyskoczyły błędy:
Notice: Trying to get property of non-object in /home/nazwa/ftp/blog/wp-content/themes/OriflameBiznes/functions.php on line 156
Notice: Undefined index: note_content in /home/nazwa/ftp/blog/wp-content/themes/Oribiz/functions.php on line 156
Notice: Trying to get property of non-object in /home/nazwa/ftp/blog/wp-content/themes/Oribiz/functions.php on line 157
Notice: Undefined index: ref_post in /home/nazwa/ftp/blog/wp-content/themes/Oribiz/functions.php on line 157
Chodzi o linijki:
(linijka 156) update_post_meta($post->ID, „note_content”, $_POST["note_content"]);
)linijka 157) update_post_meta($post->ID, „ref_post”, $_POST["ref_post"]);
Nie wiem co z tym począć. Czy może jakieś sugestie do tego?
Jan Kwiatek jest autorem Katalog Oriflame to Twoja witryna sklepowa.
19-02-2012 at 20:20
Komunikat „Trying to get property of non-object…” oznacza, że następuje odwołanie jak do obiektu, do czegoś co w istocie obiektem nie jest. Taki błąd pojawia się zwykle wówczas, gdy używamy operatora ->
Dobrze jest spróbować użyć funkcji var_dump($nazwa_zmiennej), która wypisze zawartość danej zmiennej. Wówczas upewnimy się, czy nie ma tam śmieci.
np:
26-02-2012 at 22:27
Witam
Działa wszystko tak jak należy. Super i dziękuję za pomoc.
Jeszcze jedno. Szukam już 3 dzień rozwiązania tego typu. Jestem przekonany, że mogę liczyć na Twoją pomoc. Może to być także kolejny artykuł na Twojego bloga.
W czym rzecz. Chciałbym aby przy wyświetlaniu archiwum w/g kategorii wyświetlał się dodatkowy opis kategorii, a po nim dopiero zbiór artykułów w archiwum danego działu. Chciałbym także aby można było wpisać dodatkowy tytuł w h1 niezależny od nazwy kategorii.
Wiem, że opis można wstawić za pomocą funkcji
Ale nie o to chodzi. Czy mogę otrzymać jakieś wskazówki jak można to zrobić.
dziękuję za pomoc
Jan Kwiatek jest autorem Katalog Oriflame to Twoja witryna sklepowa.
26-02-2012 at 22:29
echo category_description( $category )
Nie wpisało mi funkcji podaję osobno. Można wpisać do komentarza powyżej aby było tak jak trzeba
Jan Kwiatek jest autorem Katalog Oriflame to Twoja witryna sklepowa.
30-03-2012 at 0:20
Jak dodać do tego obsługę tinymce?
31-03-2012 at 12:02
Podczas rejestracji typu w parametrze supports (krok 1.1. w linii 11) trzeba dodać editor (jako kolejny argument po ‘title’).
29-04-2012 at 13:28
Witam. Na początek dziękuje za podpowiedź, jak fajnie zrobić dział czy wiesz, że. Do tego potrzebowałbym jeszcze możliwość formatowania wyświetlanego tekstu. Niestety w cssach nie czuje się mocny i potrzebowałbym Twojej pomocy w tym temacie. Znalazłem też fajną wtyczkę, którą chciałbym wykorzystać razem z Twoją poradą. Razem miałoby to działać w ten sposób, że w miejscu jednego wyświetlanego postu pojawiają się inne (automatycznie przesuwane przez inną wtyczkę – Scroll post excerpt) chciałbym te dwie rzeczy połączyć.
Ps. poprosiłbym również o przesłanie całego kodu, który pozwala na wyświetlanie ikon wpisów.
Będziesz w stanie mi pomóc w tej kwestii?
12-05-2012 at 16:56
Witam. Co konkretnie oczekujesz ode mnie w związku z kwestią pierwszą?
O jakie wyświetlanie ikon chodzi?