Wie zeige ich Kategorien meines benutzerdefinierten Beitragstyps an?

7

Ich habe einen benutzerdefinierten Beitragstyp. Ich möchte die Projektkategorien direkt über den Projekten anzeigen, damit die Besucher die Projekte entsprechend filtern können.

In meinem habe functions.phpich:

<?php

require_once('portfolio-type.php');
add_filter('excerpt_length', 'my_excerpt_length');

function my_excerpt_length($length) {
return 25; 
}

add_filter('excerpt_more', 'new_excerpt_more');  
function new_excerpt_more($text){  

return ' ';  
}  

function portfolio_thumbnail_url($pid){
$image_id = get_post_thumbnail_id($pid);  
$image_url = wp_get_attachment_image_src($image_id,'screen-shot');  
return  $image_url[0];  
}
?>

In portfolio-type.php:

 <?php

 if ( function_exists( 'add_theme_support' ) ) { 
add_theme_support( 'post-thumbnails' );
set_post_thumbnail_size( 270, 170, true ); // Normal post thumbnails
add_image_size( 'screen-shot', 720, 540 ); // Full size screen
 }

 add_action('init', 'portfolio_register');  

 function portfolio_register() {  
 $args = array(  
    'label' => __('Portfolio'),  
    'singular_label' => __('Project'),  
    'public' => true,  
    'show_ui' => true,  
    'capability_type' => 'post',  
    'hierarchical' => false,  
    'rewrite' => true,  
    'supports' => array('title', 'editor', 'thumbnail')  
   );  

register_post_type( 'portfolio' , $args );  
 }  

register_taxonomy("project-type", array("portfolio"), array("hierarchical"  =>  true, "label" => "Project Types", "singular_label" => "Project Type",   "rewrite" => true));
 ?>

Und schließlich habe ich in meiner index.php:

<!-- Start Projects -->

                    <div id="posts" class="row isotope">

                      <?php if (have_posts()) : while (have_posts()) : the_post(); ?>  

                          <?php  
                              $title= str_ireplace('"', '', trim(get_the_title()));  
                              $desc= str_ireplace('"', '', trim(get_the_content()));  
                          ?>     

                          <div class="item post item span4 isotope-item">

                            <a class="project-wrp fancybox" title="<?=$title?>" rel="lightbox[work]" href="<?php print portfolio_thumbnail_url($post->ID) ?>"><div class="profile-photo"><div class="profile-icon">&#0102;</div><?php the_post_thumbnail(array('230','170'),array('alt' => '')); ?> </div>  
                            <div class="project-name"><?php echo $title; ?></div>
                            <div class="project-client"><?php echo $desc; ?></div>
                            </a>
                          </div>  
                      <?php endwhile; endif; ?>  


                    </div>
Laniakea
quelle

Antworten:

15

Entfernen Sie Ihren Code aus der Datei portal-type.php, in der der Post-Typ und die Taxonomie registriert sind (ab Zeile 9).

Verwenden Sie den folgenden Code (in Portfolio-Typ.php), um den Beitragstyp "Portfolio" zu registrieren.

function portfolio_register() {
    $labels = array(
        'name' => _x('Portfolio', 'post type general name'),
        'singular_name' => _x('Portfolio Item', 'post type singular name'),
        'add_new' => _x('Add New', 'portfolio item'),
        'add_new_item' => __('Add New Portfolio Item'),
        'edit_item' => __('Edit Portfolio Item'),
        'new_item' => __('New Portfolio Item'),
        'view_item' => __('View Portfolio Item'),
        'search_items' => __('Search Portfolio Items'),
        'not_found' =>  __('Nothing found'),
        'not_found_in_trash' => __('Nothing found in Trash'),
        'parent_item_colon' => ''
    );
    $args = array(
        'labels' => $labels,
        'public' => true,
        'publicly_queryable' => true,
        'show_ui' => true,
        'query_var' => true,
        'rewrite' => true,
        'capability_type' => 'post',
        'hierarchical' => false,
        'menu_position' => 8,
        'supports' => array('title','editor','thumbnail')
    ); 
    register_post_type( 'portfolio' , $args );
}
add_action('init', 'portfolio_register');

Verwenden Sie den folgenden Code (in Portfolio-Typ.php), um eine Taxonomie "Portfolio_Kategorien" für den Beitragstyp "Portfolio" zu registrieren und hierarchisch zu gestalten (wie Kategorien).

function create_portfolio_taxonomies() {
    $labels = array(
        'name'              => _x( 'Categories', 'taxonomy general name' ),
        'singular_name'     => _x( 'Category', 'taxonomy singular name' ),
        'search_items'      => __( 'Search Categories' ),
        'all_items'         => __( 'All Categories' ),
        'parent_item'       => __( 'Parent Category' ),
        'parent_item_colon' => __( 'Parent Category:' ),
        'edit_item'         => __( 'Edit Category' ),
        'update_item'       => __( 'Update Category' ),
        'add_new_item'      => __( 'Add New Category' ),
        'new_item_name'     => __( 'New Category Name' ),
        'menu_name'         => __( 'Categories' ),
    );

    $args = array(
        'hierarchical'      => true, // Set this to 'false' for non-hierarchical taxonomy (like tags)
        'labels'            => $labels,
        'show_ui'           => true,
        'show_admin_column' => true,
        'query_var'         => true,
        'rewrite'           => array( 'slug' => 'categories' ),
    );

    register_taxonomy( 'portfolio_categories', array( 'portfolio' ), $args );
}
add_action( 'init', 'create_portfolio_taxonomies', 0 );

Verwenden Sie dann den folgenden Code, um Taxonomiebegriffe in Vorlagendateien abzurufen (z. B. index.php).

<?php

$taxonomy = 'portfolio_categories';
$terms = get_terms($taxonomy); // Get all terms of a taxonomy

if ( $terms && !is_wp_error( $terms ) ) :
?>
    <ul>
        <?php foreach ( $terms as $term ) { ?>
            <li><a href="<?php echo get_term_link($term->slug, $taxonomy); ?>"><?php echo $term->name; ?></a></li>
        <?php } ?>
    </ul>
<?php endif;?>

?>

Lassen Sie mich wissen, wenn Sie weitere Informationen benötigen.

Rahul Verma
quelle
Ich habe den Code in meiner Portfolio-type.php durch den von Ihnen angegebenen Code ersetzt und die Kategorien angezeigt, aber sie filtern die Projekte aus irgendeinem Grund nicht.
Laniakea
Die ersten beiden von mir bereitgestellten Codefragmente betrafen die Back-End-Funktionalität. Mit dem dritten von mir bereitgestellten Snippet können Sie die Kategorienamen abrufen. Lassen Sie mich Ihre Website noch einmal durchgehen und sehen, was Sie jetzt vermissen.
Rahul Verma
Wäre es Ihnen möglich, den PHP-Code (für den gesamten Portfolio-Bereich), den Sie jetzt haben, zu veröffentlichen?
Rahul Verma
Ich habe den Code hier festgeschrieben .
Laniakea
Ich werde einen neuen Thread bezüglich der Filterung von Kategorien starten.
Laniakea
0

Verwenden Sie für diese Liste der Portfolio-Post-Kategorien:

<?php echo get_the_term_list(get_the_ID(), 'portfolio_category', '', ', ', ''); ?>
Adam Pery
quelle