数组中的分层自定义帖子类型

时间:2013-10-22 作者:Rizzo

我有三个习惯\'location\' 构成区域层次结构的帖子类型:

location1, location2, location3.
location1 是顶层,然后location2location3 是彼此的孩子。例如location1 可能是建筑,location2 Floors, 和location3 房间。

location2location3 具有具有字段的元数据库loc2_parent_locationloc3_parent_location 分别地我希望创建一个数组,该数组将从自定义帖子类型填充,以显示如下内容:

职位类型参考:

location1 > location2 > location3
回声组件:

Building 1
Building 1 > Floor 1
Building 1 > Floor 1 > Room A
Building 1 > Floor 1 > Room B
Building 1 > Floor 2
Building 1 > Floor 3
Building 2
以下是我正在使用的函数:

function location_types_query ( $query ) {
// get custom post types
$args = array( \'post_type\' => \'location1\' );
$args = array( \'post_type\' => \'location2\' );
$args = array( \'post_type\' => \'location3\' );

// create hierachy relationships
if ($location2) {
    $parent_location = get_post_meta( $post->ID, \'loc2_parent_location\', true );
} elseif ($location3) {
    $parent_location = get_post_meta( $post->ID, \'loc3_parent_location\', true );
} elseif ($location1) {
    $parent_location = \'\';
}

// Run the query
$the_query = new WP_Query( $args );

// The Loop
if ( $the_query->have_posts() ) :
while ( $the_query->have_posts() ) : $the_query->the_post();
  foreach ($location as $locations)

    if (isset($location1)) {
        echo $location1;
    }

    if (isset($location1 && $location2)) {
        echo $location1 . \'>\' . $location2; 
    }

    if (isset($location1 && $location2  && $location3)) {
        echo $location1 . \'>\' . $location2 . \'>\' . $location3; 
    }

    return array($locations);  // output array

endwhile;
endif;

// Reset Post Data
wp_reset_postdata();

}
?>
我应该怎样做才能使这个函数正常工作并输出一个字段数组。

/编辑10月23日-其他信息

@凯撒-最好的方法是打破这一点,就像我正在做一个房地产物业管理网站。我有上面列出的帖子类型。所有选项都是动态的,因此用户可以将系统设置为如上所示:

建筑1建筑1>楼层1建筑1>楼层1>房间A

其中,“1号楼”是cpt位置1的立柱,“1号楼”是cpt位置2的立柱,“a室”是cpt位置3的立柱。

或者可以这样设置

(位置1)>(位置2)>(位置3)//柱式建筑1>楼层1>公寓A//柱式建筑1>楼层1>公寓B

此外,每个帖子类型都有一个元框,其中包含位置详细信息的值
用于。。

位置1:-位置图-负责人

位置2:-位置图-负责人-父位置

位置3:-位置图-负责人-父位置

我已经为我的房地产网站建立了整个位置数据库。我现在想做的是在WP的前端的安全会员区添加一个维护表单,以便租户可以提交维护请求。我决定使用重力表单和多选字段。我需要填充如上所述的数组以显示不同建筑中的不同位置,以便用户可以选择它,然后使用我为位置创建的post type数组填充如下字段:

/*-------------------------------------------------------*/
/* Location
/*-------------------------------------------------------*/
add_filter("gform_pre_render", "gform_prepopluate_populate_location");
add_filter("gform_admin_pre_render", "gform_prepopluate_populate_location");

function gform_prepopluate_populate_location($form){
    $querytype = array(\'location1\', \'location2\', \'location3\')
    $formid = 5;
    $fieldid = 7;

    if($form["id"] != $formid)
        return $form;

    $posts = query_posts( array( \'post_type\' => $querytype ) );
    $items = array(); /* Add Blank */
    $items[] = array("text" => "", "value" => "");

    foreach($posts as $post)
        $items[] = array("value" => $post->ID, "text" => $post->post_title);

    foreach($form["fields"] as &$field)
        if($field["id"] == $fieldid ){            
            $field["choices"] = $items;
        }
    return $form;

}
然后,我可以将表单结果作为自定义帖子类型返回,说“maintenance\\u requests”,并让工作人员(负责人)在他们的平板电脑上查看请求,然后单击调出计划的位置。

2 个回复
最合适的回答,由SO网友:codearachnid 整理而成

似乎您希望实现的是一个简单的父/子关系,有*个级别。我在下属岗位工作时也遇到过类似的情况https://github.com/codearachnid/wp-subordinate-post. 我解决层次结构(甚至允许深度永久对齐)的方法是利用post_parent 领域根据您的陈述,似乎有几个额外的关联,例如将(维护/销售)人员挂在一个覆盖多个房间的楼层上等。然而,要回答您的主要问题似乎是,如果您处理的层次结构将解决列表中的关系?

因此,为了生成有序数组,我建议按父级为子级设置循环查询。

SO网友:kaiser

你的问题主要是"XY Problem". 只要有三种帖子类型,每栋楼一种,或者只有一个名为“房间”,你的生活就会轻松得多。然后为其指定不同的位置(建筑/楼层)。您可以向术语添加描述,并将其输出到正确的位置。更简单、更“本地”的方式,因为像同一栋建筑或楼层这样的共享内容应该是分类术语。通过使其层次化,您可以在其下方召唤房间。

换句话说,您的“房间”将被分配一个“楼层”和一个“建筑”。或者更好(如果您希望能够指定楼层平面或任何楼层独有的附加信息,那么您只需指定一个具有父项的楼层,并将相应建筑名称的名称作为项即可。

A栋1A层B栋1B层例如,房间

定制柱式“房间”>房间名称:“Philip K.Dick Congress Room”| 2B层

父术语“Building B”可以在上下文中调用(它已经连接到该术语)。

优点是,您可以轻松添加以下内容:“您正在搜索…”

“同一楼层的其他房间”等。如果有人在正确的楼层,但在错误的大楼等,可能更容易纠正错误。可能性无穷。

注册正确的方法首先查看register_taxonomy() 这是争论。您会注意到,您可以添加一个hierarchical 因为内置的“类别”分类法是:

register_taxonomy( \'rooms\', 
    array(
        \'location1\',
        \'location2\',
        \'location3\',
    ),
    array(
        \'hierarchical\' => \'true\',
        // other arguments
        \'rewrite\'      => array(
            \'slug\'         => \'floor\',
            \'with_front\'   => true,
            \'hierarchical\' => true,
        ),
        \'labels\'       => array(
            \'name\'          => __( \'Rooms\', \'your_textdomain\' ),
            \'singular_name\' => __( \'Room\', \'your_textdomain\' ),
            \'parent_item\'   => __( \'Floor\', \'your_textdomain\' ),
        ),
    )

);
Important: 确保在注册分类法和post类型时正确地相互注册它们。确保你这么早就开始init 优先权为0. More info about that here.

正在执行tax_query

然后看WP_Query 参数。

您可以简单地按多个帖子类型进行查询:

$locations = new WP_Query( array(
    \'post_type\' => array(
        \'location1\',
        \'location2\',
        \'location3\',
    ),
    \'tax_query\' => array(
        \'realation\' => \'OR\',
        array( 
            \'taxonomy\' => \'rooms\',
            \'field\'    => \'slug\',
            \'terms\'    => array(
                \'roomA\',
                \'roomB\',
            ),
        ),
    ),
) );
循环和术语祖先,然后您可以循环新的$location 环每次你打电话给邮局,你可以get_ancestors( $termID, $taxonomyName ) 获取该位置的所有祖先(建筑/楼层)。

结束

相关推荐

rewrite rules hierarchical

我希望我的WordPress遵循以下规则:/productes/ 包含所有产品的页面/productes/[category]/ 包含该类别所有产品的分类页面/productes/[category]/[subcategory]/ 包含该类别所有产品(与2相同)的分类页面/[productes]/[category]/[product]/ A.single-productes.php 将显示类别产品/[productes]/[category]/[subcategory]/[product]/ A.sin