首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在WordPress和主题部件类别选择下拉列表中显示自定义毒理学

在WordPress和主题部件类别选择下拉列表中显示自定义毒理学
EN

WordPress Development用户
提问于 2020-03-30 21:34:27
回答 1查看 210关注 0票数 1

我需要帮助如何使“视频”CPT出现在WordPress本机小部件和主题Widget的类别下拉选项列表中的自定义目录或类别。我得到的唯一类别是默认的帖子。

任何帮助都会很感激的。不太熟悉php。

更多细节。

主题是: CoverNews

  1. 我的定制邮件类型
  1. 现在,我需要帮助如何修改Widget的代码,以便在下拉列表中包含自定义的post类型类别。

这是主题小部件代码:

代码语言:javascript
复制
    {
    /**
     * Sets up a new widget instance.
     *
     * @since 1.0.0
     */
    function __construct()
    {
        $this->text_fields = array('covernews-posts-slider-title');
        $this->select_fields = array('covernews-select-category');

        $widget_ops = array(
            'classname' => 'covernews_posts_slider_widget',
            'description' => __('Displays posts slider from selected category.', 'covernews'),
            'customize_selective_refresh' => true,
        );

        parent::__construct('covernews_posts_slider', __('CoverNews Posts Slider', 'covernews'), $widget_ops);
    }

    /**
     * Front-end display of widget.
     *
     * @see WP_Widget::widget()
     *
     * @param array $args Widget arguments.
     * @param array $instance Saved values from database.
     */

    public function widget($args, $instance)
    {
        $instance = parent::covernews_sanitize_data($instance, $instance);


        /** This filter is documented in wp-includes/default-widgets.php */
        $title = apply_filters('widget_title', $instance['covernews-posts-slider-title'], $instance, $this->id_base);
        $category = isset($instance['covernews-select-category']) ? $instance['covernews-select-category'] : 0;
        $show_excerpt = 'true';
        $excerpt_length = '25';
        $number_of_posts = 5;

        // open the widget container
        echo $args['before_widget'];
        ?>
        
        
            
                
                    
                        
                        
                
            
        
    
        
        
            have_posts()) :
                while ($all_posts->have_posts()) : $all_posts->the_post();
                    if (has_post_thumbnail()) {
                        $thumb = wp_get_attachment_image_src(get_post_thumbnail_id(get_the_ID()), 'covernews-slider-full');
                        $url = $thumb['0'];
                    } else {
                        $url = '';
                    }

                    global $post;
                    ?>
                    

                        
                            ID); ?>
                            

                                

                                    
                                
                                
                                    
                                

                                
                                    
                                
                                
                                    
                                        
                                             0) : ?>
                                                
                                            
                                        
                                    
                                
                            
                        
                    
                    
        

        form_instance = $instance;

        $categories = covernews_get_terms();
        if (isset($categories) && !empty($categories)) {
            // generate the text input for the title of the widget. Note that the first parameter matches text_fields array entry
            echo parent::covernews_generate_text_input('covernews-posts-slider-title', __('Title', 'covernews'), 'Posts Slider');
            echo parent::covernews_generate_select_options('covernews-select-category', __('Select category', 'covernews'), $categories);

        }
    }
}

endif;

EN

回答 1

WordPress Development用户

回答已采纳

发布于 2020-04-20 17:24:48

我看了主题的代码。函数covernew_get_terms()函数接受一个taxonomy参数,查看源代码:

代码语言:javascript
复制
/**
 * Returns all categories.
 *
 * @since CoverNews 1.0.0
 */
if (!function_exists('covernews_get_terms')):
function covernews_get_terms( $category_id = 0, $taxonomy='category', $default='' ){
   #... rest of the code

}
endif;

默认情况下,所使用的分类法是category,因此您必须通过以这种方式调用该函数来手动指定一个您希望包含的分类数组:

代码语言:javascript
复制
public function form($instance)
{
    $this->form_instance = $instance;

    $categories = covernews_get_terms(0, array('category', 'custom_taxonomy1'));
    #... rest of the code

    }
}

由于您使用的是自定义的post类型,所以还必须修改WP_Query,因为默认情况下它只是检索类型'post‘。

代码语言:javascript
复制
// widget-posts-carousel.php
// $all_posts = covernews_get_posts($number_of_posts, $category); #line 61. Replace with:

$all_posts = new WP_Query(array(
    'post_type' => array('post', 'cptsample'), # set your CPT here.
    'posts_per_page' => absint($number_of_posts),            
    'post_status' => 'publish',
    'orderby' => 'date',
    'order' => 'DESC',
    'tax_query' =>array(
        array(
            'taxonomy' => get_term(intval($category))->taxonomy,
            'field' => 'term_id',
            'terms' => $category
        )
    ) 
));
票数 0
EN
页面原文内容由WordPress Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://wordpress.stackexchange.com/questions/362821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档