8

現在、これを使用してすべてのカテゴリをリストしています。

<?php 
    $args = array (
    'menu' => 'secondary-navigation',
    'sort_column' => 'menu_order',
    'container' => 'false', 
    'title_li' => 0,
    'hide_empty' => 0
    );
    wp_list_categories($args);
?>

これにより、階層内のすべてのカテゴリが単純にリストされ、各アイテムが固定されます。

私のカテゴリは実際には次のように設定されています。

Parent
    -> Child
        -> Grandchild
            -> Great Grandchild

私の問題は、ひ孫だけにアンカーを持たせたいということです。親、子、または孫にアンカーを持たせたくありません。

任意の提案をいただければ幸いです。

4

3 に答える 3

1

コメントで Lleo Holmes が述べたように、最善の方法は、カスタムWalker クラスを作成してこの機能を実装することです。私はそれを突き刺し、次のことを思いつきました:

class Depth_Category_Walker extends Walker_Category {
    private $allowed_depths;

    function __construct( $depths_to_link = array() ) {
        $this->allowed_depths = !is_array($depths_to_link) ? array($depths_to_link) : $depths_to_link;
    }

    function start_el( &$output, $category, $current_depth = 0, $args = array(), $id = 0 ) {
        extract($args);
        if( in_array( $current_depth, $this->allowed_depths ) ) {
            parent::start_el( $output, $category, $current_depth, $args, $id );
        } else {
            $cat_name = esc_attr( $category->name );
            $cat_name = apply_filters( 'list_cats', $cat_name, $category );
            if ( !empty($show_count) )
                $cat_name .= ' (' . intval($category->count) . ')';

            if ( 'list' == $args['style'] ) {
                $output .= "\t<li";
                $class = 'cat-item cat-item-' . $category->term_id;
                if ( !empty($current_category) ) {
                    $_current_category = get_term( $current_category, $category->taxonomy );
                    if ( $category->term_id == $current_category )
                        $class .=  ' current-cat';
                    elseif ( $category->term_id == $_current_category->parent )
                        $class .=  ' current-cat-parent';
                }
                $output .=  ' class="' . $class . '"';
                $output .= ">$cat_name\n";
            } else {
                $output .= "\t$cat_name<br />\n";
            }
        }
    }
}

Walker_Categoryこれによりクラスが拡張parent::start_el()され、リンクが適切な深さにある場合に呼び出してリンクを生成できるようになります。コンストラクターは、リンクを表示するレベルを含む深さの配列を受け入れます。その配列の外にある深さは、プレーンテキストとしてレンダリングされます。elseコードは から取られたものWalker_Category::start_elであるため、基本クラスが変更された場合、将来のリリースでこれが機能しなくなる可能性があることに注意してください。

上記のクラスは、次のwp_list_categoriesように呼び出して使用できます。

<?php
   $args = array(
       'orderby' => 'menu_order',
       'title_li' => 0,
       'hide_empty' => 0,
       'walker' => new Depth_Category_Walker(2)
   );
?>
<ul>
   <?php wp_list_categories( $args ); ?>
</ul>
于 2013-03-29T14:19:45.197 に答える
1

PHPコードをまったく変更せずに、純粋なCSSを使用してリンクを無効にすることができます. 次のコードを確認してください。マウス カーソルが変更され、リンク機能が無効になり、下線スタイルが非表示になります。

.cat-item a, .cat-item .cat-item .cat-item .cat-item a {
      cursor: default;
      pointer-events: none;
      text-decoration: none;
}
.cat-item .cat-item .cat-item a {
      cursor: pointer;
      pointer-events: auto;
      text-decoration: underline;
      /* also add here any special style for grandchildren categories */
}

孫のカテゴリだけが固定されているように見えます。

それがあなたの質問に答えることを願っています

于 2013-02-27T00:16:18.087 に答える
0

このコードを使用してください

$categories = get_categories(array(
        'child_of' => 9,
        'hide_empty' => false
    ));
foreach($categories as $cat){
    echo $cat->name;
    echo '<br />';
}

このコードは、2 レベル カテゴリに対してのみテストされます。

9 を「孫」カテゴリ ID などのカテゴリ ID に置き換えます。このコードはテストされていませんが、これは動作します

これがあなたのお役に立てば幸いです

于 2013-01-02T05:55:09.973 に答える