我们可以将 Wordpress 存档设置为 3 个月的时间限制吗

Posted

技术标签:

【中文标题】我们可以将 Wordpress 存档设置为 3 个月的时间限制吗【英文标题】:Can we set Wordpress archive with 3 month time limit 【发布时间】:2017-06-13 08:28:23 【问题描述】:

如何将存档小部件下拉列表显示为 jan-march、april-june 那样

【问题讨论】:

你已经尝试了什么? 【参考方案1】:

请使用以下代码获取 3 个月的帖子。

 <?php 
$args = array(
    'date_query' => array(
        array(
            'after'     => 'October 1st, 2016',
            'before'    => array(
                'year'  => 2016,
                'month' => 12,
                'day'   => 31,
            ),
            'inclusive' => true,
        ),
    ),
    'posts_per_page' => -1,
);
$query = new WP_Query( $args ); ?>

您需要根据需要更改月份和年份。

【讨论】:

打扰一下,如何将存档小部件下拉列表显示为 jan-march, april-june 这样。 您需要创建一个带有下拉菜单的小部件,并且所选月份的帖子将显示在前端右侧。? 现在我的存档小部件下拉显示为 2017 年 3 月、2017 年 4 月至 2017 年,我需要显示为 2017 年 1 月至 3 月、2017 年 4 月至 6 月等,如【参考方案2】:

请试试这个。将此代码放入您的主题 functions.php 文件中。

<?php
// Creating the widget 
class wpb_widget extends WP_Widget 
    function __construct() 
        parent::__construct(
        // Base ID of your widget
        'wpb_widget',
        // Widget name will appear in UI
        __('WPBeginner Widget', 'wpb_widget_domain'),
        // Widget description
        array( 'description' => __( 'Sample widget based on WPBeginner Tutorial', 'wpb_widget_domain' ), ) 
        );
    
    // Creating widget front-end
    public function widget( $args, $instance ) 
        $title = apply_filters( 'widget_title', $instance['title'] );
        $month = $instance['month'];
        $ex=explode("-",$month);
        // before and after widget arguments are defined by themes
        echo $args['before_widget'];
        if ( ! empty( $title ) )
        echo $args['before_title'] . $title . $args['after_title'];
        $date = $ex[1];
        $m=date('m', strtotime($date));
        $after=$ex[0].' 1st, 2017';
        $number = cal_days_in_month(CAL_GREGORIAN, $m, 2017);
        $before=array(
            'year'  => 2017,
            'month' => $m,
            'day'   => $number,
        );
        // This is where you run the code and display the output
        $args = array(
            'post_type' =>"post",
            'date_query' => array(
                array(
                    'after'     => "'".$after."'",
                    'before'    => $before,
                    'inclusive' => true,
                ),
            ),
            'posts_per_page' => -1,
        );
        $querys = new WP_Query( $args );
        if($querys->have_posts()):
            while($querys->have_posts()):
                $querys->the_post();
                echo get_the_title()."<br>";
            endwhile;
        endif;
        echo $args['after_widget'];
           
    // Widget Backend 
    public function form( $instance ) 
        if ( isset( $instance[ 'title' ] ) ) 
            $title = $instance[ 'title' ];
        
        else 
            $title = __( 'New title', 'wpb_widget_domain' );
        
        if(isset($instance[ 'month' ]))
            $month=$instance[ 'month' ];
        else
            $month='';
        
        /// Widget admin form ?>
        <p>
            <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:' ); ?></label> 
            <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" />
        </p>
        <p>
            <select id="<?php echo $this->get_field_id('month'); ?>" name="<?php echo $this->get_field_name('month'); ?>" class="widefat" style="width:100%;">
                <option value="0">Select Month</option>
                <option <?php selected( $instance['month'], 'january-march'); ?> value="january-march">Jan-Mar</option>
                <option <?php selected( $instance['month'], 'april-june'); ?> value="april-june">April-June</option> 
                <option <?php selected( $instance['month'], 'july-september'); ?> value="july-september">July-Sep.</option>   
                <option <?php selected( $instance['month'], 'october-december'); ?> value="october-december">Oct.-Dec.</option>   
            </select>
        </p>
        <?php 
           
    // Updating widget replacing old instances with new
    public function update( $new_instance, $old_instance ) 
        $instance = array();
        $instance['title'] = ( ! empty( $new_instance['title'] ) ) ? strip_tags( $new_instance['title'] ) : '';
        $instance['month'] = ( ! empty( $new_instance['month'] ) ) ? strip_tags( $new_instance['month'] ) : '';
        return $instance;
    
 // Class wpb_widget ends here  ?>

【讨论】:

哪个部分不工作?能不能请详细描述一下。 在function.php中添加了这段代码,没有任何反应 添加此代码后,请转到管理面板中的小部件区域。您可以看到“WpBeginner 小部件”并选择该小部件并选择要显示的月份范围。 另外请将 'post_type' =>"post" 更改为您的帖子类型。【参考方案3】:

使用下面的核心函数,

<?php wp_get_archives( array( 'type' => 'monthly', 'limit' => 12 ) ); ?>

更多参考:https://codex.wordpress.org/Function_Reference/wp_get_archives

【讨论】:

打扰一下,如何将存档小部件下拉列表显示为 jan-march, april-june 这样。 替换您想要的月份,只需在archive.php中使用此代码并在小部件中创建自定义列表。 wordpress.stackexchange.com/questions/134423/…

以上是关于我们可以将 Wordpress 存档设置为 3 个月的时间限制吗的主要内容,如果未能解决你的问题,请参考以下文章

控制 wordpress 存档页面上的帖子数量

让 Wordpress 显示每月存档的代码?

WordPress中单个类别的存档页面

新页面将我发送到存档页面 - Wordpress

侧边栏在 WordPress 存档页面上的行为不同

从存档调用的 CPT 页面上的 Wordpress 上一个和下一个链接