这里有几个选项可以实现这一点,而无需使用插件。
OPTION 1
最简单的方法是在要显示帖子的位置使用自定义查询。这里你可以利用
WP_Query
创建自定义查询。
最好的方法是使用post ID,您可以在自定义查询中使用该ID来检索和显示自定义post。看看Post and Page Parameters 在里面WP_Query
.
一个非常简单的查询如下所示。用你自己的更改帖子ID
<?php
// The Query
$args = array(
//\'p\' => 149\' //for single post
//\'posts_per_page\' => 1, //for single post
\'post__in\' => array( 149,159 ), //for multiple posts
\'posts_per_page\' => 2, //for multiple posts
\'ignore_sticky_posts\' => 1
);
$the_query = new WP_Query( $args );
// The Loop
if ( $the_query->have_posts() ) :
while ( $the_query->have_posts() ) : $the_query->the_post();
?>
<h2><?php the_title(); ?></h2>
<?php
endwhile;
wp_reset_postdata();
else:
endif;
OPTION 2
如上所述,在内容中添加自定义查询。php类型的模板文件,称之为内容新闻。然后在任何模板中调用它,如下所示
get_template_part( $slug, $name )
get_template_part( \'content\', \'news\' );
这样做的好处是,如果需要在多个位置使用自定义查询,则无需反复重复。每次只需调用一行代码
OPTION 3
如果您需要使其动态化,我建议您创建一个小部件。我想这将是一个特色内容区,所以我建议您
register a new sidebar, 然后在你的标题中调用它。php就在开头的body标记之后。你可以利用
conditional tags 在页面和模板上有条件地加载侧栏
要创建小部件,请查看Widget API. 也有非常好的教程,你可以看看。
我在这里的想法是,您可以在小部件内创建一个文本框,您可以在其中添加一个帖子ID或几个帖子ID,您可以将其安全地保存在数据库中。对于您的自定义查询(将在小部件中),您可以为要从db中检索的ID分配一个变量(您在文本框中手动添加的ID)。然后将反馈给该变量p
或post__in
.
这样,您只需在自定义小部件的文本框中更改您输入的帖子ID,就可以快速更改新闻框的内容,并且只需使用内置的拖放功能删除小部件。
这是一个我快速修改的小部件。您可以将帖子ID作为逗号分隔的字符串添加到小部件文本块的后端。这将转换为数组并传递给post__in
. 这只是一个粗略的草稿小部件,所以可以随意修改它
class Posts_Widget extends WP_Widget {
function __construct() {
$widget_ops = array(\'classname\' => \'widget_posts\', \'description\' => __( \'Display selected posts from post ID’s\') );
parent::__construct(\'posts_widget\', __(\'Posts Widget\'), $widget_ops);
}
function widget( $args, $instance ) {
$cache = wp_cache_get( \'Posts_Widget\', \'widget\' );
if ( !is_array( $cache ) )
$cache = array();
if ( ! isset( $args[\'widget_id\'] ) )
$args[\'widget_id\'] = null;
if ( isset( $cache[$args[\'widget_id\']] ) ) {
echo $cache[$args[\'widget_id\']];
return;
}
ob_start();
extract( $args, EXTR_SKIP );
ob_start();
extract( $args );
$title = apply_filters( \'widget_title\', empty( $instance[\'title\'] ) ? __( \'Important Posts\' ) : $instance[\'title\'], $instance, $this->id_base );
$ids = empty( $instance[\'postids\'] ) ? \'\' : $instance[\'postids\'];
$array_ids = array_map(\'intval\', explode(\',\', $ids));
$ppp = count($array_ids);
$pa = array(
\'post__in\' => $array_ids,
\'posts_per_page\' => $ppp,
\'ignore_sticky_posts\' => 1
);
$widget_posts = new WP_Query( $pa );
if ( $widget_posts->have_posts() ) :
echo $before_widget;
echo $before_title;
echo $title; // Can set this with a widget option, or omit altogether
echo $after_title;
?>
<ul>
<div class="custom-widget">
<?php while ( $widget_posts->have_posts() ) : $widget_posts->the_post(); ?>
<?php the_title(); ?>
<?php endwhile; ?>
</ul>
<?php
echo $after_widget;
// Reset the post globals as this query will have stomped on it
wp_reset_postdata();
// end
endif;
$cache[$args[\'widget_id\']] = ob_get_flush();
wp_cache_set( \'Posts_Widget\', $cache, \'widget\' );
}
function update( $new_instance, $old_instance ) {
$instance = $old_instance;
$instance[\'title\'] = strip_tags($new_instance[\'title\']);
$instance[\'postids\'] = strip_tags( $new_instance[\'postids\'] );
return $instance;
}
function form( $instance ) {
//Defaults
$instance = wp_parse_args( (array) $instance, array( \'title\' => \'\', \'postids\' => \'\') );
$title = esc_attr( $instance[\'title\'] );
$ids = esc_attr( $instance[\'postids\'] );
?>
<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(\'postids\'); ?>"><?php _e( \'Post ID’s:\' ); ?></label> <input type="text" value="<?php echo $ids; ?>" name="<?php echo $this->get_field_name(\'postids\'); ?>" id="<?php echo $this->get_field_id(\'postids\'); ?>" class="widefat" />
<br />
<small><?php _e( \'Post IDs, separated by commas.\' ); ?></small>
</p>
<?php
}
}
add_action( \'widgets_init\', function(){
register_widget( \'Posts_Widget\' );
});
CONCLUSION
这应该给你一个解决问题的基本思路。我希望这对你有帮助