在归档页面上获取自定义分类帖子

时间:2014-08-27 作者:fahad.kazi

嗨,我不确定这个问题是否可以理解,但我会解释我想要达到的目标。我有一个称为菜单项的自定义帖子类型和称为菜单项类型的自定义分类法。

密码

function create_menu_post_type() 
{
    $labels = array(
        \'name\' => __( \'Food Menu\',\'framework\'),
        \'singular_name\' => __( \'Menu Item\',\'framework\' ),
        \'add_new\' => __(\'Add New\',\'framework\'),
        \'add_new_item\' => __(\'Add New Menu Item\',\'framework\'),
        \'edit_item\' => __(\'Edit Menu Item\',\'framework\'),
        \'new_item\' => __(\'New Menu Item\',\'framework\'),
        \'view_item\' => __(\'View Menu Item\',\'framework\'),
        \'search_items\' => __(\'Search Menu Items\',\'framework\'),
        \'not_found\' =>  __(\'No Menu Item found\',\'framework\'),
        \'not_found_in_trash\' => __(\'No Menu Item found in Trash\',\'framework\'), 
        \'parent_item_colon\' => \'\'
      );

      $args = array(
        \'labels\' => $labels,
        \'public\' => true,
        \'exclude_from_search\' => false,
        \'publicly_queryable\' => true,
        \'show_ui\' => true, 
        \'query_var\' => true,
        \'menu_icon\' => get_template_directory_uri() . \'/images/menu.png\',
        \'capability_type\' => \'post\',
        \'hierarchical\' => false,
        \'menu_position\' => 5,
        \'supports\' => array(\'title\',\'editor\',\'thumbnail\'),
        \'rewrite\' => array( \'slug\' => __(\'menu-item\', \'framework\') )
      ); 

      register_post_type(\'menu-item\',$args);
}
add_action( \'init\', \'create_menu_post_type\' );


function create_menu_item_type_taxonomy(){

    $labels = array(
        \'name\' => __( \'Menu Item Types\', \'framework\' ),
        \'singular_name\' => __( \'Menu Item Type\', \'framework\' ),
        \'search_items\' =>  __( \'Search Menu Item Types\', \'framework\' ),
        \'popular_items\' => __( \'Popular Menu Item Types\', \'framework\' ),
        \'all_items\' => __( \'All Menu Item Types\', \'framework\' ),
        \'parent_item\' => __( \'Parent Menu Item Type\', \'framework\' ),
        \'parent_item_colon\' => __( \'Parent Menu Item Type:\', \'framework\' ),
        \'edit_item\' => __( \'Edit Menu Item Type\', \'framework\' ), 
        \'update_item\' => __( \'Update Menu Item Type\', \'framework\' ),
        \'add_new_item\' => __( \'Add New Menu Item Type\', \'framework\' ),
        \'new_item_name\' => __( \'New Menu Item Type Name\', \'framework\' ),
        \'separate_items_with_commas\' => __( \'Separate Menu Item Types with commas\', \'framework\' ),
        \'add_or_remove_items\' => __( \'Add or Remove Menu Item Types\', \'framework\' ),
        \'choose_from_most_used\' => __( \'Choose from the most used Menu Item Types\', \'framework\' ),
        \'menu_name\' => __( \'Menu Item Types\', \'framework\' )
    );

    register_taxonomy(
        \'menu-item-type\', 
        array( \'menu-item\' ), 
        array(
            \'hierarchical\' => true, 
            \'labels\' => $labels,
            \'show_ui\' => true,
            \'query_var\' => true,
            \'rewrite\' => array(\'slug\' => __(\'menu-item-type\', \'framework\'))
        )
    ); 
}

add_action( \'init\', \'create_menu_item_type_taxonomy\', 0 );
我在“日本人”一词下创建了一个名为“寿司”的帖子。然后在“中国人”一词下创建了名为“周眉”的帖子。我想用不同的术语填充归档帖子。我有一个归档页面,即归档。我在php中填充帖子,但我的代码填充所有术语中的所有帖子。

<?php $loop = new WP_Query( array( \'post_type\' => \'menu-item\', \'posts_per_page\' => -1 ) ); ?>
            <?php while ( $loop->have_posts() ) : $loop->the_post();
                get_template_part( \'content\', get_post_format() );
                endwhile; wp_reset_query();
            ?>

            <?php else : ?>
                <?php get_template_part( \'content\', \'none\' ); ?>
            <?php endif; ?>
我正在通过动态侧栏导航到存档页

<?php dynamic_sidebar( \'Archive\' ); ?>
请注意,我使用了来自主题的自定义帖子类型和分类代码作为参考。此外,如果这是一个无效的问题,请随时发表评论,我将删除该问题,并尝试找到其他解决方案。

添加更清晰的示例

Custom post -> menu-item
menu-item -> 2 posts -> sushi, chow mein
taxonomy -> menu-item-type
menu-item-type -> japenese, chinese
sushi -> japenese
chowmein -> chinese
已更新的查询

<?php 
$current_term = get_term_by( \'slug\', get_query_var(\'term\') ,\'menu-item-type\' );
$loop = new WP_Query( array( \'post_type\' => \'menu-item\', \'posts_per_page\' => -1, \'year\' => $year_filter, \'tax_query\' => array(
                    array( \'taxonomy\' => \'menu-item-type\', \'field\' => \'slug\', \'terms\' => $current_term->name) ) ) ); ?>
                    <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
                                <?php get_template_part( \'content\', get_post_format() ); 
                                endwhile; wp_reset_query();?>
                        <?php else : ?>
                            <div class="no-post"><?php _e( \'Sorry, no posts matched your criteria.\' ); ?></div>
                        <?php endif; ?>

1 个回复
SO网友:Pieter Goosen

如果我理解正确,那么在显示一个术语的页面时,您需要显示该术语的所有帖子。

在我回答真正的问题之前,我想强调几点,因为您是Wordpress的新手

切勿使用连字符(-) 分隔自定义帖子类型名称和自定义分类名称中的名称。以后它们会非常麻烦,特别是在自定义模板方面。如果你真的需要分开名字,only 使用下划线(_)

不要创建多个连接到同一挂钩的实例。将所有相关函数添加到一个函数中,并将该函数添加到所需的挂钩中

好的,现在来看真正的问题。您的问题是自定义查询。绝不应更改任何存档类型页面或主页上自定义查询的主查询。如果需要操作这些页面上的主查询,请使用pre_get_posts 这样做。

要解决您的问题,只需返回归档上的默认循环。php。您还可以创建分类法。将用于自定义分类的php模板

以下是存档或分类页面的外观示例

<?php

get_header(); ?>

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

            <?php if ( have_posts() ) : ?>


            <?php
                    // Start the Loop.
                    while ( have_posts() ) : the_post();

                        get_template_part( \'content\', get_post_format() );

                    endwhile;
                    // Previous/next page navigation.

                    //YOUR PAGINATION FUNCTIONS;

                else :
                    // If no content, include the "No posts found" template.
                    get_template_part( \'content\', \'none\' );

                endif;
            ?>
        </div><!-- #content -->
    </section><!-- #primary -->

<?php
get_sidebar();
get_footer();

ADDITIONAL READING

EDIT

就更新的代码而言,有两个问题。(我还是不明白你为什么不使用上述解决方案,你把事情弄得太复杂了)

在您的tax_query, 您正在通过检索术语slug, 然而你却在给它起一个词名。您需要将字段更改为name

使用时WP_Query, 您需要利用wp_reset_postdata() 要重置查询,not wp_reset_query() 因为它与query_posts

结束

相关推荐

在归档页面上获取自定义分类帖子 - 小码农CODE - 行之有效找到问题解决它

在归档页面上获取自定义分类帖子

时间:2014-08-27 作者:fahad.kazi

嗨,我不确定这个问题是否可以理解,但我会解释我想要达到的目标。我有一个称为菜单项的自定义帖子类型和称为菜单项类型的自定义分类法。

密码

function create_menu_post_type() 
{
    $labels = array(
        \'name\' => __( \'Food Menu\',\'framework\'),
        \'singular_name\' => __( \'Menu Item\',\'framework\' ),
        \'add_new\' => __(\'Add New\',\'framework\'),
        \'add_new_item\' => __(\'Add New Menu Item\',\'framework\'),
        \'edit_item\' => __(\'Edit Menu Item\',\'framework\'),
        \'new_item\' => __(\'New Menu Item\',\'framework\'),
        \'view_item\' => __(\'View Menu Item\',\'framework\'),
        \'search_items\' => __(\'Search Menu Items\',\'framework\'),
        \'not_found\' =>  __(\'No Menu Item found\',\'framework\'),
        \'not_found_in_trash\' => __(\'No Menu Item found in Trash\',\'framework\'), 
        \'parent_item_colon\' => \'\'
      );

      $args = array(
        \'labels\' => $labels,
        \'public\' => true,
        \'exclude_from_search\' => false,
        \'publicly_queryable\' => true,
        \'show_ui\' => true, 
        \'query_var\' => true,
        \'menu_icon\' => get_template_directory_uri() . \'/images/menu.png\',
        \'capability_type\' => \'post\',
        \'hierarchical\' => false,
        \'menu_position\' => 5,
        \'supports\' => array(\'title\',\'editor\',\'thumbnail\'),
        \'rewrite\' => array( \'slug\' => __(\'menu-item\', \'framework\') )
      ); 

      register_post_type(\'menu-item\',$args);
}
add_action( \'init\', \'create_menu_post_type\' );


function create_menu_item_type_taxonomy(){

    $labels = array(
        \'name\' => __( \'Menu Item Types\', \'framework\' ),
        \'singular_name\' => __( \'Menu Item Type\', \'framework\' ),
        \'search_items\' =>  __( \'Search Menu Item Types\', \'framework\' ),
        \'popular_items\' => __( \'Popular Menu Item Types\', \'framework\' ),
        \'all_items\' => __( \'All Menu Item Types\', \'framework\' ),
        \'parent_item\' => __( \'Parent Menu Item Type\', \'framework\' ),
        \'parent_item_colon\' => __( \'Parent Menu Item Type:\', \'framework\' ),
        \'edit_item\' => __( \'Edit Menu Item Type\', \'framework\' ), 
        \'update_item\' => __( \'Update Menu Item Type\', \'framework\' ),
        \'add_new_item\' => __( \'Add New Menu Item Type\', \'framework\' ),
        \'new_item_name\' => __( \'New Menu Item Type Name\', \'framework\' ),
        \'separate_items_with_commas\' => __( \'Separate Menu Item Types with commas\', \'framework\' ),
        \'add_or_remove_items\' => __( \'Add or Remove Menu Item Types\', \'framework\' ),
        \'choose_from_most_used\' => __( \'Choose from the most used Menu Item Types\', \'framework\' ),
        \'menu_name\' => __( \'Menu Item Types\', \'framework\' )
    );

    register_taxonomy(
        \'menu-item-type\', 
        array( \'menu-item\' ), 
        array(
            \'hierarchical\' => true, 
            \'labels\' => $labels,
            \'show_ui\' => true,
            \'query_var\' => true,
            \'rewrite\' => array(\'slug\' => __(\'menu-item-type\', \'framework\'))
        )
    ); 
}

add_action( \'init\', \'create_menu_item_type_taxonomy\', 0 );
我在“日本人”一词下创建了一个名为“寿司”的帖子。然后在“中国人”一词下创建了名为“周眉”的帖子。我想用不同的术语填充归档帖子。我有一个归档页面,即归档。我在php中填充帖子,但我的代码填充所有术语中的所有帖子。

<?php $loop = new WP_Query( array( \'post_type\' => \'menu-item\', \'posts_per_page\' => -1 ) ); ?>
            <?php while ( $loop->have_posts() ) : $loop->the_post();
                get_template_part( \'content\', get_post_format() );
                endwhile; wp_reset_query();
            ?>

            <?php else : ?>
                <?php get_template_part( \'content\', \'none\' ); ?>
            <?php endif; ?>
我正在通过动态侧栏导航到存档页

<?php dynamic_sidebar( \'Archive\' ); ?>
请注意,我使用了来自主题的自定义帖子类型和分类代码作为参考。此外,如果这是一个无效的问题,请随时发表评论,我将删除该问题,并尝试找到其他解决方案。

添加更清晰的示例

Custom post -> menu-item
menu-item -> 2 posts -> sushi, chow mein
taxonomy -> menu-item-type
menu-item-type -> japenese, chinese
sushi -> japenese
chowmein -> chinese
已更新的查询

<?php 
$current_term = get_term_by( \'slug\', get_query_var(\'term\') ,\'menu-item-type\' );
$loop = new WP_Query( array( \'post_type\' => \'menu-item\', \'posts_per_page\' => -1, \'year\' => $year_filter, \'tax_query\' => array(
                    array( \'taxonomy\' => \'menu-item-type\', \'field\' => \'slug\', \'terms\' => $current_term->name) ) ) ); ?>
                    <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
                                <?php get_template_part( \'content\', get_post_format() ); 
                                endwhile; wp_reset_query();?>
                        <?php else : ?>
                            <div class="no-post"><?php _e( \'Sorry, no posts matched your criteria.\' ); ?></div>
                        <?php endif; ?>

1 个回复
SO网友:Pieter Goosen

如果我理解正确,那么在显示一个术语的页面时,您需要显示该术语的所有帖子。

在我回答真正的问题之前,我想强调几点,因为您是Wordpress的新手

切勿使用连字符(-) 分隔自定义帖子类型名称和自定义分类名称中的名称。以后它们会非常麻烦,特别是在自定义模板方面。如果你真的需要分开名字,only 使用下划线(_)

不要创建多个连接到同一挂钩的实例。将所有相关函数添加到一个函数中,并将该函数添加到所需的挂钩中

好的,现在来看真正的问题。您的问题是自定义查询。绝不应更改任何存档类型页面或主页上自定义查询的主查询。如果需要操作这些页面上的主查询,请使用pre_get_posts 这样做。

要解决您的问题,只需返回归档上的默认循环。php。您还可以创建分类法。将用于自定义分类的php模板

以下是存档或分类页面的外观示例

<?php

get_header(); ?>

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

            <?php if ( have_posts() ) : ?>


            <?php
                    // Start the Loop.
                    while ( have_posts() ) : the_post();

                        get_template_part( \'content\', get_post_format() );

                    endwhile;
                    // Previous/next page navigation.

                    //YOUR PAGINATION FUNCTIONS;

                else :
                    // If no content, include the "No posts found" template.
                    get_template_part( \'content\', \'none\' );

                endif;
            ?>
        </div><!-- #content -->
    </section><!-- #primary -->

<?php
get_sidebar();
get_footer();

ADDITIONAL READING

EDIT

就更新的代码而言,有两个问题。(我还是不明白你为什么不使用上述解决方案,你把事情弄得太复杂了)

在您的tax_query, 您正在通过检索术语slug, 然而你却在给它起一个词名。您需要将字段更改为name

使用时WP_Query, 您需要利用wp_reset_postdata() 要重置查询,not wp_reset_query() 因为它与query_posts

相关推荐