我需要帮助如何使“视频”CPT出现在WordPress本机小部件和主题Widget的类别下拉选项列表中的自定义目录或类别。我得到的唯一类别是默认的帖子。
任何帮助都会很感激的。不太熟悉php。
更多细节。
主题是: CoverNews


这是主题小部件代码:
{
/**
* 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;
发布于 2020-04-20 17:24:48
我看了主题的代码。函数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
}
}由于您使用的是自定义的post类型,所以还必须修改WP_Query,因为默认情况下它只是检索类型'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
)
)
));https://wordpress.stackexchange.com/questions/362821
复制相似问题