W artykule:
Bez wątpienia widziałeś motywy i wtyczki WordPress, które twierdzą, że automatycznie instalują „fałszywe dane” podczas ich instalacji, dzięki czemu natychmiast masz w pełni funkcjonalną stronę internetową. Pokażę wam metodę osiągnięcia tego przy użyciu tylko funkcji PHP.
Może to być przydatne, jeśli:
- Twój motyw lub wtyczka wymaga pewnych postów lub stron.
- Chcesz zapewnić instalację atrapy premium, jak opisano powyżej.
- Chcesz zautomatyzować tworzenie postów.
- Chcesz się tylko uczyć.
W tym samouczku stworzymy prostą funkcję dla początkujących, aby osiągnąć „szybkie i brudne” rozwiązanie robocze. Później w innym samouczku dowiemy się, jak rozszerzyć to, czego nie nauczyliśmy się tutaj, aby stworzyć solidny i łatwy w użyciu system księgowania.
Dla tych z was, którzy wolą bawić się istniejącym kodem zamiast czytać wszystkie instrukcje, oto nasza końcowa funkcja wraz z przykładem jego użycia i uwagami.
jeśli ( ! function_exists ('PostCreator')) {
function PostCreator(
$name = 'AUTO POST',
$type = 'post',
$content = 'DUMMY CONTENT',
$category = array(1,2),
$template = NULL,
$author_id = '1',
$status = 'publikuj'
) {
define (POST_NAME, $name );
define (POST_TYPE, $type );
define (POST_CONTENT, $content );
define (POST_CATEGORY, $category );
define (POST_TEMPLATE,");
define (POST_AUTH_ID, $author_id );
define (POST_STATUS, $status );
if ($type = = 'page') {
$post = get_page_by_title (POST_NAME, 'OBJECT', $type );
$post_id = $post- > ID;
$post_data = get_page ($post_id );
define (POST_TEMPLATE, $template );
} else {
$post = get_page_by_title (POST_NAME, 'OBJECT', $type );
$post_id = $post- > ID;
$post_data = get_post ($post_id );
}
function hbt_create_post () {
$post_data = array(
'post_title' = > wp_strip_all_tags (POST_NAME ),
'post_content' = > POST_CONTENT,
'post_status' = > POST_STATUS,
'post_type' = > POST_TYPE,
'post_author' = > POST_AUTH_ID,
'post_category' = > POST_CATEGORY,
'page_template' = > POST_TEMPLATE
);
wp_insert_post ($post_data, $error_obj );
}
jeśli ( ! isset ($post)) {
add_action ('admin_init', 'hbt_create_post' );
return $error_obj;
}
}
}
/ * Wszystkie dostępne opcje dla PostCreator()
PostCreator ('tytuł' , 'Typ wpisu', 'treść wpisu', 'Kategoria wpisu', 'nazwa pliku szablonu', 'numer ID autora','STATUS wpisu');
Tytuł - HTML rozebrany. Prosty Ciąg.
POST TYPE-ślimak typu Post. Np. "post" lub "strona". Obsługiwane są niestandardowe typy postów.
POST CONTENT - treść postu/strony. HTML dozwolony.
POST CATEGORY-tablica liczb całkowitych ID kategorii / kategorii, które chcesz połączyć ze swoim postem
TEMPLATE FILE NAME - nazwa pliku szablonu. Tylko dla stron. W formacie ' nazwa_pliku.php".
Numer ID autora-wartość całkowita. Domyślna wartość to 1.
Status postu-dostępne opcje; ["wersja robocza" | "Opublikuj" | "oczekujące" | "przyszłe" | "prywatne" | Niestandardowy status zarejestrowany ]
Jeśli się powiedzie, PostCreator() nie zwraca nic.
Jeśli wystąpił błąd, funkcja PostCreator () zwraca obiekt WP_error.
*/
Postkreator ("mój Lorem Ipsum", "strona", " z sporą porcją Dolor. Został on stworzony przy użyciu funkcji PostCreator Harri Bell-Thomas.' );
Przewodnik krok po kroku
Będziemy tworzyć funkcję PHP o nazwie PostCreator () i będziemy jej potrzebować do przyjęcia pewnych parametrów. Każdy parametr ma wartość domyślną, więc technicznie podczas wywoływania funkcji nie musisz określać żadnego z nich, ale hej, gdzie w tym jest zabawa?
function PostCreator(
$name = 'AUTO POST',
$type = 'post',
$content = 'DUMMY CONTENT',
$category = array(1,2),
$template = NULL,
$author_id = '1',
$status = 'publikuj'
) {
// wyjście funkcji tutaj
}
Następnie zdefiniuję pewne stałe, które są niezbędne dla następującej wbudowanej funkcji. (To może być ponownie napisane, aby nie używać stałych, ale użyłem ich, ponieważ uważam je za przydatne podczas rozszerzania podstawowej funkcji PostCreator (), ale to jest historia dla innego samouczka.
define (POST_NAME, $name );
define (POST_TYPE, $type );
define (POST_CONTENT, $content );
define (POST_CATEGORY, $category );
define (POST_TEMPLATE,");
define (POST_AUTH_ID, $author_id );
define (POST_STATUS, $status );
Jak na razie dobrze. Teraz dodałem trochę walidacji, aby zapobiec generowaniu duplikatów postów / stron(co jest koszmarem, zaufaj mi!). Ta Walidacja sprawdza, czy post / Strona o tej samej nazwie już istnieje. Jeśli tak, to nie tworzy nowego, ale jeśli nie, to tworzy go dla Ciebie.
Powodem, dla którego zdecydowałem się sprawdzić tytuł posta, jest to, że jest to wszystko, co jest wymagane przez WordPress do wygenerowania strony (reszta jest generowana automatycznie). Inne sposoby przeprowadzenia tej walidacji obejmują sprawdzanie pod kątem 'ślimaków’ lub identyfikatorów postów. wszystko to omówimy w późniejszym samouczku.
Jest to szczególnie przydatne, jeśli post/strona jest wymagana przez wtyczkę lub motyw. Po raz pierwszy opracowałem to dla jednej z moich wtyczek, ponieważ wymagało to obecności strony z określonym szablonem strony. Dzięki tej funkcji, po prostu przechowywane PostCreator () jest WordPress ”admin_init’, co oznacza, że jeśli ktoś próbował go usunąć(jak śmiesz!) następnie zostanie natychmiast ponownie utworzony, aby zapobiec problemom z resztą wtyczki.
Pamiętaj, że nikt nie chce, aby ich blog został porwany, więc upewnij się, że jasno im powiesz, co się dzieje, i być może zapewnisz im opcję wyłączenia.
A teraz wracając do walidacji. Oto kolejny fragment kodu.
if ($type = = 'page') {
$post = get_page_by_title (POST_NAME, 'OBJECT', $type );
$post_id = $post- > ID;
$post_data = get_page ($post_id );
define (POST_TEMPLATE, $template );
} else {
$post = get_page_by_title (POST_NAME, 'OBJECT', $type );
$post_id = $post- > ID;
$post_data = get_post ($post_id );
}
Co tu się do cholery dzieje?
Cóż, jest to zasadniczo ten sam proces powtórzony dwa razy. Robię to ze względu na to, jak posty i strony są traktowane nieco inaczej. Ponadto stała POST_TEMPLATE jest definiowana tylko wtedy, gdy próbujesz utworzyć stronę, ponieważ tylko strony mogą akceptować ten parametr (np. Zostanie zignorowany, jeśli próbujesz utworzyć standardowy post).
W pierwszym wierszu klauzuli IF (jej techniczna nazwa to 'apodosis’, jeśli jeszcze nie wiesz) zdefiniowana jest zmienna $post. Jeśli istnieje post / Strona o tej samej nazwie, którą próbuje się utworzyć, to $post jest wypełniany danymi istniejącego wpisu (jako obiekt, nie tablica, ale można to zmienić, jeśli jest to absolutnie konieczne). Ta zmienna jest używana do sprawdzania, czy twój tytuł jest unikalny. Kolejne dwie linie mam włączone, ponieważ, ponownie, są one bardzo przydatne, jeśli chcesz rozszerzyć tę funkcję. Przykładem może być aktualizacja istniejącego posta, jeśli już istnieje.
Następna jest nasza zagnieżdżona funkcja, która zostanie dodana do Hooka 'admin_head’. Proszę bardzo.;
function hbt_create_post () {
$post_data = array(
'post_title' = > wp_strip_all_tags (POST_NAME ),
'post_content' = > POST_CONTENT,
'post_status' = > POST_STATUS,
'post_type' = > POST_TYPE,
'post_author' = > POST_AUTH_ID,
'post_category' = > POST_CATEGORY,
'page_template' = > POST_TEMPLATE
);
wp_insert_post ($post_data, $error_obj );
}
Po prostu jest to za pomocą wbudowanej funkcji WordPress (wp_insert_post) do generowania naszego postu/strony. Wypełniamy $ post_data tablicą naszych parametrów (możesz zobaczyć nasze stałe w użyciu tutaj). Jest to tworzone i jeśli wystąpi błąd, generuje wartość logiczną $error_obj. TRUE = problem. FALSE = wszystko w porządku. Ostatnią rzeczą do zrobienia jest uruchomienie poprzedniej funkcji na głowie administratora, ale tylko wtedy, gdy przejdzie walidację i zwróci obiekt błędu.
jeśli ( ! isset ($post)) {
add_action ('admin_init', 'hbt_create_post' );
return $error_obj;
}
Świetnie! Teraz stworzyliśmy naszą niesamowitą funkcję, użyjmy jej!
Użycie
Po prostu dołącz funkcję PostCreator() i uruchom ją.
Zostanie to uruchomione przy użyciu wartości domyślnych, ale co jeśli chcemy możliwości dostosowania? Następnie używamy naszych parametrów.
PostCreator(
"Tytuł",
"TYP POSTU",
"TREŚĆ POSTU",
"KATEGORIA POSTA",
'NAZWA PLIKU SZABLONU',
"NUMER IDENTYFIKACYJNY AUTORA",
"STATUS POSTU"
);
Przy wszystkich tych opcjach należy zachować ostrożność przy użyciu apostrofów. Upewnij się, że jeśli chcesz użyć apostrofu (z wyjątkiem tych otaczających same parametry), poprzedź go ukośnikiem wstecznym. Eg;
PostCreator ('Alex ' S Post');
Parametr TITLE przyjmuje wartość łańcuchową. To jest pozbawione znaczników HTML.
Parametr Typ posta akceptuje ślimak typu post, na przykład; 'post’ lub 'page’. Obsługiwane są niestandardowe typy postów.
PostCreator ('Alex ' s Post',' page');
Treść postu ’ akceptuje wartość łańcuchową. Będzie to treść utworzonego postu / strony. HTML jest tutaj dozwolony.
PostCreator ('Alex's Post', 'page', 'the force is strong with this one...' );
Kategoria POST akceptuje tablicę liczb całkowitych. Liczby całkowite odpowiadają ID kategorii / kategorii przypisanej do posta / strony.
PostCreator ('Alex's Post', 'page' , 'the force is strong with this one...' , array( 1, 2 ) );
Nazwa pliku szablonu jest wartością łańcuchową definiującą żądany szablon strony nowej strony. To działa tylko dla stron. Format będzie; ’ nazwa_pliku.php”.
PostCreator(
"Alex 'S Post",
strona",
"Siła jest silna z tym...",
array (1, 2) ,
'fullwidth_page.php"
);
Numer ID autora jest liczbą całkowitą ID autora.
PostCreator(
"Alex 'S Post",
"strona",
"Siła jest silna z tym...",
array (1, 2) ,
'fullwidth_page.php",
'1'
);
Status postu pozwala na zdefiniowanie stanu utworzonego postu / strony. Domyślnie jest to 'opublikowane’.
Dostępne opcje; [„wersja robocza” | „Opublikuj” | „oczekujące” | „przyszłe” | „prywatne” | Niestandardowy status zarejestrowany ]
PostCreator(
"Alex 'S Post",
"strona",
"Siła jest silna z tym...",
array (1, 2) ,
'fullwidth_page.php",
'1',
"publish"
);
Wrapping Up
WordPress jest wyjątkowo potężnym narzędziem,ale z pewnością może być niesforny. Mam nadzieję, że ten prosty fragment okaże się przydatny, być może nauczysz się czegoś lub dwóch po drodze. Stay tuned na następny, gdzie mam zamiar przekonwertować to, co zrobiliśmy już w tym artykule do klasy PHP, dodając więcej funkcjonalności i stabilności. Aby uzyskać podgląd, sprawdź kod na Github: PostController
Jeśli masz jakieś pytania, po prostu zapytaj w sekcji komentarzy poniżej.