cris
  • 0
Новичок

Wp_dropdown_categories по дате?

  • 0

Есть ли способ указать период времени для wp_dropdown_categories или wp_list_categories или чего-то еще…? Я хочу создать страницу архива, чтобы, если вы находитесь в архиве 2010 года, вы видели только те категории, которые использовались в 2010 году.

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

Спасибо за любой ответ!

с уважением,

Крис

Share
  1. У меня есть причудливая функция, которую я сделал именно для этого:

    <?php
    /* Create taxomony term list of posts based on given year 
    *
    * @param $year - (int) 4 digits - the year to return the list of. required
    *
    * @param $taxonomy - (string) the taxonomy name of which the retreve the terms. required
    * 
    * @param $echo_out - (boolean) true - to echo false to return default false.
    * 
    * @param $type - (array) of args that tels the function what to get.
    *
    * examples: 
    select dropdownlist:
    'type' => 'select', //(string)
    'name' => 'cat', //(string) name of the select dropdown.
    'js' => ture // (boolean) wheter or not to pring out onchange javascript redirect function.
    
    list:
    'type' => 'list', //(string)
    'before_list' => '<ul>', //(string) html tag (<ul>,<div> you can add classes here).
    'after_list' => '</ul>', //(string) html tag (</ul>,</div>)
    'before_link' => '<li>', //(string) html tag (<li>,<div>,<span> you can add classes here).
    'after_link' => '</li>' //(string) html tag (</li>,</div>,</span>,<br/>).
    
    return array:
    'type' => 'return-list', //(string)
    'return' => 'ID' // (string) what to return (accepts ID or name).
    
    
    
    */
    function yearly_taxonomy_list($year,$type, $taxonomy,$echo_out = false){
    
        $args = array(
            'year' => $year,
            'posts_per_page' => -1
        );
        $the_query = new WP_Query( $args );
        $cats = array();
        while ($the_query->have_posts()){
            $the_query->the_post();
            $curent_cats = wp_get_object_terms( $post->ID, $taxonomy);
            foreach ($curent_cats as $c){
                if (!in_array($c,$cats)){
                    $cats[] = $c;
                }
            }
        }
        //dropdown
        if (isset($type['type']) && $type['type'] =='select'){
            $out = '<select name="'.$type['name'].'" id="'.$type['name'].'" >';
            foreach ($cats as $cd){
                $out .= '<option value='.get_term_link( $cd->term_id, $taxonomy ).'">'.$cd->name.'</option>';
            }
            $out .= '</select>';
    
            if($type['js']){
                $js = '<script type="text/javascript">
                var dropdown = document.getElementById("'.$name.'");
                function onCatChange() {
                    if ( dropdown.options[dropdown.selectedIndex].value > 0 ) {
                        location.href = dropdown.options[dropdown.selectedIndex].value;
                    }
                }
                dropdown.onchange = onCatChange;
                </script>';
                $out .=  $js;
            }
        }elseif (isset($type['type']) && $type['type'] =='list'){
            $out = $type['before_list'];
            foreach ($cats as $cd){
                $out .= $type['before_link'].'<a href="'.get_term_link( $cd->term_id, $taxonomy ).'">'.$cd->name.'</a>'.$type['after_link'];
            }
            $out .= $type['after_list'];
        }
        //return array
        elseif (isset($type['type']) && $type['type'] =='return-list'){
            //array of  IDS
            if ($type['return'] =='ID'){
                foreach ($cats as $cd){
                    $out[] = $cd->term_id;
                }
            }
            //array of  names
            if ($type['return'] =='name'){
                foreach ($cats as $cd){
                    $out[] = $cd->name;
                }
            }
            return $out;
        }
        else{
            $out = 'something went worng';
        }
        if($echo_out){
            echo $out;
        }else{
            return $out;
        }
    }
    ?>
    

    Применение:

    <?php
    // category dropdown with JavaScript OnChange redirect
    $type=array('type' => 'select', 'name' => 'cat','js' => ture );
    yearly_taxonomy_list(2010,$type, 'category' ,true);
    
    //unordered list of categories
    $type=array(
    'type' => 'list', 
    'before_list' => '<ul class="yearly-cats">', 
    'after_list' => '</ul>', 
    'before_link' => '<li>',
    'after_link' => '</li>');
    yearly_taxonomy_list(2010,$type, 'category' ,true);
    
    //return array ids of categories 
    $type=array('type' => 'return-list', 'return' => 'ID');
    $cat_ids = yearly_taxonomy_list(2010,$type, 'category' ,true);
    ?>
    
    • 0

Оставить ответ

You must login to add an answer.