2013-05-17 22 views
6

Próbowałem od kilku dni, aby utworzyć niestandardowy typ wpisu z kategoriami. Do tej pory mam to działa i mogę łatwo dodawać treści i przypisywać je do kategorii. Mój kod znajduje się poniżej.Niestandardowe typy postów i kategorie

Czego nie rozumiem i nie mogę działać, to tworzenie strony archiwum wyświetlającej posty w danej kategorii.
Na przykład: Mój typ wpisu nazywa się . Reklamy. Moja kategoria nazywa się Fotografowie.

Czy możliwe jest dynamiczne wyliczenie przez stronę kategorii, w której się znajdujesz i wyświetlanie wszystkich niestandardowych wpisów należących do tej kategorii?

function my_custom_post_advert() { 
    $labels = array(
     'name'    => _x('Adverts', 'post type general name'), 
     'singular_name'  => _x('Advert', 'post type singular name'), 
     'add_new'   => _x('Add New', 'advert'), 
     'add_new_item'  => __('Add New Advert'), 
     'edit_item'   => __('Edit Advert'), 
     'new_item'   => __('New Advert'), 
     'all_items'   => __('All Adverts'), 
     'view_item'   => __('View Advert'), 
     'search_items'  => __('Search Adverts'), 
     'not_found'   => __('No adverts found'), 
     'not_found_in_trash' => __('No adverts found in the Trash'), 
     'parent_item_colon' => '', 
     'menu_name'   => 'Adverts' 
    ); 
    $args = array(
     'labels'  => $labels, 
     'description' => 'Holds our adverts and advert specific data', 
     'public'  => true, 
     'menu_position' => 5, 
     'supports'  => array('title', 'editor', 'thumbnail', 'excerpt', 'category'), 
     'has_archive' => true, 
    ); 
    register_post_type('advert', $args); 
} 
add_action('init', 'my_custom_post_advert'); 

function my_taxonomies_advert() { 
    $labels = array(
     'name'    => _x('Advert Categories', 'taxonomy general name'), 
     'singular_name'  => _x('Advert Category', 'taxonomy singular name'), 
     'search_items'  => __('Search Advert Categories'), 
     'all_items'   => __('All Advert Categories'), 
     'parent_item'  => __('Parent Advert Category'), 
     'parent_item_colon' => __('Parent Advert Category:'), 
     'edit_item'   => __('Edit Advert Category'), 
     'update_item'  => __('Update Advert Category'), 
     'add_new_item'  => __('Add New Advert Category'), 
     'new_item_name'  => __('New Advert Category'), 
     'menu_name'   => __('Advert Categories'), 
    ); 
    $args = array(
     'labels' => $labels, 
     'hierarchical' => true, 
    ); 
    register_taxonomy('advert_category', 'advert', $args); 
} 
add_action('init', 'my_taxonomies_advert', 0); 

Odpowiedz

0

Aby zaoszczędzić sobie sporo kłopotów i co Użyłem w przeszłości jest this custom post type plugin - działa jak czar:

Rodzaje Chodźmy dostosować WordPress Administrator dodając typy zawartości, niestandardowe pola i taksonomia. Będziesz mógł stworzyć administratora WordPressa i przekształcić go w swój własny system zarządzania treścią.

A z tym używam tego Custom post type archive plugin:

Ta wtyczka pozwoli archiwa niestandardowego typu post (również roczne, miesięczne i dzienne) wraz z kanałami, dostosowywanych tytułów i przywoływania.

1

Powinieneś być w stanie nawigować do/reklam. Ponadto, has_archive powinien utworzyć dla ciebie stronę archiwum.

+0

Dlaczego nie ma tego poprawna odpowiedź? Czy czegoś brakuje? Nie mam pojęcia, o czym mówi połowa odpowiedzi na tej stronie! –

0

Rozwiązanie jest zasadniczo zawarte w odpowiedzi na this question w innym miejscu w StackOverflow.

Podsumowując, zbudować kwerendę niestandardowy, ale w tablicy $ args wymienić:

'cat_name' => 'Photographers'

z kwerendy taksonomii, tak:

'tax_query' => array( array( 'taxonomy' => 'advert_category', 'field' => 'slug', 'terms' => 'photographers' ) )

Oczywiście, powinieneś dołączyć także 'post-type' => 'advert' w $ args. Mam nadzieję że to pomoże!

1

Zasadniczo należy utworzyć szablon strony który zawiera dostosowaną wp_query tak WordPress można określić, co jesteś w kategorii.

Po utworzeniu szablonu strony można utworzyć stronę w swoim administratorze WordPress ... wybierając nowy szablon strony jako szablon.

Jeśli chcesz, aby kategoria była dynamiczna, zawsze możesz ustawić szablon strony, aby zaakceptować parametr $ _GET, aby określić kategorię, z której będą wyświetlane reklamy.Tak:

http://example.com/adverts-listing/?mycat=photographers 

lub

http://example.com/adverts-listing/?mycat=programmers 

itp

Oto przykład tego, co szablon strona może wyglądać (kurs ten będzie się różnić od tego, co motyw używasz ... ten przykład został zbudowany, aby użyć motywu dwudziestu dwudziestu):

<?php 
/** 
* Template Name: Advert Listing 
* 
*/ 

get_header(); ?> 

    <section id="primary" class="content-area"> 
    <div id="content" class="site-content" role="main"> 

    <?php 
     // Set the args array for the query to happen 
     $args = array(
     'post_type' => 'adverts', 
     'post_status' => 'publish', 
     'posts_per_page' => 10 
    ); 

     // Dynamically set the mycat argument from a $_GET parameter 
     if(isset($_GET['mycat'])) { 
     $args['tax_query'] => array(
      array(
      'taxonomy' => 'advert_category', 
      'field' => 'slug', 
      'terms' => $_GET['mycat'] 
     ) 
     ); 
     } 

     // Issue the query 
     $q = null; 
     $q = new WP_Query($args); 

     // Start the loop 
     if($q->have_posts()) : ?> 
     <header class="page-header"> 
      <h1 class="page-title"><?php _e('Advert Listing:', 'twentyfourteen'); ?></h1> 
     </header> 

     <?php 

     while ($q->have_posts()) : $q->the_post(); 
      ?> 

      <article id="post-<?php the_ID(); ?>" class="post-<?php the_ID(); ?> adverts type-adverts status-publish hentry"> 

      <header class="entry-header"> 
       <a href="<?php echo get_permalink(get_the_ID()); ?>"><h3 class="entry-title"><?php the_title(); ?></h3></a> 
      </header><!-- .entry-header --> 

      <div class="entry-content"> 
       <?php the_excerpt(); ?> 
      </div> 

      </article> 

      <?php 

     endwhile; 

     // Previous/next post navigation. 
     twentyfourteen_paging_nav(); 

     else : 
     // If no content, include the "No posts found" template. 
     get_template_part('content', 'none'); 

     endif; 

     wp_reset_query(); // Restore global post data stomped by the_post(). 
     ?> 

    </div><!-- #content --> 
    </section><!-- #primary --> 

<?php 

get_sidebar('content'); 
get_sidebar(); 
get_footer(); 
0

Tak więc potrzebowałem niestandardowych typów wpisów z kategoriami.

Poniższy kod jest naprawdę prosty i czysty. Dosłownie skopiuj i wklej. a następnie dostosuj się do swoich potrzeb. Mam nadzieję, że to pomoże ludziom w przyszłości.

Zasadniczo łączy zwykłe kategorie wordpress z niestandardowymi typami wpisów. dzięki czemu jest to bardzo proste dla twojego klienta, gdy pracują z sekcji wordpress admin. Ma również indywidualną taksonomię za pomocą znaczników. więc masz opcję, aby mieć kategorie we wszystkich typach postów lub po specyficznej taksonomii.

Kod jest dość oczywisty. Głosujcie na moją odpowiedź. Muszę zbudować mojego przedstawiciela. Dziękuję Ci.

Musisz skopiować kod do functions.php plik

add_action('init', 'create_post_types'); 
    function create_post_types() { 
// Custom Post 1 
     register_post_type('companies', 
      array(
       'labels' => array(
        'name' => __('Companies'), 
        'singular_name' => __('Company') 
       ), 
      'public' => true, 
      'has_archive' => true, 
      ) 
     ); 
     // Default Wordpress Category Taxonomy 
     register_taxonomy_for_object_type('category', 'companies'); 
     // Post Specific Taxonomy 
     register_taxonomy('company_category', 'companies'); 
// Custom Post 2 
     register_post_type('events', 
      array(
       'labels' => array(
        'name' => __('Events'), 
        'singular_name' => __('Event') 
       ), 
      'public' => true, 
      'has_archive' => true, 
      ) 
     ); 
     // Default Wordpress Category Taxonomy 
     register_taxonomy_for_object_type('category', 'events'); 
     // Post Specific Taxonomy 
     register_taxonomy('events_category', 'events'); 
// Custom Post 3 
     register_post_type('deals', 
      array(
       'labels' => array(
        'name' => __('Deals'), 
        'singular_name' => __('Deal') 
       ), 
      'public' => true, 
      'has_archive' => true, 
      ) 
     ); 
     // Default Wordpress Category Taxonomy 
     register_taxonomy_for_object_type('category', 'deals'); 
     // Post Specific Taxonomy 
     register_taxonomy('deals_category', 'deals'); 
// Custom Post 4 
     register_post_type('banners', 
      array(
       'labels' => array(
        'name' => __('Banners'), 
        'singular_name' => __('Banner') 
       ), 
      'public' => true, 
      'has_archive' => true, 
      ) 
     ); 
     // Default Wordpress Category Taxonomy 
     register_taxonomy_for_object_type('category', 'banners'); 
     // Post Specific Taxonomy 
     register_taxonomy('banners_category', 'banners'); 
    } 

Są 4 rodzaje zwyczaj ofertę tak jak powiedziałem kod jest dość oczywista