在术语之间切换的最佳方法(自定义分类)

时间:2015-06-09 作者:ensminger

希望在这里学到一些东西。

使用以下代码,我将根据一组已知的自定义术语为每个条件加载一个外部文件。我正在使用has\\u术语检查自定义税“delivery\\u选项”中的特定值。

$taxonomy = \'delivery_option\';

        if(has_term( \'public-delivery\', $taxonomy ) ){
           include_once( CHILD_THEME_DIR . \'/includes/sidebar-part-public.php\');
        } elseif (has_term(\'onsite-delivery\', $taxonomy ) ){
            include_once( CHILD_THEME_DIR . \'/includes/sidebar-part-onsite.php\');
        } elseif (has_term(\'online-delivery\', $taxonomy ) || has_term(\'self-directed-delivery\', $taxonomy ) ){
            include_once( CHILD_THEME_DIR . \'/includes/sidebar-part-online.php\');
        } else {
          echo \'<p>No custom include!</p>\'
        }
它起作用了。但这是最好/最有效的方法吗?我研究过是否可能使用“开关”,但我不确定这将如何工作……”has\\u term“似乎比某些在检查term对象之前返回term对象的方法更有效。

这些术语具有层次性,应相互排斥。任何一个帖子都有一个交付选项。

劝告寻找最佳实践建议或确认我没有越轨。:)

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

如果我正确阅读了您的代码和描述,您可以将其简化为:

$taxonomy = \'delivery_option\';
$do = get_the_terms($post->ID,$taxonomy);
if (!empty($do) && !is_wp_error($do)) {
  $do = array_shift($do); //  assuming a single value as per the description.
  $term = str_replace(\'-delivery\',\'\',$do->slug);
  get_template_part(\'includes/sidebar-part\',$term);
} else {
  echo \'<p>No custom include!</p>\';
}
注意,我用了WordPress的get_template_part() 而不是PHP的include() 因为这是包含模板文件的更正确的方法。

结束

相关推荐

RESTORE_CURRENT_BLOG()与MULTIME SWITCH_TO_BLOG(),然后删除$GLOBALS[‘_wp_Switched_Stack’]

与相关this answer, 哪些国家每次switch_to_blog() 你need 调用restore_current_blog() 否则,WP会认为它处于“切换”模式,并可能返回不正确的数据。我已经做了一些测试,可以确认这是一个问题。(它还回答了我在工作中遇到的一个关于文件上传URL的问题,对此我竖起大拇指。)在我的测试(详情如下)中,我发现有两种方法可以继续:始终配对switch_to_blog() 具有restore_current_blog()</使用switch_to_blog(),