it-swarm.com.de

Wie kann ich nach Taxonomie auf der Seite eines benutzerdefinierten Beitragstyps filtern?

Im Moment gebe ich die entsprechenden Kategorien für den aktuell angezeigten Beitragstyp aus, wie unten gezeigt. Ich benutze wp_list_categories, um die Kategorien aufzulisten, und es funktioniert einwandfrei. Das einzige Problem ist, dass dies in archive.php und nicht in einem einzelnen Beitrag angezeigt wird, sodass die aufgelisteten Taxonomien mit ihrem Haupttaxonomiearchiv verknüpft sind.

Ich möchte einen Link zum Taxonomiearchiv für den aktuellen Beitragstyp ($type) sowie die Abfrage zum Anzeigen dieser bestimmten Taxonomie einfügen. Ähnlich wie bei der Verknüpfung mit http://example.com?post_type=foo&custom_tax=bar

<? $type = get_post_type(); ?>
                <?php 

                $customPostTaxonomies = get_object_taxonomies($type);

                if(count($customPostTaxonomies) > 0)
                {
                echo '<h3>Browse By:</h3>';
                     foreach($customPostTaxonomies as $tax)
                     {
                         $args = array(
                              'orderby' => 'name',
                              'show_count' => 0,
                              'pad_counts' => 0,
                              'hierarchical' => 1,
                              'taxonomy' => $tax,
                              'title_li' => ''
                            );
                         $woah = get_taxonomy($tax);
                        echo '<ul>';
                        //var_dump($tax);
                        //var_dump($woah);
                        //print_r($woah);
                        echo '<h4>'.$woah->labels->name.'</h4>';
                        echo wp_list_categories( $args );
                        echo '</ul>';
                     }
                }

                ?>`
1
neoian

wp_list_categories verwendet get_term_link, um den Link zu den Begriffen abzurufen.

Diese Funktion verfügt über einen Filter, mit dem Sie ändern können, was zurückgegeben wird. Ein Problem ist, dass Sie den aktuellen Beitragstyp an die Funktion übergeben müssen, die sich in den Filter einhakt, aber eine globale Variable sollte für den Bereich funktionieren.

Natürlich müssen Sie den Filter nach allen wp_list_categories Aufrufen entfernen, um die nächste Klasse von get_term_link nicht zu stören.

Also, in deinen functions.php schreibe:

function convert_term_link_to_post_type( $termlink, $term, $taxonomy ) {
  global $the_current_type;
  if ( empty($the_current_type) ) return $termlink;
  $link = get_post_type_archive_link( $the_current_type );
  if ( $taxonomy == 'category') $taxonomy = "category_name";
  if ( $link ) return add_query_arg( array($taxonomy => $term->slug), $link );
  return $termlink;
}

Dann ändere den Code, den du gepostet hast, so:

$type = get_post_type();
$customPostTaxonomies = get_object_taxonomies($type);
if( count($customPostTaxonomies) > 0) {
  echo '<h3>Browse By:</h3>';
  // set the global variable
  global $the_current_type;
  $the_current_type = $type;
  // add the filter that convert the term link
  add_filter('term_link', 'convert_term_link_to_post_type', 20, 3);
  foreach($customPostTaxonomies as $tax) {
    $woah = get_taxonomy($tax);
    $args = array(
      'orderby' => 'name',
      'show_count' => 0,
      'pad_counts' => 0,
      'hierarchical' => 1,
      'taxonomy' => $tax,
      'title_li' => ''
    );
    echo '<ul>';
    echo '<h4>' . $woah->labels->name . '</h4>';
    echo wp_list_categories( $args );
    echo '</ul>';
  }
  // unset the global variable
  unset($the_current_type);
  // remove the filter to not alter any other 'get_term_link' calls
  remove_filter('term_link', 'convert_term_link_to_post_type', 20, 3);
}
2
gmazzap