Eine Taxonomie mit einem Post-Typ verbinden

Die Einrichtung:

  • benutzerdefinierte Postart von “Anwalt”
  • benutzerdefinierte Taxonomie von “Spezialität”, die gegen den Posttyp “Anwalt” registriert ist
  • benutzerdefinierter Beitragstyp von ‘Übungsbereich’

Zu jeder Spezialität gibt es einen passenden Übungsbereich. Es gibt jedoch viel mehr Übungsplätze als Spezialgebiete.

Im Idealfall, wenn ich einen Übungsraum (zB Insolvenz) betrachte, wäre ich in der Lage, Anwälte aufzuzählen, die Bankrott als Spezialität haben.

Ich weiß, dass ich das posts2posts plugin verwenden könnte, und eine Verbindung zwischen dem Anwalts-Post-Typ und dem Post-Typ des Übungsbereichs herstellen könnte. Dies würde jedoch bedeuten, dass man die Spezialisierung eines Anwalts im Wesentlichen zweimal festlegt (einmal als Taxonomiebegriff und einmal als posts2post-Verbindung). Gibt es eine Möglichkeit, eine Verbindung zwischen einem Spezialisierungs-Taxonomie-Begriff und dem relevanten Praxisbereich-Beitragstyp herzustellen? Ich könnte einfach annehmen, dass Namen und / oder Schnecken zusammenpassen, aber das ist eine ziemlich hacky / zerbrechliche Lösung.

Ich möchte im Idealfall auch reguläre “Kategorie” -Begriffe mit den verschiedenen “Praxisbereich” -Post-Typen verbinden, um relevante Blog-Einträge auf den einzelnen Übungsbereichs-Seiten (und umgekehrt) aufzulisten.

Vorschläge?

Solutions Collecting From Web of "Eine Taxonomie mit einem Post-Typ verbinden"

Ich habe eine ähnliche Anforderung erfüllt und bis jetzt ist der beste Weg, dies zu tun, indem Sie ein benutzerdefiniertes Feld verwenden, um die verwandte Begriff-ID zu speichern.

Das bedeutet, dass für jeden Post-Typ “Praxisbereich” ein benutzerdefiniertes Feld “Fachbegriff-ID” mit der Begriffs-ID “Spezialität” als Wert existiert.

Hier der Aktions-Hook, um den Begriff für jeden Beitrag zu erstellen

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); } } } 

und die Aktion zum Löschen des Begriffs bei jedem Post löschen

 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'); } } 

Beachten Sie, dass ich “Übungsbereich” als benutzerdefinierten Posttyp und “Übungsgebiet-Begriff” als zugehörige Taxonomie verwendet habe.

Ich hoffe das hilft

Wenn ich Sie richtig verstehe, dann wenn Sie auf der Bankrott ‘Praxis-Bereich’ sind … ‘Konkurs’ wird der Begriff sein, den Sie in der ‘Spezialität’ Taxonomie abfragen wollen.

Sie könnten versuchen, dies auf Ihre ‘single-practice-area.php’ Vorlage zu setzen:

 $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
    "; foreach( $attorneys as $post ) : setup_postdata($post); ?>
  • < ?php the_title(); ?>
  • < ?php endforeach; $post = $tmp_post; echo "
"; endif; ?>