$ data.find не выполняет поиск по атрибутам напрямую. Что бы работать, это что-то вроде замены
var $filteredData = $data.find('#portfolio-');
с
var $filteredData = $data.find('li[id|="portfolio"]');
Это будет искать во всех ли там, где идентификатор начинается с портфолио
Следующая строка ссылается на LI, а не на тег. Для элемента LI нет класса.
$(this).attr('class') //.split(' ').slice(-1)[0];
при условии, что вы поместили класс в элемент LI, вы можете изменить эту строку и изменить (я не уверен насчет этого):
var $filteredData = $data.find('#portfolio-[data-type=' + filterClass + ']')
до:
var $filteredData = $data.find('li.' + filterClass);
Пожалуйста, посмотрите на
http://jsfiddle.net/bhoover10001/SzjhS/
и посмотрим, является ли это более или менее необходимой вам функциональностью.
A) Вы не поместили класс в элементы LI, по которым щелкают.
<li class="all"><a href="">All</a><span>/</span></li>
<li class="term-4"><a href=""
data-value="term-4" title="View all items filed under Colours">Colours</a> <span>/</span>
</li>
<li class="term-3" >
<a href="" data-value="term-3" title="View all items filed under Fotografie">Fotografie</a> <span>/</span>
</li>
B) data-id является обязательным элементом элемента LI отображаемых вами элементов. Например:
<li id="portfolio-12" class="term-4 visible" data-id="post-12">
C) Класс фильтра должен быть первым классом в каждом из портфелей. Вы неправильно указали класс фильтра:
filterClass = filterClass ? filterClass.split(' ')[0] : '';
D) Ваше условие "ВСЕ" было закодировано неправильно:
if (filterClass == 'all')