Wordpress: get_categories для пользовательского типа записей, с пользовательскими таксономиями, отфильтрованные по категориям - PullRequest
0 голосов
/ 14 марта 2011

У меня довольно сложная проблема, которая, надеюсь, кто-нибудь здесь поможет мне.У меня есть следующее:

пользовательский тип сообщения «Продукты»

пользовательская таксономия «брендов»

и стандартная таксономия «категории»

Каждый «Продукт» помечен «брендом» и помещен в родительскую и дочернюю категории

. Мне нужно сделать следующее:

На странице archive.php отображаются все «категории», которые имеют«Продукты» в них имеют таксономию «бренда» со значением «чьей-либо страницы» бренда. Это прекрасно работает с приведенной ниже функцией благодаря @ MikeSchinkel

$term = get_query_var('term');
    $brand = get_term_by('slug',$term,'brands'); // This here just to illustrate
    $categories = get_cross_referenced_terms(array(
    'post_type'        => 'Products',
    'taxonomy'         => 'category',
    'related_taxonomy' => 'brands',
    'term_id'          => $brand->term_id
  ));

, который использует следующую функцию:

// query to get categories for a specific tag
function get_cross_referenced_terms($args) {
  global $wpdb;
  $args = wp_parse_args($args,array(
    'post_type'        => 'Products',
    'taxonomy'         => 'category',
    'related_taxonomy' => 'brands',
    'term_id'          => 0,
  ));
  extract($args);
  $sql = <<<SQL
SELECT DISTINCT
  {$wpdb->terms}.*,
  COUNT(*) AS post_count
FROM
  {$wpdb->terms}
  INNER JOIN {$wpdb->term_taxonomy} ON {$wpdb->terms}.term_id={$wpdb->term_taxonomy}.term_id
  INNER JOIN {$wpdb->term_relationships} ON {$wpdb->term_taxonomy}.term_taxonomy_id={$wpdb->term_relationships}.term_taxonomy_id
  INNER JOIN {$wpdb->posts} ON {$wpdb->term_relationships}.object_id={$wpdb->posts}.ID
  INNER JOIN {$wpdb->term_relationships} related_relationship ON {$wpdb->posts}.ID=related_relationship.object_id
  INNER JOIN {$wpdb->term_taxonomy} related_term_taxonomy ON related_relationship.term_taxonomy_id=related_term_taxonomy.term_taxonomy_id
  INNER JOIN {$wpdb->terms} related_terms ON related_term_taxonomy.term_id=related_terms.term_id
WHERE 1=1
  AND related_terms.term_id<>{$wpdb->terms}.term_id
  AND {$wpdb->posts}.post_type='%s'
  AND {$wpdb->term_taxonomy}.taxonomy='%s'
  AND related_term_taxonomy.taxonomy='%s'
  AND related_terms.term_id=%d
  AND {$wpdb->term_taxonomy}.parent=0
GROUP BY
  {$wpdb->terms}.term_id
SQL;
  $sql = $wpdb->prepare($sql,$post_type,$taxonomy,$related_taxonomy,$term_id);
  $terms = $wpdb->get_results($sql);
  return $terms;
}

Отображает все категории для указанной маркии работает на месте.Но теперь мне нужно, чтобы он мог установить 'child_of' для страниц категорий.Поэтому все, что мне нужно добавить (я думаю), это возможность запросить идентификатор категории или указать родителя категории.Что-то вроде:

'child_of' => $parent_category

Я думаю, что это может быть что-то, что я мог бы добавить в запрос к базе данных здесь:

AND {$wpdb->term_taxonomy}.parent=0

Но это немного не в моей лиге!Если бы кто-нибудь мог мне помочь, я был бы очень благодарен!

Спасибо

Дейв

1 Ответ

0 голосов
/ 15 марта 2011

да, вы близко. это может сработать:

AND {$wpdb->term_taxonomy}.parent=[$term_id}

если вы хотите, чтобы только дети марки, которую вы передаете, в противном случае, если вам нужно передать это отдельно, вы можете добавить к аргументам в предоставленной функции

например:

    'term_id'          => 0,
    'parent_id'          => 0,
));

, а затем ниже вы будете использовать эту новую переменную

AND {$wpdb->term_taxonomy}.parent=[$parent_id}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...