我有三个习惯\'location\'
构成区域层次结构的帖子类型:
location1, location2, location3.
location1
是顶层,然后
location2
和
location3
是彼此的孩子。例如
location1
可能是建筑,
location2
Floors
, 和
location3
房间。
location2
和location3
具有具有字段的元数据库loc2_parent_location
和loc3_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”,并让工作人员(负责人)在他们的平板电脑上查看请求,然后单击调出计划的位置。
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 )
获取该位置的所有祖先(建筑/楼层)。