WordPress - portálový typ webu rubrika: Programování: PHP
Zdravím všechny, mam drobné pochybnosti. Uvažujme web, který bude rozdělen do sekcí a obsah bude vytvářen registrovanými uživateli. Čili homepage bude nějaký rozcestník. Uživatelé se budou moci registrovat a při registraci si vyberou, do kterých kategorií pak chtějí přispívat. Každá kategorie/sekce bude mít další strukturu, říkejme tomu podkategorie a uživatel při vytváření článku vybere, jaké podkategorie vystihují jeho článek. Potud to je dobré, vede to na custom post typy a custom taxonomy. Ale jde mi o ten rozcestník a to, do jaké struktury vlastně podchytit tu titulku.
Homepage - zobrazí dlaždice, kde budou obory 1,2,3,4. Obor 1 bude mít podobory A, B, C; obor 2 podobory E, F, G, podobor E má další podobory E1. Například. Do jaké struktury tohle uložit? A potom - jako uživatel se zaregistruji k přispívání do oborů 1 a 3. Tedy do 2 a 4 nesmím mít přístup a nesmím vidět ani jeho taxonomie.
Nechce se mi pro každý obor vytvářet custom post type, protože to není dostatečně flexibilní.. Pokud budu chtít přidat další obor, nepůjde to udělat nějak inteligentně. Měl by někdo lepší nápad?
Díky všem za reakce!
Jak píšete, lze s úspěchem využít custom taxonomie (musí samozřejmě být hierarchická).
Pokud uživatel nemá mít k některým termům z taxonomie přístup, je potřeba taxonomii filtrovat. Tipl bych si, že tady poslouží filtr wp_get_object_terms. Kód by mohl vypadat nějak takhle:
// functions.php function _project_filter_object_terms_when_editing_post($terms, $object_ids, $taxonomies, $args) { // Podle toho, které termy uživatel může vybrat, zde redukujte pole $terms // Samozřejmě je uživatelům třeba nedávat capability edit_terms, aby nemohli přidávat nové termy return $terms; } if ( is_admin() ): global $pagenow; if ( $pagenow === "post.php" && $_GET['action'] === "edit" ) { // Taxonomie chceme filtrovat jenom při editování postu (@todo: Chtělo by to ošetřit i Quick Edit) // Pokud chcete uživatele odříznout od termu úplně, pak filtrujte taxonomii vždy, nejen při editaci postu add_filter('wp_get_object_terms', '_project_filter_object_terms_when_editing_post', 10, 4); } endif;
Dále musíte zajistit, aby se nikdy neuložil nepovolený term. Může se totiž stát, že jej uživatel WordPressu přesto nějak podstrčí. K tomu využijete akcí save_post a edit_post:
function _project_check_terms_on_save($post_id, $post) { $terms = $_POST['tax_input']; // Vyfiltrujte všechny termy, které aktuální uživatel nemůže uložit a znovu-uložte wp_set_post_terms(...); } if ( is_admin() ): add_action('save_post', '_project_check_terms_on_save'); add_action('edit_post', '_project_check_terms_on_save'); endif;
Prosím omluvte případné nepřesnosti.
Pro zobrazení všech 3 odpovědí se prosím přihlaste:
Nebo se přihlaste jménem a heslem: