• Решено XoD

    (@xod)


    Добрый день. Подскажите пожалуйста или хотя бы направьте, в какую сторону копать: у меня в WP имеется две принципиально разные по содержанию и назначению категории, в каждой из которых нужен вывод архива (wp_get_archives). Как отфильтровать результаты, возвращаемые функцией так, чтоб она давала архивы постов, относящихся только к определенной родительской категории?

    Вопрос также относится к функции wp_get_recent_posts

Просмотр 2 ответов — с 1 по 2 (всего 2)
  • Попробывать что-то вроде такого можно:

    function filter_where($where = '') {
    
                $where .= "  "; //тут дописываете SQL запрос что-то вроде -  AND category = 1 // запрос как дописать спросите у кого-то еще
                return $where;
            }
    
            add_filter('getarchives_where', 'filter_where');
    
    wp_get_archives()
    
    remove_filter('getarchives_where', 'filter_where');

    Тончый запрос, думаю, вам кто-то подскажет на этом форуме.

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Понравилась задумка, воплотил 🙂

    Этот фрагмент нужно добавить в functions.php активной темы:

    function filter_where($where, $args) {
    	if ( !empty($args['cat']) )
    		$where .= " AND wp_term_taxonomy.taxonomy = 'category' AND term_id = {$args['cat']}";
    	return $where;
    }
    add_filter('getarchives_where', 'filter_where', 10, 2);
    
    function filter_join($join, $args) {
    	global $wpdb;
    	if ( !empty($args['cat']) )
    		$join .= " LEFT JOIN {$wpdb->term_relationships} ON {$wpdb->posts}.ID = {$wpdb->term_relationships}.object_id" .
    			" LEFT JOIN {$wpdb->term_taxonomy} ON {$wpdb->term_relationships}.term_taxonomy_id = {$wpdb->term_taxonomy}.term_taxonomy_id";
    	return $join;
    }
    add_filter('getarchives_join', 'filter_join', 10, 2);

    Затем можно вызывать архивы в шаблоне так:

    wp_get_archives('cat=1');
    ...
    wp_get_archives('cat=2');

Просмотр 2 ответов — с 1 по 2 (всего 2)
  • Тема «вопрос про wp_get_archives» закрыта для новых ответов.