Uznałem za potrzebne usunięcie niektórych stron z listingu w sidebarze. Jako, że jestem leniwy, to nie chciało mi się poszukać, czy ktoś już nie zrobił plugina do tego… wymagałoby to myślenia, a dziś wybitnie nie mam do tego głowy ;) Więc jako że PHP w którym jest napisane WP, które znam dosć dobrze, i zazwyczaj nie muszę zbyt dużo przy nim myśleć (odnośnie takich drobiazgów), to sobie poprawiłem WordPressa ;)
Włączanie i wyłączanie tego fiuczera jest dość proste - zmiana wywołania funkcji wp_list_pages(). Jej argumentem jest string w formacie takim jak URLe (a=1&b=2&c=3) więc teraz wywołanie wp_list_pages() wygląda tak:
wp_list_pages('hidden=0')
(no, ciut inaczej w moim wypadku, ale to nie ma znaczenia…).
Zmodyfikowałem zatem funkcję get_pages() (pośrednio wywoływaną przez wp_list_pages()), a diff tej zmiany wygląda tak:
--- template-functions-post.php.org 2005-12-06 19:32:17.837970264 +0100
+++ template-functions-post.php 2005-12-06 19:32:53.698518632 +0100
@@ -277,6 +277,7 @@
if (!isset($r['child_of'])) $r['child_of'] = 0;
if (!isset($r['sort_column'])) $r['sort_column'] = 'post_title';
if (!isset($r['sort_order'])) $r['sort_order'] = 'ASC';
+ if (!isset($r['hidden'])) $r['hidden'] = 1;
$exclusions = '';
if (!empty($r['exclude'])) {
@@ -297,6 +298,19 @@
if ( empty($pages) )
return array();
+ if (!$r['hidden'])
+ {
+ while (list($key,$val)=each($pages))
+ {
+ $id = $val->ID;
+ $hide = get_post_meta($id, 'hide', true);
+ if ('' != $hide)
+ {
+ unset($pages[$key]);
+ }
+ }
+ }
+
// Update cache.
update_page_cache($pages);
Teraz wystarczy jako Custom Field wstawić pole hide o wartości 1 (czy jakiejkolwiek innej), żeby dana strona nie była listowana w sidebarze ;)
Teoretycznie dobrze by było to zrobic jako plugin WP, ale już wspominałem, że nie chce mi się dziś myśleć. Poza tym łatwo to wyłączyć. I mam w planach rezygnację z WP ;) I jeszcze trochę wymówek bym znalazł jak by trzeba było ;)
A Ty? Co o tym myślisz?