将分类与帖子类型相关联

时间:2012-03-06 作者:Travis Northcutt

设置:

“律师”的自定义职位类型“专业”的自定义分类法,与“律师”职位类型“实习区”的自定义职位类型相对应,每个专业都有一个匹配的实习区。然而,实践领域比专业领域多得多。

理想的情况是,当我查看一个实践领域(比如破产)时,我能够将破产律师列为专业律师。

我知道我可以使用posts2posts插件,在律师职位类型和实践领域职位类型之间创建连接。然而,这实际上意味着要设置两次律师专业(一次作为分类术语,一次作为posts2posts连接)。有没有办法在专业分类术语和相关实践领域职位类型之间建立联系?我可以简单地假设名字和/或鼻涕虫会匹配,但这是一个相当粗糙/脆弱的解决方案。

理想情况下,我希望将常规的“类别”术语与各种“练习区”帖子类型联系起来,在各个练习区页面上列出相关的博客帖子(反之亦然)。

建议?

2 个回复
SO网友:ifdion

我已经处理了一个类似的需求,到目前为止,最好的方法是使用自定义字段来保存相关的术语id。

这意味着对于每个“实践领域”职位类型,将有一个“专业术语id”自定义字段,其中“专业”术语id为值。

这里是为每个帖子创建术语的操作挂钩

add_action( \'save_post\', \'update_related_term\');
function update_related_term($post_id) {
$post_type_as_taxonomy = array(\'practice-area\');
$post = get_post( $post_id );
if(in_array($post->post_type, $post_type_as_taxonomy) && $post->post_status==\'publish\'){
    $term_args[\'name\'] = $post->post_title;
    $term_args[\'slug\'] = $post->post_name.\'\';
    $term_id = get_post_meta($post_id, $post->post_type.\'-term-id\', true);
    if($term_id){
        $term = wp_update_term( $term_id, $post->post_type.\'-term\', $term_args );
    } else {
        $term = wp_insert_term( $term_args[\'name\'], $post->post_type.\'-term\', $term_args );
        $meta_status = add_post_meta($post_id, $post->post_type.\'-term-id\', $term[\'term_id\'], true);
    }

}
}
以及删除每个帖子上的术语的操作删除

add_action(\'admin_init\', \'codex_init\');
function codex_init() {
if (current_user_can(\'delete_posts\')){
    add_action(\'before_delete_post\', \'delete_related_term\', 10);
}
}
function delete_related_term($post_id) {
$post_type_as_taxonomy = array(\'practice-area\');
$post = get_post( $post_id );
if (in_array($post->post_type, $post_type_as_taxonomy)) {
    $term = get_post_meta($post_id, $post->post_type.\'-term-id\', true);
    wp_delete_term( $term, $post->post_type.\'-term\');
}
}
注意,我使用“实践领域”作为自定义帖子类型,“实践领域术语”作为相关分类法。

希望这有帮助

SO网友:helgatheviking

如果我理解正确的话,那么当你在破产“实践领域”时“破产”将是您想在“专业”分类中查询的术语。

你可以试着把这个放在你的“单一练习区”。php模板:

$args = array( \'post_type\'=>\'attorney\',
    \'tax_query\' => array(

        array(
            \'taxonomy\' => \'specialty\',
            \'terms\' => get_query_var(\'practice-area\'), //get current practice-area\'s name
            \'field\' => \'slug\',
        )
    )
);

$attorneys = get_posts($args);

global $post;
$tmp_post = $post;

if( $attorneys ) : echo "Attorneys<ul>";
foreach( $attorneys as $post ) : setup_postdata($post); ?>
    <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endforeach; 
$post = $tmp_post; 
echo "</ul>";
endif; ?>

结束

相关推荐

将分类与帖子类型相关联 - 小码农CODE - 行之有效找到问题解决它

将分类与帖子类型相关联

时间:2012-03-06 作者:Travis Northcutt

设置:

“律师”的自定义职位类型“专业”的自定义分类法,与“律师”职位类型“实习区”的自定义职位类型相对应,每个专业都有一个匹配的实习区。然而,实践领域比专业领域多得多。

理想的情况是,当我查看一个实践领域(比如破产)时,我能够将破产律师列为专业律师。

我知道我可以使用posts2posts插件,在律师职位类型和实践领域职位类型之间创建连接。然而,这实际上意味着要设置两次律师专业(一次作为分类术语,一次作为posts2posts连接)。有没有办法在专业分类术语和相关实践领域职位类型之间建立联系?我可以简单地假设名字和/或鼻涕虫会匹配,但这是一个相当粗糙/脆弱的解决方案。

理想情况下,我希望将常规的“类别”术语与各种“练习区”帖子类型联系起来,在各个练习区页面上列出相关的博客帖子(反之亦然)。

建议?

2 个回复
SO网友:ifdion

我已经处理了一个类似的需求,到目前为止,最好的方法是使用自定义字段来保存相关的术语id。

这意味着对于每个“实践领域”职位类型,将有一个“专业术语id”自定义字段,其中“专业”术语id为值。

这里是为每个帖子创建术语的操作挂钩

add_action( \'save_post\', \'update_related_term\');
function update_related_term($post_id) {
$post_type_as_taxonomy = array(\'practice-area\');
$post = get_post( $post_id );
if(in_array($post->post_type, $post_type_as_taxonomy) && $post->post_status==\'publish\'){
    $term_args[\'name\'] = $post->post_title;
    $term_args[\'slug\'] = $post->post_name.\'\';
    $term_id = get_post_meta($post_id, $post->post_type.\'-term-id\', true);
    if($term_id){
        $term = wp_update_term( $term_id, $post->post_type.\'-term\', $term_args );
    } else {
        $term = wp_insert_term( $term_args[\'name\'], $post->post_type.\'-term\', $term_args );
        $meta_status = add_post_meta($post_id, $post->post_type.\'-term-id\', $term[\'term_id\'], true);
    }

}
}
以及删除每个帖子上的术语的操作删除

add_action(\'admin_init\', \'codex_init\');
function codex_init() {
if (current_user_can(\'delete_posts\')){
    add_action(\'before_delete_post\', \'delete_related_term\', 10);
}
}
function delete_related_term($post_id) {
$post_type_as_taxonomy = array(\'practice-area\');
$post = get_post( $post_id );
if (in_array($post->post_type, $post_type_as_taxonomy)) {
    $term = get_post_meta($post_id, $post->post_type.\'-term-id\', true);
    wp_delete_term( $term, $post->post_type.\'-term\');
}
}
注意,我使用“实践领域”作为自定义帖子类型,“实践领域术语”作为相关分类法。

希望这有帮助

SO网友:helgatheviking

如果我理解正确的话,那么当你在破产“实践领域”时“破产”将是您想在“专业”分类中查询的术语。

你可以试着把这个放在你的“单一练习区”。php模板:

$args = array( \'post_type\'=>\'attorney\',
    \'tax_query\' => array(

        array(
            \'taxonomy\' => \'specialty\',
            \'terms\' => get_query_var(\'practice-area\'), //get current practice-area\'s name
            \'field\' => \'slug\',
        )
    )
);

$attorneys = get_posts($args);

global $post;
$tmp_post = $post;

if( $attorneys ) : echo "Attorneys<ul>";
foreach( $attorneys as $post ) : setup_postdata($post); ?>
    <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endforeach; 
$post = $tmp_post; 
echo "</ul>";
endif; ?>

相关推荐