我试图通过从类wp widget recent posts复制整个类来创建自定义的recent posts widget。php到我的主题函数。但是当我这样做的时候,我只会得到一个空白页面。
线以上的一切add_action( \'widgets_init\', \'my_custom_sidebar\' );
工作正常。
我的新功能。php:
<?php
// Register Custom Navigation Walker
require_once(\'wp_bootstrap_navwalker.php\');
// Bootstrap navigation
function bootstrap_nav()
{
wp_nav_menu( array(
\'theme_location\' => \'header-menu\',
\'depth\' => 2,
\'container\' => \'false\',
\'menu_class\' => \'nav navbar-nav navbar-right\',
\'fallback_cb\' => \'wp_bootstrap_navwalker::fallback\',
\'walker\' => new wp_bootstrap_navwalker())
);
}
function twentyseventeen_setup() {
add_theme_support( \'title-tag\' );
add_theme_support( \'menus\' );
}
function register_header_menu() {
register_nav_menu(\'header-menu\',__( \'Header Menu\' ));
}
add_action( \'init\', \'register_header_menu\' );
add_filter( \'show_admin_bar\', \'__return_false\' );
//Register Sidebar
function my_custom_sidebar() {
register_sidebar(
array (
\'name\' => __( \'Custom\', \'your-theme-domain\' ),
\'id\' => \'custom-side-bar\',
\'description\' => __( \'Custom Sidebar\', \'your-theme-domain\' ),
\'before_widget\' => \'<div class="widget-content">\',
\'after_widget\' => "</div>",
\'before_title\' => \'<div class="widget-title-box"><h3 class="widget-title">\',
\'after_title\' => \'</h3></div>\',
)
);
}
add_action( \'widgets_init\', \'my_custom_sidebar\' );
class WP_Widget_Recent_Posts extends WP_Widget {
/**
* Sets up a new Recent Posts widget instance.
*
* @since 2.8.0
* @access public
*/
public function __construct() {
$widget_ops = array(
\'classname\' => \'widget_recent_entries\',
\'description\' => __( \'Your site’s most recent Posts.\' ),
\'customize_selective_refresh\' => true,
);
parent::__construct( \'recent-posts\', __( \'Recent Posts\' ), $widget_ops );
$this->alt_option_name = \'widget_recent_entries\';
}
/**
* Outputs the content for the current Recent Posts widget instance.
*
* @since 2.8.0
* @access public
*
* @param array $args Display arguments including \'before_title\', \'after_title\',
* \'before_widget\', and \'after_widget\'.
* @param array $instance Settings for the current Recent Posts widget instance.
*/
public function widget( $args, $instance ) {
if ( ! isset( $args[\'widget_id\'] ) ) {
$args[\'widget_id\'] = $this->id;
}
$title = ( ! empty( $instance[\'title\'] ) ) ? $instance[\'title\'] : __( \'Recent Posts\' );
/** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */
$title = apply_filters( \'widget_title\', $title, $instance, $this->id_base );
$number = ( ! empty( $instance[\'number\'] ) ) ? absint( $instance[\'number\'] ) : 5;
if ( ! $number )
$number = 5;
$show_date = isset( $instance[\'show_date\'] ) ? $instance[\'show_date\'] : false;
/**
* Filters the arguments for the Recent Posts widget.
*
* @since 3.4.0
*
* @see WP_Query::get_posts()
*
* @param array $args An array of arguments used to retrieve the recent posts.
*/
$r = new WP_Query( apply_filters( \'widget_posts_args\', array(
\'posts_per_page\' => $number,
\'no_found_rows\' => true,
\'post_status\' => \'publish\',
\'ignore_sticky_posts\' => true
) ) );
if ($r->have_posts()) :
?>
<?php echo $args[\'before_widget\']; ?>
<?php if ( $title ) {
echo $args[\'before_title\'] . $title . $args[\'after_title\'];
} ?>
<ul>
<?php while ( $r->have_posts() ) : $r->the_post(); ?>
<li>
<a href="<?php the_permalink(); ?>"><?php get_the_title() ? the_title() : the_ID(); ?></a>
<?php if ( $show_date ) : ?>
<span class="post-date"><?php echo get_the_date(); ?></span>
<?php endif; ?>
</li>
<?php endwhile; ?>
</ul>
<?php echo $args[\'after_widget\']; ?>
<?php
// Reset the global $the_post as this query will have stomped on it
wp_reset_postdata();
endif;
}
/**
* Handles updating the settings for the current Recent Posts widget instance.
*
* @since 2.8.0
* @access public
*
* @param array $new_instance New settings for this instance as input by the user via
* WP_Widget::form().
* @param array $old_instance Old settings for this instance.
* @return array Updated settings to save.
*/
public function update( $new_instance, $old_instance ) {
$instance = $old_instance;
$instance[\'title\'] = sanitize_text_field( $new_instance[\'title\'] );
$instance[\'number\'] = (int) $new_instance[\'number\'];
$instance[\'show_date\'] = isset( $new_instance[\'show_date\'] ) ? (bool) $new_instance[\'show_date\'] : false;
return $instance;
}
/**
* Outputs the settings form for the Recent Posts widget.
*
* @since 2.8.0
* @access public
*
* @param array $instance Current settings.
*/
public function form( $instance ) {
$title = isset( $instance[\'title\'] ) ? esc_attr( $instance[\'title\'] ) : \'\';
$number = isset( $instance[\'number\'] ) ? absint( $instance[\'number\'] ) : 5;
$show_date = isset( $instance[\'show_date\'] ) ? (bool) $instance[\'show_date\'] : false;
?>
<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 $title; ?>" /></p>
<p><label for="<?php echo $this->get_field_id( \'number\' ); ?>"><?php _e( \'Number of posts to show:\' ); ?></label>
<input class="tiny-text" id="<?php echo $this->get_field_id( \'number\' ); ?>" name="<?php echo $this->get_field_name( \'number\' ); ?>" type="number" step="1" min="1" value="<?php echo $number; ?>" size="3" /></p>
<p><input class="checkbox" type="checkbox"<?php checked( $show_date ); ?> id="<?php echo $this->get_field_id( \'show_date\' ); ?>" name="<?php echo $this->get_field_name( \'show_date\' ); ?>" />
<label for="<?php echo $this->get_field_id( \'show_date\' ); ?>"><?php _e( \'Display post date?\' ); ?></label></p>
<?php
}
}