Странно, но такое решение
if ( false === ( $wikiwp_output = get_transient( 'wikiwp_output' ) ) ) {
$wikiwp_output = <<<OUTPUT
Bla Bla
OUTPUT;
set_transient( 'wikiwp_output', $wikiwp_output );
}
echo $wikiwp_output;
не приносит видимого результата, хотя в БД запись имеется, как уточнить, что она реально берется из БД, а не генерируется заново?
..или я пытаюсь не в том месте кешировать?
Вот второй вариант работает совсем и совсем неплохо. Отчего так, я не понимаю… Остановлюсь на этом варианте.
function wikiwp_get_cache_tree() {
if ( false === ( $wikiwp_output_new = get_transient('wikiwp_output_new') ) ) {
$wikiwp_output_new = wikiwp_build_tree(1, 'wordpress');
set_transient( 'wikiwp_output_new', $wikiwp_output_new );
}
echo $wikiwp_output_new;
}
И далее, вешаем на события связанные с созданием/обновлением/модификацией чего-либо, чтобы обновить кеш, так как время истечения для него не установлено.
function wikiwp_update_cache_tree() {
$wikiwp_output_new = wikiwp_build_tree(1, 'wordpress');
set_transient( 'wikiwp_output_new', $wikiwp_output_new );
}
add_action('deleted_post', 'wikiwp_update_cache_tree');
add_action('publish_post', 'wikiwp_update_cache_tree');
add_action('save_post', 'wikiwp_update_cache_tree');
add_action('created_category', 'wikiwp_update_cache_tree');
add_action('edited_category', 'wikiwp_update_cache_tree');
add_action('delete_category', 'wikiwp_update_cache_tree');
add_action('update_option_permalink_structure', 'wikiwp_update_cache_tree');
В БД все записывается несжатым образом. Теперь вопрос, как все сжать?… для сохранения места..
Есть Dagon Design Sitemap Generator в репозитории. Его код можете глянуть, — один фиг тот же вывод содержимого.
+ Где-то в сети был Ajax-пример построения дерева с cookies. Ссылку сейчас не скину, — не помню.
Да я хотел с кем-нибудь на пару плагин сообразить.. Сразу для себя и заодно в репозиторий выложить.. Просто одному трудновато, вдвоем думаю, повеселей будет, да продуктивнее. Форум, сами знаете, не то место, где помогут или подскажут сразу 🙂
Если отвлекаться не буду, то к концу месяца напишу. 🙂 А насчет скриптов, я их целую коллекцию собрал, девать некуда :))
Кстати, весь код, который на пастебине, он рабочий, работает корректно + кеширование работает. Переделать только на таксономии, да в админку настройки вывести.
После тщательного (??) :)) тестирования обнаружил несколько ошибок, переписал http://pastebin.com/rrnwRxXP
Теперь можно строить дерево используя шорткод [tree]
(работает и в текстовом виджете), по-умолчанию построится дерево категории ID=1. Можно варьировать запрос, например:
[tree taxonomy=country cat_id=5 exclude_tree=40 cpt=russia]
выведет дерево с таксономией country начиная с ID=5 и типом постов russia, исключая ветку категорий с ID=40.
Доступные аргументы:
taxonomy, cat_id, exclude_tree, orderby, order, cpt
Использовал функции get_categories() и get_posts()
Если кто заинтересуется, задавайте вопросы, расскажу подробнее.. )
Найти строки 24,52 (ист.):
$current_name = $post->post_name;
и заменить на более верный вариант:
$current_name = $post->post_title;
Чтобы для категорий работало описание (description), если folderLinks: false
, то следует в dtree.js найти такую строку:
str += '<a href="javascript: ' + this.obj + '.o(' + nodeId + ');" class="node">';
и заменить этой:
str += '<a href="javascript: ' + this.obj + '.o(' + nodeId + ');"' + ' title="' + node.title + '"' + ' class="node">';