在WordPress和主题小工具类别选择下拉列表中显示自定义分类

时间:2020-03-30 作者:Joseph

我需要有关如何在WordPress本机小部件和主题小部件的类别下拉选项列表中为“视频”CPT创建自定义分类或类别的帮助。我得到的唯一类别是默认帖子。

任何帮助都将不胜感激。我对php不太熟悉。

更多详细信息。

主题是:封面新闻

我的自定义帖子类型My Custom Post Types

现在,我需要帮助来修改小部件的代码,以便在下拉列表中包含自定义帖子类型类别。

Now I need help how to modify the Widget's code to include custom post categories in the dropdown list.

这是主题小部件代码:

    {
    /**
     * 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\'];
        ?>
        <?php if (!empty($title)): ?>
        <div class="em-title-subtitle-wrap">
            <?php if (!empty($title)): ?>
                <h4 class="widget-title header-after1">
                    <span class="header-after">
                        <?php echo esc_html($title);  ?>
                        </span>
                </h4>
            <?php endif; ?>
        </div>
    <?php endif; ?>
        <?php

        $all_posts = covernews_get_posts($number_of_posts, $category);
        ?>
        <div class="posts-slider">
            <?php
            if ($all_posts->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;
                    ?>
                    <figure class="slick-item">

                        <div class="data-bg data-bg-hover data-widget-slide" data-background="<?php echo esc_url($url); ?>">
                            <?php echo covernews_post_format($post->ID); ?>
                            <figcaption class="slider-figcaption slider-figcaption-1">

                                <div class="figure-categories figure-categories-bg">

                                    <?php covernews_post_categories(); ?>
                                </div>
                                <h2 class="slide-title">
                                    <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
                                </h2>

                                <div class="grid-item-metadata grid-item-metadata-1">
                                    <?php covernews_post_item_meta(); ?>
                                </div>
                                <?php if ($show_excerpt != \'false\'): ?>
                                    <div class="full-item-discription">
                                        <div class="post-description">
                                            <?php if (absint($excerpt_length) > 0) : ?>
                                                <?php
                                                $excerpt = covernews_get_excerpt($excerpt_length, get_the_content());
                                                echo wp_kses_post(wpautop($excerpt));
                                                ?>
                                            <?php endif; ?>
                                        </div>
                                    </div>
                                <?php endif; ?>
                            </figcaption>
                        </div>
                    </figure>
                    <?php
                endwhile;
            endif;
            wp_reset_postdata();
            ?>
        </div>

        <?php
        // close the widget container
        echo $args[\'after_widget\'];
    }

    /**
     * Back-end widget form.
     *
     * @see WP_Widget::form()
     *
     * @param array $instance Previously saved values from database.
     */
    public function form($instance)
    {
        $this->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;

1 个回复
最合适的回答,由SO网友:Himad 整理而成

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

/**
 * 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, 因此,必须通过以下方式调用函数手动指定要包含的分类法数组:

public function form($instance)
{
    $this->form_instance = $instance;

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

    }
}
由于您使用的是自定义帖子类型,因此还必须修改WP\\u查询,因为默认情况下它只检索类型“post”。

// 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
        )
    ) 
));

相关推荐

My widgets do not save

每次我保存我的小部件并离开页面时,我的小部件都会消失。侧边栏已完全清空,不会保存任何更改。控制台或PHP日志中没有任何错误。如果我将小部件直接复制并保存在数据库中widgets_text, 它们将被显示,但我仍然无法在侧边栏中添加或删除任何内容。这只发生在我的右侧边栏上,左侧边栏工作正常,但它们都以相同的方式注册。这是我注册侧边栏的方式:function my_widgets_init() { register_sidebar( array ( \'name\'