Benutzerdefinierte Beitragstypen und -kategorien

Lesezeit: 6 Minuten

Benutzer-Avatar
Craig Eves

Ich versuche seit Tagen, einen benutzerdefinierten Beitragstyp mit Kategorien zu erstellen. Bisher habe ich das funktioniert, und ich kann Inhalte einfach hinzufügen und sie einer Kategorie zuweisen. Mein Code ist unten.

Was ich nicht verstehe und anscheinend nicht funktioniert, ist das Erstellen einer Archivseite zum Anzeigen von Beiträgen einer Kategorie.
Zum Beispiel: Mein Beitragstyp heißt Anzeigen. Meine Kategorie heißt Fotografen.

Kann die Seite dynamisch ermitteln, in welcher Kategorie Sie sich befinden, und alle benutzerdefinierten Beiträge anzeigen, die zu dieser Kategorie gehören?

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

Sie müssen im Grunde eine erstellen Seitenvorlage die eine angepasste wp_query enthält, damit WordPress feststellen kann, in welcher Kategorie Sie sich befinden.

Sobald Sie Ihre Seitenvorlage erstellt haben, können Sie eine Seite in Ihrem WordPress-Adminbereich erstellen … indem Sie die neue Seitenvorlage als Ihre Vorlage auswählen.

Und wenn Sie möchten, dass die Kategorie dynamisch ist, können Sie Ihre Seitenvorlage jederzeit so einrichten, dass sie einen $_GET-Parameter akzeptiert, um zu bestimmen, aus welcher Kategorie Anzeigen angezeigt werden sollen. So:

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

oder

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

usw.

Hier ist ein Beispiel dafür, wie die Seitenvorlage aussehen könnte (dies hängt natürlich davon ab, welches Design Sie verwenden … dieses Beispiel wurde erstellt, um das Design Twentyfourteen zu verwenden):

<?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="https://stackoverflow.com/questions/16612411/<?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();

Sie sollten in der Lage sein, zu /adverts zu navigieren. Ebenfalls, has_archive sollte eine Archivseite für Sie erstellen.

  • Warum ist das nicht die richtige Antwort? Übersehe ich etwas? Ich habe keine Ahnung, wovon die Hälfte der Antworten auf dieser Seite spricht!

    – JohnDee

    2. März 2018 um 12:08 Uhr

Benutzer-Avatar
steveai

Um sich viel Ärger zu ersparen und was ich in der Vergangenheit verwendet habe, ist dieses benutzerdefinierte Beitragstyp-Plugin – es wirkt wie ein Zauber:

Mit Typen können Sie den WordPress-Administrator anpassen, indem Sie Inhaltstypen, benutzerdefinierte Felder und Taxonomie hinzufügen. Sie können den WordPress-Administrator erstellen und ihn in Ihr eigenes Content-Management-System verwandeln.

Und damit verwende ich diese Archiv-Plugin für benutzerdefinierte Posttypen:

Dieses Plugin ermöglicht benutzerdefinierte Posttyp-Archive (auch jährlich, monatlich und täglich) zusammen mit Feeds, anpassbaren Titeln und Paging.

Benutzer-Avatar
Nydame

Die Lösung ist im Wesentlichen in der Antwort auf diese Frage an anderer Stelle auf StackOverflow enthalten.

Erstellen Sie zusammenfassend eine benutzerdefinierte Abfrage, aber ersetzen Sie im $args-Array Folgendes:

'cat_name' => 'Photographers'

mit einer Taxonomie-Abfrage wie folgt:

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

Darf man natürlich mit einbeziehen 'post-type' => 'advert' auch in $args. Hoffe das hilft!

Benutzer-Avatar
13garth

Also brauchte ich auch benutzerdefinierte Beitragstypen mit Kategorien.

Der folgende Code ist wirklich einfach und sauber. Buchstäblich Kopieren und Einfügen. und dann einfach an deine Bedürfnisse anpassen. Hoffe, das hilft den Menschen in der Zukunft.

Es im Grunde verknüpft die normalen WordPress-Kategorien mit Ihren benutzerdefinierten Beitragstypen. Das macht es Ihrem Kunden wirklich einfach, wenn er im WordPress-Verwaltungsbereich arbeitet. Es hat auch eine individuelle Taxonomie über Tags. Also Sie haben die Möglichkeit, Kategorien für alle Post-Typen oder eine postspezifische Taxonomie zu haben.

Der Code ist ziemlich selbsterklärend. Bitte stimmen Sie für meine Antwort. Ich muss meinen Repräsentanten aufbauen. Vielen Dank.

Sie müssen den Code in Ihre kopieren Funktionen.php Datei

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

Es gibt 4 benutzerdefinierte Beitragstypen, also ist der Code, wie gesagt, ziemlich selbsterklärend

1369540cookie-checkBenutzerdefinierte Beitragstypen und -kategorien

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy