所以我在一个医疗网站上工作,这个网站有一个自定义的帖子类型“医生”。在这个帖子类型中,有“位置”和“过程”的自定义分类法。我已经创建了一个自定义分类位置。php文件来控制我的位置页面的外观,在这个页面上是一些一般信息,如联系信息、地图、相关医生。我还需要列出每个地点提供的所有程序。由于程序附加到每个医生,而不是每个位置,因此我创建了一个函数,其中包含一个循环,用于遍历当前位置标记的所有医生,并输出一个逗号分隔的所有标记程序术语ID列表。见下文:
// Get the doctors procedures
function location_doctors_procedure_loop() {
$tax_slug = get_query_var( \'locations\' );
$args = array(
\'posts_per_page\' => -1,
\'order\' => \'DESC\',
\'post_type\' => \'our_team\',
\'locations\' => $tax_slug
);
// The Query
$the_query = new WP_Query( $args );
// The Loop
if ( $the_query->have_posts() ) {
while ( $the_query->have_posts() ) {
$the_query->the_post();
$terms = get_the_terms( $post, \'procedures\' );
if ( !empty($terms) ) {
foreach( $terms as $term ) {
echo $term->term_id . \',\';
}
}
}
wp_reset_postdata();
}
}
然后,我创建了一个函数,该函数循环遍历所有活动过程分类,并将它们按层次列出为父、子、祖父母。见下文:
// Get the procedures
function tax_location_procedures() {
$doctor_procedures = location_doctors_procedure_loop();
$terms = get_terms( array(
\'taxonomy\' => \'procedures\',
\'hide_empty\' => true,
\'include\' => array( $doctor_procedures ),
) );
echo \'<h2 class="doctor-bio-procedure-condition-header">Procedures</h2>\';
if ( !empty($terms) ) {
echo \'<div class="doctor-bio-procedures">\';
foreach( $terms as $term ) {
if( $term->parent == 0 ) {
?>
<p class="doctor-bio-procedure-condition-sub-header"><?php echo $term->name; ?></p>
<?php
echo \'<ul>\';
foreach( $terms as $childterm ) {
if($childterm->parent == $term->term_id) {
echo \'<li>\' . $childterm->name . \'</li>\';
echo \'<ul>\';
foreach( $terms as $grandchildterm ) {
if($grandchildterm->parent == $childterm->term_id) {
echo \'<li>\' . $grandchildterm->name . \'</li>\';
}
}
echo \'</ul>\';
}
}
echo \'</ul>\';
}
}
echo \'</div>\';
}
}
我要做的是使用我的第一个函数“location\\u doctors\\u procedure\\u loop()”填充“function tax\\u location\\u procedures()”中的“include”参数数组。我遇到的问题是,虽然“location\\u doctors\\u procedure\\u loop()”会回显一个逗号分隔的正确术语ID列表(例如231229),但它对我的“include”参数没有任何作用,因为它回显为字符串而不是整数,所以它的读数为
\'include\' => array(\'231,229,\')
而不是
\'include\' => array(231,229,)
我被困在这个问题上,已经花了一天的大部分时间试图让它正常工作。如果你们能提供任何帮助,我们将不胜感激。
SO网友:Jacob Peattie
所以你需要在location_doctors_procedure_loop()
为此,请执行以下操作:
使用函数返回值,而不是回显值。如果需要将函数的输出赋给变量,或将其用作参数,则需要返回它。echo
将不需要的值输出到屏幕要做到这一点,您需要在循环中建立一个值数组。要做到这一点,请在开始时创建一个空数组,然后在循环中向其添加过程,然后最终返回数组可能不需要,但从数组中删除重复项可能是个好主意但是你可以更进一步。使用这些ID所做的一切就是检索术语。为什么不把全部条款都传递出去,这样就不用打电话了get_terms()
完全通过使用术语ID作为数组的键,可以避免重复。
这是一个应用了所有这些功能的函数版本:
function location_doctors_procedure_loop() {
/**
* Create the array to return at the end.
*/
$procedures = array();
/**
* Get all doctors for the current location.
* We\'re not using template tags, so a custom WP_Query is unnecessary.
*/
$doctors = get_posts( array(
\'posts_per_page\' => -1,
\'order\' => \'DESC\',
\'post_type\' => \'our_team\',
\'locations\' => get_query_var( \'locations\' )
) );
/**
* Loop through each doctor and add its procedures\' to the array.
* If a term is added a second time, it will just replace the original
* because the key is the ID.
*/
foreach ( $doctors as $doctor ) {
$terms = get_the_terms( $doctor, \'procedures\' );
if ( ! empty( $terms ) ) {
foreach( $terms as $term ) {
$procedures[$term->term_id] = $term;
}
}
}
/**
* Return the array.
*/
return $procedures;
}
现在在您的
tax_location_procedures()
函数,您可以直接将其传递给
$terms
:
$terms = location_doctors_procedure_loop();
SO网友:Arpita Hunka
您需要将值转换为整数数组,因为您将在此数组中获取字符串
$doctor_procedures = location_doctors_procedure_loop();
变量。您可以使用以下选项进行转换:
$doctor_procedures_int_val = array_map(\'intval\', explode(\',\', $doctor_procedures));
之后,需要在“include”索引中传递这个新数组变量。
所以现在你得到
\'include\' => array(\'231,229,\')
通过使用
array_map(\'intval\', explode(\',\', \'231,229,\'))
你会得到这个
array(231,229,)
因此需要使用以下内容更新您的函数:
$doctor_procedures = location_doctors_procedure_loop();
$doctor_procedures_int_val = array_map(\'intval\', explode(\',\', $doctor_procedures));
$terms = get_terms( array(
\'taxonomy\' => \'procedures\',
\'hide_empty\' => true,
\'include\' => array( $doctor_procedures_int_val ),
) );
或者您也可以在第一个函数中进行更改。您可以将ID放在一个数组中,而不是回显ID。那么您就不需要执行上述步骤了。
如果你需要更多的澄清,请告诉我。