0

我正在创建一个 Wordpress 最近的帖子小部件,其中包含许多不同的练习功能。我需要它执行的功能之一是允许管理员通过带有类别的下拉菜单指定要显示的类别。我在这里寻求帮助并得到了答案,但我不明白如何让它正常工作。这是我的代码:

<?php
/*
Plugin Name: News Recent Posts Widget
Plugin URI: 
Description: A recent post widget with extra functions that allow admin to make changes to certain values
Author: Kevin Ullyott
Version: 1.0
Author URI: http://modmacro.com/
*/


class recentpost extends WP_Widget {

    public function __construct() {
    parent::WP_Widget(
    // or parent::__construct(
        false, 
        'Kevin - Recent Posts Widget',
        array(
            'description' => __('A recent post widget with extra functions that allow admin to make changes to certain values') 

        )
    );
    ;
}

    public function widget( $args, $instance ) {


        extract( $args );

        $headline = $instance['headline'];
        $category = $instance['category'];
        $numberposts = $instance['numberposts'];
        $readmore = $instance['readmore'];


        echo $before_widget;

        echo $before_title;

        echo "<p class=\"headline\">$headline</p>";

        echo $after_title;

        $args = array( 'numberposts' => $numberposts, 'category_name' => $category );
        $recent_posts = wp_get_recent_posts( $args );
        foreach( $recent_posts as $recent ){
        setup_postdata(get_post($recent['ID']));
        echo '<a href="' . get_permalink($recent['ID']) . '" title=" '.esc_attr(get_the_title($recent['ID'])).'" >' .   get_the_title($recent['ID']).'</a> ';
        echo get_the_time('F j, Y', $recent['ID']);
        the_excerpt();
}
wp_reset_postdata();


        echo $after_widget;


    }

    public function update( $new_instance, $old_instance ) {
        $instance = array();
        $instance['headline'] = ( $new_instance['headline'] );
        $instance['category'] = ( $new_instance['category'] );
        $instance['numberposts'] = ( $new_instance['numberposts'] );
        $instance['readmore'] = ( $new_instance['readmore'] );
        return $instance;
    }


    public function form( $instance ) {

        $headline = $instance[ 'headline' ];
        $category = $instance[ 'category' ];
        $numberposts = $instance[ 'numberposts' ];
        $readmore = $instance[ 'readmore' ];

        ?>

<p>
  <label for="<?php echo $this->get_field_id( 'headline' ); ?>">
    <?php _e( 'Headline:' ); ?>
  </label>
  <input class="widefat" id="<?php echo $this->get_field_id( 'headline' ); ?>" name="<?php echo $this->get_field_name( 'headline' ); ?>" type="text" value="<?php echo esc_attr( $headline ); ?>" />
</p>
<label for="<?php echo $this->get_field_id( 'category' ); ?>">
  <?php _e( 'Category:' ); ?>
</label>
<?php wp_dropdown_categories(array('name' => $this->get_field_name('category'), 'selected' => $category, 'id' => $this->get_field_id('category'), 'class' => 'widefat')); ?>
</p>
<label for="<?php echo $this->get_field_id( 'numberposts' ); ?>">
  <?php _e( 'Number of posts:' ); ?>
</label>
<input class="widefat" id="<?php echo $this->get_field_id( 'numberposts' ); ?>" name="<?php echo $this->get_field_name( 'numberposts' ); ?>" type="text" value="<?php echo esc_attr( $numberposts ); ?>" />
</p>
<label for="<?php echo $this->get_field_id( 'readmore' ); ?>">
  <?php _e( 'Read More:' ); ?>
</label>
<input class="widefat" id="<?php echo $this->get_field_id( 'readmore' ); ?>" name="<?php echo $this->get_field_name( 'readmore' ); ?>" type="text" value="<?php echo esc_attr( $readmore ); ?>" />
</p>
<?php 
    }
}

add_action( 'widgets_init', create_function('', 'return register_widget("recentpost");') );


?>

因此,如果您查看类别的表单,我会在那里输入 PHP 代码来创建下拉菜单。它成功地创建了表单并在下拉菜单中显示了正确的类别,但是当我保存它时它没有正确更新并且使小部件不显示任何内容。

给我这个代码的用户告诉我这个。他说:“函数 wp_dropdown_categories 将引入类别,但单独添加函数不会保存或检索所选类别。您需要添加名称选择和 id 参数。” 但问题是我不知道如何添加 name、selected 和 id 参数。到目前为止,我尝试做的一切都失败了。有人可以向我展示使用我的代码执行此操作的正确方法吗?这会有很大帮助。我对此很陌生,正在努力学习,所以请提供我需要做的事情,如果你能解释一下。

抱歉问了这么多,我只是喜欢编码,想尽可能多地了解!

4

1 回答 1

0

wp_dropdown_categories 返回类别 ID。因此,如果您的表单显示正确的类别并保存,那么它的工作。所以你会想看看你的查询。看起来您目前正在尝试按category_name.

$args = array( 'numberposts' => $numberposts, 'category_name' => $category );

将其更改为

`$args = array('numberposts' => $numberposts, 'cat' => $category);

于 2013-01-07T10:05:50.200 回答