需要将术语ID字符串转换为逗号分隔的整数,以便在参数数组中使用

时间:2018-03-14 作者:walnut-guru

所以我在一个医疗网站上工作,这个网站有一个自定义的帖子类型“医生”。在这个帖子类型中,有“位置”和“过程”的自定义分类法。我已经创建了一个自定义分类位置。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,)
我被困在这个问题上,已经花了一天的大部分时间试图让它正常工作。如果你们能提供任何帮助,我们将不胜感激。

4 个回复
SO网友:WebElaine

您应该能够更改这些行

if ( !empty($terms) ) {
    foreach( $terms as $term ) {
        echo $term->term_id . \',\'; 
    }

}
对此:

if ( !empty($terms) ) {
    // create an empty array
    $procedures_to_include = array();
    foreach( $terms as $term ) {
        // now instead of echoing, add each term to the array
        $procedures_to_include[] = $term->term_id;
    }

}
基本上,您不需要手动回显,而是从创建阵列开始get_terms 您可以使用的电话$procedures_to_include 直接:

$terms = get_terms( array(
    \'taxonomy\'      =>  \'procedures\',
    \'hide_empty\'    =>  true,
    \'include\'       =>  $procedures_to_include
) );

SO网友:Jacob Peattie

所以你需要在location_doctors_procedure_loop() 为此,请执行以下操作:

使用函数返回值,而不是回显值。如果需要将函数的输出赋给变量,或将其用作参数,则需要返回它。echo 将不需要的值输出到屏幕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网友:Stender

将逗号分隔的字符串转换为如下数组:

$inclusionArray = explode(\',\', $doctor_procedures);
然后使用该数组。

\'include\'    => $inclusionArray

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。那么您就不需要执行上述步骤了。

如果你需要更多的澄清,请告诉我。

结束

相关推荐

Loop inside query

我有一个数组来存储分类法和查询术语,但我不能使用foreach在tax\\u查询中循环我的数组。我拿到了505内线。 $query = array( \'post_type\' => $post_type, \'posts_per_page\' => -1, ); $query[\'tax_query\'] = array( \'relation\' => \'OR\

需要将术语ID字符串转换为逗号分隔的整数,以便在参数数组中使用 - 小码农CODE - 行之有效找到问题解决它

需要将术语ID字符串转换为逗号分隔的整数,以便在参数数组中使用

时间:2018-03-14 作者:walnut-guru

所以我在一个医疗网站上工作,这个网站有一个自定义的帖子类型“医生”。在这个帖子类型中,有“位置”和“过程”的自定义分类法。我已经创建了一个自定义分类位置。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,)
我被困在这个问题上,已经花了一天的大部分时间试图让它正常工作。如果你们能提供任何帮助,我们将不胜感激。

4 个回复
SO网友:WebElaine

您应该能够更改这些行

if ( !empty($terms) ) {
    foreach( $terms as $term ) {
        echo $term->term_id . \',\'; 
    }

}
对此:

if ( !empty($terms) ) {
    // create an empty array
    $procedures_to_include = array();
    foreach( $terms as $term ) {
        // now instead of echoing, add each term to the array
        $procedures_to_include[] = $term->term_id;
    }

}
基本上,您不需要手动回显,而是从创建阵列开始get_terms 您可以使用的电话$procedures_to_include 直接:

$terms = get_terms( array(
    \'taxonomy\'      =>  \'procedures\',
    \'hide_empty\'    =>  true,
    \'include\'       =>  $procedures_to_include
) );

SO网友:Jacob Peattie

所以你需要在location_doctors_procedure_loop() 为此,请执行以下操作:

使用函数返回值,而不是回显值。如果需要将函数的输出赋给变量,或将其用作参数,则需要返回它。echo 将不需要的值输出到屏幕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网友:Stender

将逗号分隔的字符串转换为如下数组:

$inclusionArray = explode(\',\', $doctor_procedures);
然后使用该数组。

\'include\'    => $inclusionArray

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。那么您就不需要执行上述步骤了。

如果你需要更多的澄清,请告诉我。

相关推荐

Increase offset while looping

我正在编写一个自定义帖子插件,它将自定义帖子分组显示为选项卡。每组4个岗位。是否可以编写一个偏移量随每次循环而增加的查询?因此,结果将是:-第一个查询显示从1到4的帖子-第二个查询显示从5到8的帖子-第三个查询显示从9到12的帖子等。 <div class=\"official-matters-tabs\"> <?php $args = array(\'post_type\' => \'official-matters\', \'showp