Поддержка Разное Ищу коллегу для доработки кода

  • Решено suspended

    (@wikicms)


    Делаю аналог плагина wp-dtree (оставить работу только с категориями или с таксономиями), требуется некоторые возможности, коих там нет и не предвидится, написал рабочий, но скорее всего не совсем удачный код, сейчас упор встал на его облегчение, банально, требуется реализовать кеширование результатов работы скрипта, в чем я не сильно разбираюсь.
    Подробнее о заготовке:
    Информация о скрипте (сам скрипт и пример использования)
    То, что написал я.
    Делаю через functions.php
    Если появятся вопросы, отвечу, так как писал сам с нуля.
    Буду рад любым подсказкам, сниппетам и просто моральной поддержке 🙂

Просмотр 7 ответов — с 1 по 7 (всего 7)
  • Автор suspended

    (@wikicms)

    Странно, но такое решение

    if ( false === ( $wikiwp_output = get_transient( 'wikiwp_output' ) ) ) {
    		$wikiwp_output = <<<OUTPUT
    Bla Bla
    OUTPUT;
    		set_transient( 'wikiwp_output', $wikiwp_output );
    	}
    	echo $wikiwp_output;

    не приносит видимого результата, хотя в БД запись имеется, как уточнить, что она реально берется из БД, а не генерируется заново?
    ..или я пытаюсь не в том месте кешировать?

    Автор suspended

    (@wikicms)

    Вот второй вариант работает совсем и совсем неплохо. Отчего так, я не понимаю… Остановлюсь на этом варианте.

    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;
    }

    Автор suspended

    (@wikicms)

    И далее, вешаем на события связанные с созданием/обновлением/модификацией чего-либо, чтобы обновить кеш, так как время истечения для него не установлено.

    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. Ссылку сейчас не скину, — не помню.

    Автор suspended

    (@wikicms)

    Да я хотел с кем-нибудь на пару плагин сообразить.. Сразу для себя и заодно в репозиторий выложить.. Просто одному трудновато, вдвоем думаю, повеселей будет, да продуктивнее. Форум, сами знаете, не то место, где помогут или подскажут сразу 🙂
    Если отвлекаться не буду, то к концу месяца напишу. 🙂 А насчет скриптов, я их целую коллекцию собрал, девать некуда :))
    Кстати, весь код, который на пастебине, он рабочий, работает корректно + кеширование работает. Переделать только на таксономии, да в админку настройки вывести.

    Автор suspended

    (@wikicms)

    После тщательного (??) :)) тестирования обнаружил несколько ошибок, переписал 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">';

Просмотр 7 ответов — с 1 по 7 (всего 7)
  • Тема «Ищу коллегу для доработки кода» закрыта для новых ответов.