Swojego czasu na tym blogu były wpisy z serii poradnik webmastera w którym większość wpisów oznaczałem polem, wykorzystującym dodatkowe pola wpisu pokazując „poziom” zaawansowania danego tematu. Postów powstało na tyle dużo, że chciałbym je móc filtrować w panelu administratora, wyświetlając te o określonym poziomie.
Poniższy kod, który można wkleić do pliku functions.php w używanym przez nas motywie.
Niezłym żartem jest fakt, że poniższy kod został dostosowany do wersji 3.1 w której zmienił się sposób wybierania custom field’ów z pary parametrów „meta_key” i „meta_value” na array „meta_query„. W załączniku jest też wersja działająca ze starszym wordpress’em. A zmiana jest bardzo dobra, bo wcześniej można było filtrować w WP Query tylko po jednym polu meta i to tylko dokładne dopasowanie. Aktualnie można wiele oraz co lepsze, można dać różne typy dopasowania. Dla zainteresowanych i zaawansowanych opis parametru meta_query na codex.wordpress.org.
W użytym przykładzie zmiana definicji IWORKS_FIELD_NAME spowoduje wybieranie innego pola o podanej nazwie.
<?php /** * filtrowanie w panelu listy postów */ define("IWORKS_FIELD_NAME", "level"); add_filter( "parse_query", "iworks_level_filter" ); add_action( "restrict_manage_posts", "iworks_level_restrict_manage_posts" ); function iworks_level_filter( $query ) { global $pagenow; if ( is_admin()&& $pagenow=="edit.php" && isset($_GET[IWORKS_FIELD_NAME]) && $_GET[IWORKS_FIELD_NAME] != "") { $query->query_vars["meta_query"] = array ( array ( "key" => IWORKS_FIELD_NAME, "value" => $_GET[IWORKS_FIELD_NAME], "compare" => "IN", "type" => "DECIMAL" ) ); } } function iworks_level_restrict_manage_posts() { global $wpdb; $sql = "SELECT DISTINCT meta_value FROM ".$wpdb->postmeta." WHERE meta_key = \"".IWORKS_FIELD_NAME."\" ORDER BY 1"; $fields = $wpdb->;get_results($sql, ARRAY_N); $current = isset($_GET[IWORKS_FIELD_NAME])? $_GET[IWORKS_FIELD_NAME]:""; foreach ($fields as $field) { printf ( "%s", $field[0], $field[0] == $current? " selected="selected"":"", $field[0] ); } ?> |
Paczka do pobrania zawiera dwa pliki, jeden działa dla wersji 3.1 drugi dla 3.0.
[zip href="http://iworks.pl/wp-content/blogs.dir/1/files/2011/02/functions-iworks-posts-filter.zip"]functions-iworks-posts-filter.zip[/zip]