关于定制帖子类型/分类关系的建议

时间:2017-05-27 作者:Ashish

我在一个旅游网站上工作,那里有三个参数:目的地、活动和套餐。

目的地是指旅行的国家,如:美国、新加坡、瑞士等。

活动是指可以在该国境内进行的活动,如:徒步旅行、漂流、旅游、攀登。

而且,套餐包括活动中的实际套餐,如:瑞士徒步旅行、尼泊尔漂流等。

因此,目的地可能包含多个活动,而活动可能包含多个包

我想到了两种方法:一种是创建三种帖子类型:目的地、活动和包,并维护它们之间的关系。

另一种方法是:为单个post类型包创建两个分类法:目的地和活动。维护他们之间的关系。

哪种方式更好?是否可以按照我在WordPress中的要求维护关系?如果是的话,如果有人能给我一些线索就好了。或者还有其他解决方案。

3 个回复
SO网友:Roshan Deshapriya

@asis,使用下面的函数。php添加CPT“travel”和tamx。。在它下面。


function travel() 
{
              $labels = array(
                \'name\' => _x(\'travel\', \'post type general name\'),
                \'singular_name\' => _x(\'Project\', \'post type singular name\'),
                \'add_new\' => _x(\'Add New project\', \'Project\'),
                \'add_new_item\' => __(\'Add New Project\'),
                \'edit_item\' => __(\'Edit Project\'),
                \'new_item\' => __(\'New Project\'),
                \'all_items\' => __(\'All travel\'),
                \'view_item\' => __(\'View Project\'),
                \'search_items\' => __(\'Search travel\'),
                \'not_found\' =>  __(\'No travel found\'),
                \'not_found_in_trash\' => __(\'No travel found in Trash\'), 
                \'parent_item_colon\' => \'\',
                \'menu_name\' => __(\'travel\')
              );
              $args = array(
                \'labels\' => $labels,
                \'public\' => true,
                \'publicly_queryable\' => true,
                \'show_ui\' => true, 
                \'show_in_menu\' => true, 
                \'query_var\' => true,
                \'rewrite\' => true,
                \'capability_type\' => \'post\',
                \'has_archive\' => true, 
                \'hierarchical\' => false,
                \'menu_position\' => 6, 
                \'menu_icon\' => \'\',               
                \'supports\' => array( \'title\', \'editor\', \'thumbnail\',\'comments\')

              ); 
              register_post_type(\'travel\',$args);
}
add_action( \'init\', \'travel\' );
function travel_taxonomies() 
{
            // Add new taxonomy, make it hierarchical (like categories)
            $labels = array(
                \'name\'              => _x( \'destinations\', \'taxonomy general name\' ),
                \'singular_name\'     => _x( \'destinations\', \'taxonomy singular name\' ),
                \'search_items\'      => __( \'Search destinations\' ),
                \'all_items\'         => __( \'All destinations\' ),
                \'parent_item\'       => __( \'Parent destinations\' ),
                \'parent_item_colon\' => __( \'Parent destinations:\' ),
                \'edit_item\'         => __( \'Edit destinations\' ),
                \'update_item\'       => __( \'Update destinations\' ),
                \'add_new_item\'      => __( \'Add New destination\' ),
                \'new_item_name\'     => __( \'New destination Name\' ),
                \'menu_name\'         => __( \'Destinations\' ),
            );
            $args = array(
                \'hierarchical\'      => true,
                \'labels\'            => $labels,
                \'show_ui\'           => true,
                \'show_admin_column\' => true,
                \'query_var\'         => true,
                \'rewrite\'           => array( \'slug\' => \'destinations\' ),
            );
            register_taxonomy( \'destinations\', array(\'travel\' ), $args );
            // 2nd taxo.. runs here           
            $labels = array(
                \'name\'              => _x( \'activities\', \'taxonomy general name\' ),
                \'singular_name\'     => _x( \'activities\', \'taxonomy singular name\' ),
                \'search_items\'      => __( \'Search activities\' ),
                \'all_items\'         => __( \'All activities\' ),
                \'parent_item\'       => __( \'Parent activities\' ),
                \'parent_item_colon\' => __( \'Parent activities:\' ),
                \'edit_item\'         => __( \'Edit activities\' ),
                \'update_item\'       => __( \'Update activities\' ),
                \'add_new_item\'      => __( \'Add New activity\' ),
                \'new_item_name\'     => __( \'New activity Name\' ),
                \'menu_name\'         => __( \'Activities\' ),
            );
            $args = array(
                \'hierarchical\'      => true,
                \'labels\'            => $labels,
                \'show_ui\'           => true,
                \'show_admin_column\' => true,
                \'query_var\'         => true,
                \'rewrite\'           => array( \'slug\' => \'activities\' ),
            );
            register_taxonomy( \'activities\', array(\'travel\' ), $args );      
            // 3rd taxo.. runs here
            $labels = array(
                \'name\'              => _x( \'packages\', \'taxonomy general name\' ),
                \'singular_name\'     => _x( \'packages\', \'taxonomy singular name\' ),
                \'search_items\'      => __( \'Search packages\' ),
                \'all_items\'         => __( \'All packages\' ),
                \'parent_item\'       => __( \'Parent packages\' ),
                \'parent_item_colon\' => __( \'Parent packages:\' ),
                \'edit_item\'         => __( \'Edit packages\' ),
                \'update_item\'       => __( \'Update packages\' ),
                \'add_new_item\'      => __( \'Add New package\' ),
                \'new_item_name\'     => __( \'New package Name\' ),
                \'menu_name\'         => __( \'Packages\' ),
            );
            $args = array(
                \'hierarchical\'      => true,
                \'labels\'            => $labels,
                \'show_ui\'           => true,
                \'show_admin_column\' => true,
                \'query_var\'         => true,
                \'rewrite\'           => array( \'slug\' => \'packages\' ),
            );
            register_taxonomy( \'packages\', array(\'travel\' ), $args );



}
// hook 
add_action( \'init\', \'travel_taxonomies\', 0 );

SO网友:Carl Elder

就我个人而言,我认为将包作为父分类法进行管理,将目的地/活动作为子分类法进行管理会更容易。这完全取决于你相信你的用户会如何处理你的内容,以及你打算如何上传和显示它。

例如,如果您要为每个包创建多个帖子,然后为每个目的地和活动创建子帖子-您可以通过为父帖子分配一个“包”类别,然后添加“目的地”和“活动”作为子类别,并将它们分配给各自的帖子,轻松实现您想要的内容。

这可以直接从编辑后屏幕或仪表板中的类别工具完成。

当然,如果您需要这些包的唯一模板(或您决定用作父对象的任何模板),那么我建议为父类型使用自定义帖子类型,并为子类型使用类别或标记。

这将简化您的注册和查询,从而不用注册3种独特的帖子类型,只需注册一种即可。当查询post类型“Packages”(或其他类型)时,您可以很容易地指定要提取该post类型的哪个类别。

下面是一个示例:

$args = array(
    \'post_type\' => \'packages\',
    \'category_name\' => \'activities\'
);
$query = new WP_Query( $args );
接下来是一个循环,或者指定一个满足模板需要的帖子,如果你觉得有必要,可以添加更多的参数来衡量,这样就可以了。

Here\'s a query reference.

SO网友:Roshan Deshapriya

在其下创建1个帖子类型(包)和3个分类法,每个都可以有您想要的任何类别,以后您可以根据它们的“目的地、活动或任何内容”将其用于钩子过滤器。

如果您需要帮助创建这些,请告诉我。

结束

相关推荐