it-swarm-ja.com

最上位の親分類法ID

商品アーカイブページの上部に商品カテゴリのリストを表示しようとしています。この規則では、リストに常に最上位の直接の子が表示されるようにします。

WPAにはいくつかの答えがありますが(私の最低限のスキルで)実装しようとしていますが、何かが足りません。

これがクエリです:

        <?php  
    $taxonomy     = 'product_cat';
    $orderby      = 'name';
    $order        = 'DESC';
    $show_count   = 0;      // 1 for yes, 0 for no
    $pad_counts   = 0;      // 1 for yes, 0 for no
    $hierarchical = 1;      // 1 for yes, 0 for no
    $title        = '';
    $empty        = 0;

   // So now I need to get the top parent id in a variable. I tried these 4 options

     /*
     // option 1
     $queried_object = get_queried_object();
    $term_id = $queried_object->term_id;


    // option 2
    $thisCat = get_category( get_query_var( 'cat' ) ); 
    while ( intval($thisCat->parent) > 0 ) {
      $thisCat = get_category ( $thisCat->parent );
     }
     $term_id = $thisCat->term_id

    //option 3
    $parent  = get_term_by( 'id', $term_id, $taxonomy);
    while ($parent->parent != 0){
        $parent  = get_term_by( 'id', $parent->parent, $taxonomy);
    }


    //option 4
    while ($catid) {
      $cat = get_category($catid); // get the object for the catid
      $catid = $cat->category_parent; // assign parent ID (if exists) to $catid
      // the while loop will continue whilst there is a $catid
      // when there is no longer a parent $catid will be NULL so we can assign our $catParent
      $catParent = $cat->cat_ID;
     }
    */

            // Testing if I have the correct value
    echo 'The returned variable is:'; print_r($term_id);



    $args2 = array(
      'taxonomy'     => $taxonomy,
      'child_of'     => $term_id,
      'orderby'      => $orderby,
      'order'        => $order,
      'show_count'   => $show_count,
      'pad_counts'   => $pad_counts,
      'hierarchical' => $hierarchical,
      'title_li'     => $title,
      'hide_empty'   => $empty
    );

    $sub_cats = get_categories( $args2 );

    $args = array(
        //'type'          => 'post',
        'orderby'       => 'term_group',
        'hide_empty'    => 0,
        'hierarchical'  => 0,
        'parent'        => 0,
        'taxonomy'      => 'product_cat'
    );
    $test = get_categories( $args ); 
    //print_r($test);

    $cat_id = get_query_var('cat');
    echo $cat_id;

    if (!empty($sub_cats)) { 

    echo '<ul class="categories">'; 

    foreach($sub_cats as $sub_category) {

        //echo 'de variabele sub_category'; print_r($sub_category);

        if ($sub_cats->$sub_category == 0) {
            $thumbnail_id  = get_woocommerce_term_meta( $sub_category->term_id, 'thumbnail_id', true );
            $image = wp_get_attachment_url( $thumbnail_id );
            $name = $sub_category->name;
            $slug = $sub_category->slug;

            echo '<li class="cat-item '.$slug.'"><a href="'. get_term_link($sub_category->slug, 'product_cat') .'"><img src="'.$image.'" " /><span class="txt">'.$name.'</span></a></li>';

            }
        }
        echo '<li class="cat-item search">';
        get_product_search_form();
        echo '</li>';

    echo '</ul>';

     } //endif !empty ?>

ありがとうございます。じゅり

1
Juri

カスタム投稿タイプの投稿を取得するには、一般的にpost_typeをクエリする必要があります。カテゴリのみが必要な場合は、投稿タイプ全体ではなくカテゴリをプルするだけで済みます。

<?php query_posts(array( 'post_type' => 'CustomPostType' )); ?>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

 <?php the_category(', '); ?>

<?php endwhile; else: ?>
<p>Sorry, no matches found.</p>
<?php endif; ?>

あるいは、 get_terms() を使うこともできますか?
簡単な例:

$terms = get_terms('CustomPostType');
foreach ( $terms as $term ) {
   echo $term->name.'<br />';
}

そのアーカイブページに何か他のものをリストしていますか。たとえば、同じ投稿タイプの投稿(またはその他の情報)を一覧表示する場合は、それを組み合わせることができます。


編集:私は台本の中のコメントを読み終えたことをお詫び申し上げます。あなただけが残りの人たちに助けを必要としていると思った。単にterm idを取得するには、get_terms()を使用することができます(上記参照)。そして、次のパラメータを見てください。

 orderby (string)
    id
    count
    name - Default
    slug
    term_group
    none 

 order (string)
    ASC - Default
    DESC 

number (integer) 
    The maximum number of terms to return. Default is to return them all. 

fields (string)
    all - returns an array of term objects - Default
    ids - returns an array of integers
    names - returns an array of strings
    count - (3.2+) returns the number of terms found
    id=>parent - returns an associative array where the key is the term id and the value is the parent term id if present or 0 

他のパラメータを含めないと、次のようになります。

$CustomPostType_ids = get_terms( 'CustomPostType', array(
    'orderby'    => 'id',
    'order'      => 'ASC',
    'number'     => 1,
    'fields'     => 'ids'
) );

すべての値を返してからterm_idを引き出すこともできます。

2
MeRuud