如何创建要在项目页面上显示的帖子(而不是帖子模板)?

时间:2015-12-10 作者:mustafa1993

页码:

主页-设置为静态主页

首页。php-用于主页我为About和Contact页面设置了虚拟文本,打开相应页面时会显示该页面。现在,我想要:

当项目页面打开时,它通过循环显示所有项目帖子,就像它在博客页面(其内容类型为post)中显示帖子一样。我的问题是,对于博客页面的帖子,我们只需在帖子中单击“添加新内容”并发布即可。如何为我的项目页面添加帖子和描述?

下面是项目中的循环代码。php文件:

<?php 

$args = array(
\'post_type\' => \'projects\'
    );

$the_query = new WP_Query($args);

    ?>

<?php if(have_posts()) : while($the_query->have_posts()) : $the_query->the_post(); ?>

<h3><a href="<?php the_permalink();?>"><?php the_title(); ?></a></h3>
<?php the_field(\'description\'); ?>
<hr>

<?php endwhile; else: ?>
    <p>There are no posts or pages here</p>
<?php endif; ?>

2 个回复
SO网友:jgraup

最好的方法是注册a custom post type 然后在项目页面模板中循环该类型。

CPT来自GenerateWP.

if ( ! function_exists(\'projects\') ) {

// Register Custom Post Type
function projects() {

    $labels = array(
        \'name\'                  => _x( \'Projects\', \'Post Type General Name\', \'text_domain\' ),
        \'singular_name\'         => _x( \'Project\', \'Post Type Singular Name\', \'text_domain\' ),
        \'menu_name\'             => __( \'Projects\', \'text_domain\' ),
        \'name_admin_bar\'        => __( \'Projects\', \'text_domain\' ),
        \'parent_item_colon\'     => __( \'Parent Project:\', \'text_domain\' ),
        \'all_items\'             => __( \'All Projects\', \'text_domain\' ),
        \'add_new_item\'          => __( \'Add New Project\', \'text_domain\' ),
        \'add_new\'               => __( \'Add New\', \'text_domain\' ),
        \'new_item\'              => __( \'New Project\', \'text_domain\' ),
        \'edit_item\'             => __( \'Edit Project\', \'text_domain\' ),
        \'update_item\'           => __( \'Update Project\', \'text_domain\' ),
        \'view_item\'             => __( \'View Project\', \'text_domain\' ),
        \'search_items\'          => __( \'Search Projects\', \'text_domain\' ),
        \'not_found\'             => __( \'Not found\', \'text_domain\' ),
        \'not_found_in_trash\'    => __( \'Not found in Trash\', \'text_domain\' ),
        \'items_list\'            => __( \'Projects list\', \'text_domain\' ),
        \'items_list_navigation\' => __( \'Projects list navigation\', \'text_domain\' ),
        \'filter_items_list\'     => __( \'Filter project list\', \'text_domain\' ),
    );
    $rewrite = array(
        \'slug\'                  => \'project\',
        \'with_front\'            => true,
        \'pages\'                 => true,
        \'feeds\'                 => true,
    );
    $args = array(
        \'label\'                 => __( \'Project\', \'text_domain\' ),
        \'description\'           => __( \'A Single Project\', \'text_domain\' ),
        \'labels\'                => $labels,
        \'supports\'              => array( \'title\', \'editor\', \'excerpt\', \'author\', \'thumbnail\', \'comments\', \'custom-fields\', ),
        \'taxonomies\'            => array( \'category\', \'post_tag\' ),
        \'hierarchical\'          => false,
        \'public\'                => true,
        \'show_ui\'               => true,
        \'show_in_menu\'          => true,
        \'menu_position\'         => 5,
        \'menu_icon\'             => \'dashicons-media-document\',
        \'show_in_admin_bar\'     => true,
        \'show_in_nav_menus\'     => true,
        \'can_export\'            => true,
        \'has_archive\'           => true,
        \'exclude_from_search\'   => false,
        \'publicly_queryable\'    => true,
        \'rewrite\'               => $rewrite,
        \'capability_type\'       => \'page\',
    );
    register_post_type( \'projects\', $args );

}
add_action( \'init\', \'projects\', 0 );

}
在您的Projects Template 运行您的custom loop.

<?php
/*
 * Template Name: Projects Page Template
 * Description: Page template to display projects custom post types
 */

 get_header(); ?>

   <div id="primary" class="content-area">
     <main id="main" class="site-main" role="main">

       <?php
       // WP_Query arguments
        $args = array (
            \'post_type\' => \'projects\',
        );

        // The Query
        $query = new WP_Query( $args );

        // The Loop
        if ( $query->have_posts() ) {
            while ( $query->have_posts() ) {

            // PROJECT
                $query->the_post(); ?>
            <h3><a href="<?php the_permalink();?>"><?php the_title(); ?></a></h3>
            <?php the_field(\'description\'); ?>
            <hr><?php

            }
        } else { ?>
            <p>There are no posts or pages here</p>
        <?php }

        // Restore original Post Data
        wp_reset_postdata();

        // The Content
        echo apply_filters( \'the_content\', get_the_content() );
     ?>

     </main><!-- .site-main -->
   </div><!-- .content-area -->

 <?php get_sidebar(); ?>
 <?php get_footer(); ?>
您可以创建页面/projects 并将模板设置为Projects Template 这将列出您的所有项目/project/project-title.

但如果你想在帖子中添加额外的字段并将其标记为项目,那么这更像是一个循环问题。

SO网友:Pieter Goosen

根据您的问题和代码,我承认您已经注册了一个名为projects 您已经发布了一些项目。

如果不是这样,你需要register a custom post type 调用projects. 您应该记住两个非常重要的参数

  • public 您应该将其设置为true

  • has_archive 您应该忽略或设置为false(,这是默认值)。这样做的原因是,您希望使用页面模板来显示项目(,它与post类型具有相同的slug),而不是层次结构中的普通模板,如archive-projects.php, archive.phpindex.php. 背景has_archive 如果设置为true,只需在层次结构中的模板上加载帖子类型的帖子,您的自定义页面将永远不会加载

第一次注册帖子类型或调整函数内的值时,请始终记住刷新重写规则。

如果您已经正确注册了帖子类型并正确设置了项目页面,那么您应该能够在Projects 选项卡,您将能够看到它,因为OP中的代码很好。

一个重要的细节被忽视了,而不仅仅是你;-),您缺少页面上的主循环。如果要在后端编辑器中添加标题或某些描述,以便在访问项目页面时显示在前端,则需要添加主循环,以便在其中显示页面的这些描述和标题。

主循环将显示主查询对象内的页面对象。因此,在创建页面时,如果您想显示在后端编辑器中输入的页面中的任何内容,只需添加以下内容(,我怀疑这可能在显示项目的自定义查询之前)

if ( have_posts() ) {
    while ( have_posts() ) {
    the_post();

        the_title();
        the_content();
        // Blah blah blah plus Mark Up

    }
}

相关推荐

Last post in loop when even

我使用这段代码尝试检查每个页面上的最后一篇文章循环是否均匀,以便添加不同的类。这可以检查它是否是最后一篇文章:( ( 1 == $wp_query->current_post + 1 ) == $wp_query->post_count ) 这可以检查它是否是一个均匀的帖子( $wp_query->current_post % 2 == 0 ) 但这并没有检查这是否是最后一篇文章,甚至。 ( ( 1 == $wp_query->current_post + 1