Czy masz jakiś sposób na zapisanie tylko postów w postach? Sposób, w jaki mój functions.php jest kodowany, polega na sczepianiu wielu niestandardowych pól do zwykłych postów i stron, które ich nie potrzebują/używają.Jaką akcję można zastosować w WordPressie, która uruchamia się po zapisaniu lub zaktualizowaniu niestandardowego wpisu?
Odpowiedz
Updated od 3.7.0 - rekwizyty @Baptiste dla przypomnienia
3.7.0 wprowadziła "save_post_{$post->post_type}
" hak, który zostanie wywołany przez rodzaj postu. Pozwala to dodać akcję specyficzną dla niestandardowego typu wpisu (lub "strony" lub "postu" itp.). W ten sposób zaoszczędzisz jedną linię poniżej.
Zaakceptowana metoda polega na dodaniu akcji pod numer save_post_{post-type}
(w powyższym przykładzie należy zastąpić wkręt w rodzaju postu na {post-type}
). Istnieje szereg kontroli można/prawdopodobnie należy jeszcze zrobić w ciągu zwrotnego twojej akcji, w której dokument w poniższym przykładzie:
z the Codex:
/* Register a hook to fire only when the "my-cpt-slug" post type is saved */
add_action('save_post_my-cpt-slug', 'myplugin_save_postdata', 10, 3);
/* When a specific post type's post is saved, saves our custom data
* @param int $post_ID Post ID.
* @param WP_Post $post Post object.
* @param bool $update Whether this is an existing post being updated or not.
*/
function myplugin_save_postdata($post_id, $post, $update) {
// verify if this is an auto save routine.
// If it is our form has not been submitted, so we dont want to do anything
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE)
return;
// verify this came from the our screen and with proper authorization,
// because save_post can be triggered at other times
if (!wp_verify_nonce($_POST['myplugin_noncename'], plugin_basename(__FILE__)))
return;
// Check permissions
if ('page' == $post->post_type)
{
if (!current_user_can('edit_page', $post_id))
return;
}
else
{
if (!current_user_can('edit_post', $post_id))
return;
}
// OK, we're authenticated: we need to find and save the data
$mydata = $_POST['myplugin_new_field'];
// Do something with $mydata
// probably using add_post_meta(), update_post_meta(), or
// a custom table (see Further Reading section below)
return $mydata;
}
Jeśli rejestracji wielu niestandardowe typy post, a ty chciałbyś skonsolidować swoją funkcję save_post w jedną funkcję, a następnie podłączyć się do ogólnej akcji save_post
. Pamiętaj jednak, aby przeprowadzić kontrolę typu postu w ramach funkcji, jeśli istnieją różnice w sposobie zapisywania danych przez te typy postów.
np: if ('my-cpt-1' == $post->post_type){ // handle my-cpt-1 specific stuff here ...
Ile razy można dodać 'add_action ('save_post', 'myplugin_save_postdata');'? Czy powinieneś dodać nowy dla każdego nowego metabolusa (oczywiście zmieniając nonces i 'myplugin_save_postdata' na jakąkolwiek nazwę twojej funkcji, za każdym razem)? – Amanda
@Amanda: Inne niż (nieznaczne) działanie, podejście, które sugerujesz, zadziała, i prawdopodobnie będzie łatwiejsze do przeanalizowania dla ludzi, ponieważ możesz skojarzyć operację "Zapisz" z tym samym blokiem kodu, w którym definiujesz metaboksu, zachować porządek i porządek. Alternatywnym podejściem jest zdefiniowanie pojedynczego wywołania zwrotnego funkcji "Zapisz" dla całego motywu lub wtyczki, może nawet hermetyzowane w obrębie własnej klasy lub co najmniej osobnego pliku, a następnie użycie instrukcji switch do zdefiniowania poszczególnych zapisów metabox. Kwestia stylu kodowania i osobistych preferencji. –
takie podejście nie jest już konieczne od wersji 3.7, sprawdź odpowiedź pod spodem. – Baptiste
WordPress 3.7 wprowadzono nowy sposób obsługi to z hakiem save_post_{$post_type}
.
Załóżmy, że Twój niestandardowy typ wpisu to "katalog członków". Teraz można uruchomić save_post na tego typu postu tylko za pomocą czegoś takiego:
function my_custom_save_post($post_id) {
// do stuff here
}
add_action('save_post_member-directory', 'my_custom_save_post');
Awesome, gdzie to znalazłeś? Udało mi się to samemu zrozumieć eksperymentując, ale nie widziałem nic na ten temat w oficjalnej dokumentacji: http: //codex.wordpress.org/Plugin_API/Action_Reference/save_post Tylko zgadliście, aby to zrobić po obejrzeniu nowej akcji add_meta_boxes {post-type} (patrz: http://codex.wordpress.org/Plugin_API/Action_Reference/add_meta_boxes). – hallodom
Śledziłem rozwój 3.7 i zauważyłem to. Zatwierdzenie, w którym zostało dodane, jest [tutaj] (https://core.trac.wordpress.org/changeset/25050). Nie sądzę, że został udokumentowany w Kodeksie gdziekolwiek. Przynajmniej nie był to ostatni raz, kiedy patrzyłem. – mindctrl
Chociaż masz rację co do nowego haka akcji, ten przykład wprowadza w błąd, ponieważ brakuje ci wielu możliwości i sprawdzeń kontekstu, które naprawdę powinny zostać uwzględnione. Zobacz http://stackoverflow.com/a/6270232/467386 dla bardziej kompletnego rozwiązania. –
- 1. Jak wykonać akcję w drupalu po każdym zapisaniu węzła?
- 2. Sposób wykonywania skryptu po zaktualizowaniu elementu niestandardowego
- 3. Jaką kolejność zdarzeń uruchamia się po kliknięciu przycisku opcji?
- 4. Dlaczego usługa zatrzymuje się po zaktualizowaniu RPM
- 5. Jaką liniową algebrę można zastosować do OpenGL w Haskell?
- 6. Jaką metodę można zastosować do zwiększania liczby liter?
- 7. Elementy znikają po zapisaniu
- 8. Java EE Security - Jaką metodę zastosować?
- 9. Czy można przywrócić stan centralki zarządzającej po zaktualizowaniu aplikacji?
- 10. ImageButton nie uruchamia ponownie wpisu na IE10
- 11. przejście po zapisaniu modelu danych embera
- 12. Ikona aplikacji nie zmienia się po zaktualizowaniu aplikacji
- 13. Używanie requireJS w WordPressie
- 14. after_create wywołany po nieudanym zapisaniu?
- 15. Widoki AngularJS w Wordpressie
- 16. org.apache.xmlbeans.impl.values.XmlValueDisconnectedException po dwukrotnym zapisaniu skoroszytu
- 17. Jak utworzyć subkonkurencyjną subskrypcję, która uruchamia się tylko raz?
- 18. Jak przetestować metodę, która po prostu uruchamia wątek z jUnit?
- 19. Dodawanie kodu do wtyczki, która uruchamia się tylko po raz pierwszy?
- 20. Android Studio nie uruchamia się po instalacji
- 21. Przerysuj UITableView po zaktualizowaniu danych async
- 22. Dlaczego usługa nie uruchamia się po BOOT_COMPLETED?
- 23. X nie uruchamia się po aktualizacji cygwin
- 24. Co dokładnie dzieje się po zapisaniu modelu kręgosłupa?
- 25. Django: dostosowywanie wiadomości po pomyślnym zapisaniu formularza
- 26. W Swift, didSet nie uruchamia się po wywołaniu z init()
- 27. Robolectric 3.0, nie udało się przetestować funkcję, która uruchamia HandlerThread
- 28. Jaką flagę należy zastosować, aby wymusić dobry styl C++ 11?
- 29. Wyzwalanie makro MS Word po zapisaniu zdarzenia
- 30. Jaką bibliotekę lub oprogramowanie można podpisać i zweryfikować na ślepo?
próbuje zakodować niestandardowych słupki podtrzymujące, każda z własnymi pól niestandardowych, ale oszczędność pola na save_post koliduje z każdym innym rodzajem postu w Wordpress. Czy istnieje zmienna dostępna z akcji save_form, która mówi, jaki typ wpisu jest zapisywany? Czy są zapisywane zdarzenia dotyczące niestandardowych postów? –
Sprawdź moją odpowiedź. – Sandwich