如何仅显示模板的特定类别

时间:2013-09-18 作者:Raymond Osterbrink

我有一个自定义模板,它应该只显示特定类别的帖子。为了完成这项工作,我需要在代码内部更改什么?

if ( ! function_exists( \'attitude_theloop_for_template_blog_full_content_one\' ) ) :
/**
 * Fuction to show the content of page template full content display.
 */
function attitude_theloop_for_template_blog_full_content_one() {
    global $post;

    global $wp_query, $paged;
    if( get_query_var( \'paged\' ) ) {
        $paged = get_query_var( \'paged\' );
    }
    elseif( get_query_var( \'page\' ) ) {
        $paged = get_query_var( \'page\' );
    }
    else {
        $paged = 1;
    }
    $blog_query = new WP_Query( array( \'post_type\' => \'post\', \'paged\' => $paged, \'cat\' => 1 ) );
    $temp_query = $wp_query;
    $wp_query = null;
    $wp_query = $blog_query; 

    global $more;    // Declare global $more (before the loop).

    if( $blog_query->have_posts() ) {
        while( $blog_query->have_posts() ) {
            $blog_query->the_post();

            do_action( \'attitude_before_post\' );
?>
    <section id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
        <article>

            <?php do_action( \'attitude_before_post_header\' ); ?>

            <header class="entry-header">
                <h2 class="entry-title">
                    <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute();?>"><?php the_title(); ?></a>
                </h2><!-- .entry-title -->
            </header>

            <?php do_action( \'attitude_after_post_header\' ); ?>

            <?php do_action( \'attitude_before_post_content\' ); ?>

            <div class="entry-content clearfix">
                <?php
                    $more = 0;       // Set (inside the loop) to display content above the more tag.

                    the_content( __( \'Read more\', \'attitude\' ) );

                    wp_link_pages( array( 
                        \'before\'            => \'<div style="clear: both;"></div><div class="pagination clearfix">\'.__( \'Pages:\', \'attitude\' ),
                        \'after\'             => \'</div>\',
                        \'link_before\'       => \'<span>\',
                        \'link_after\'        => \'</span>\',
                        \'pagelink\'          => \'%\',
                        \'echo\'              => 1 
               ) );
                 ?>
            </div>

            <?php do_action( \'attitude_after_post_content\' ); ?>

            <?php do_action( \'attitude_before_post_meta\' ); ?>

            <div class="entry-meta-bar clearfix">                       
                <div class="entry-meta">
                    <span class="by-author"><?php _e( \'By\', \'attitude\' ); ?> <a href="<?php echo get_author_posts_url( get_the_author_meta( \'ID\' ) ); ?>"><?php the_author(); ?></a></span> |
                    <span class="date"><a href="<?php the_permalink(); ?>" title="<?php echo esc_attr( get_the_time() ); ?>"><?php the_time( get_option( \'date_format\' ) ); ?></a></span> |
                    <?php if( has_category() ) { ?>
                    <span class="category"><?php the_category(\', \'); ?></span> |
                <?php } ?> 
                    <?php if ( comments_open() ) { ?>
                    <span class="comments"><?php comments_popup_link( __( \'No Comments\', \'attitude\' ), __( \'1 Comment\', \'attitude\' ), __( \'% Comments\', \'attitude\' ), \'\', __( \'Comments Off\', \'attitude\' ) ); ?></span> |
                <?php } ?>                              
                </div><!-- .entry-meta -->
            </div>

            <?php do_action( \'attitude_after_post_meta\' ); ?>

        </article>
    </section>
<?php
            do_action( \'attitude_after_post\' );

        }
        if ( function_exists(\'wp_pagenavi\' ) ) { 
            wp_pagenavi();
        }
        else {
            if ( $wp_query->max_num_pages > 1 ) {
            ?>
                <ul class="default-wp-page clearfix">
                    <li class="previous"><?php next_posts_link( __( \'&laquo; Previous\', \'attitude\' ), $wp_query->max_num_pages ); ?></li>
                    <li class="next"><?php previous_posts_link( __( \'Next &raquo;\', \'attitude\' ), $wp_query->max_num_pages ); ?></li>
                </ul>
                <?php 
            }
        }
    }
    else {
        ?>
        <h1 class="entry-title"><?php _e( \'No Posts Found.\', \'attitude\' ); ?></h1>
      <?php
   }
   $wp_query = $temp_query;
        wp_reset_postdata();
}
endif;
此代码来自文件内容扩展名。php在library/structure文件夹中,im使用wordpress 3.6.1,态度不受主题限制。

2 个回复
SO网友:Maruti Mohanty

您可以通过在wp\\u查询中使用category参数来实现这一点

更改如下所示的线条

$blog_query = new WP_Query( array( \'post_type\' => \'post\', \'paged\' => $paged ) );

$blog_query = new WP_Query( array( \'post_type\' => \'post\', \'paged\' => $paged, \'cat\' => 4 ) );
//此处“4”是要显示的类别的id,而您也可以使用类别名称

有关详细信息,请参阅此链接:http://codex.wordpress.org/Class_Reference/WP_Query#Category_Parameters

SO网友:s_ha_dum

@MarutiMohanty有合理的代码,但我建议您不要直接编辑主题文件。创建Child Theme 并定义attitude_theloop_for_template_blog_full_content_one 在那个孩子的functions.php 进行必要的修改。您的主题使该功能可插入,以便可以替换。

或者,创建MU插件。在创建文件夹wp-content/mu-plugins, 然后放一个.php 其中包含替换该函数的代码的文件。

未经测试,但我认为这两种方法都应该有效,(可能需要一些调整),并且比破解第三方主题要好得多。

结束

相关推荐

将PHP变量放入到Java脚本中

我为我的网站创建了一个简单的主题选项页面。选项页面包含三个输入字段。我可以使用get\\u选项输出字段。使用以下命令调用这三个字段:<?php echo get_option( \'map_zoom\' ); ?> <?php echo get_option( \'map_longitude\' ); ?> <?php echo get_option( \'map_latitude\' ); ?> 这些变量用于控制地图的缩放级别、经度和纬度。我