Fügen Sie Kategorien zu benutzerdefinierten Beitragstypen hinzu und zeigen Sie sie basierend auf Kategorien an

Lesezeit: 10 Minuten

Ich arbeite an einer WordPress-Site mit Themennamen flozo . Es hat einen benutzerdefinierten Beitragstyp namens work. Ich wollte die Werke in meiner Vorlage basierend auf jeder Kategorie anzeigen.

Hier ist der Code:

<?php
$args = array( 'post_type' => 'work', 'posts_per_page' => 15 );
$loop = new WP_Query( $args );
$count = 0;
echo '<ul>';
while ( $loop->have_posts() ) : $loop->the_post();

    $count++;
    $class = ($count % 3 == 1) ? 'first' : '';

    echo '<li class="'.$class.'">';
    echo '<a href="';
    the_permalink();
    echo '">';
    echo '<div class="overlay" style="background-color:'.ot_get_option( 'main_colour' ).';"></div>';
    the_post_thumbnail('full');
    echo '</a>';

    echo '<br />';

    echo '<h2><a href="';
    the_permalink();
    echo '">';
    the_title();
    echo '</a></h2>';

    echo '<div class="entry-content">';
    echo limit_words(get_the_excerpt(), '30'); 
    echo '..</div>';
    echo '</li>';
endwhile;
echo '</ul>';
?>

Ich habe hinzugefügt

 $args = array( 'post_type' => 'work', 'tag_ID' => 15 ,'posts_per_page' => 15 );

wo 15 ist die ID meiner Kategorie, aber es hat nicht funktioniert

Ich habe auch versucht

<?php
$catquery = new WP_Query( 'cat=15&posts_per_page=3' );
while($catquery->have_posts()) : $catquery->the_post();
?>
<ul class="last-cat">
<li><a href="https://stackoverflow.com/questions/27896131/<?php the_permalink() ?>" rel="bookmark"><?php the_post_thumbnail(); ?> <p><?php     the_title(); ?></p><span><?php echo get_the_date(); ?></span></a></li></ul>
<?php endwhile; ?>

was auch nicht geholfen hat.

Bearbeiten:

Die Kategorie-URL ist

http://jointviews.com/wp-admin/edit-tags.php?action=edit&taxonomy=categories&tag_ID=15&post_type=work

Der Registrierungscode für den Posttyp lautet:

add_action('init', 'work_register');   

function work_register() {   

$labels = array( 
    'name' => _x('Work', 'post type general name'), 
    'singular_name' => _x('Work Item', 'post type singular name'), 
    'add_new' => _x('Add New', 'work item'), 
    'add_new_item' => __('Add New Work Item'), 
    'edit_item' => __('Edit Work Item'), 
    'new_item' => __('New Work Item'), 

    'view_item' => __('View Work Item'), 
    'search_items' => __('Search Work'), 
    '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, 
    'menu_icon' => get_stylesheet_directory_uri() . '/article16.png', 
    'rewrite' => array( 'slug' => 'work', 'with_front'=> false ), 'capability_type' => 'post', 
    'hierarchical' => true, 
    'menu_position' => null, 
    'supports' => array('title','editor','thumbnail') 
);   

register_post_type( 'work' , $args ); 

register_taxonomy("categories", array("work"), array("hierarchical" => true, "label" => "Categories", "singular_label" => "Category", "rewrite" => array( 'slug' => 'work', 'with_front'=> false )));



}

  • Ich bin ziemlich sicher tag_ID muss sein tag_id.

    – Alexander O’Mara

    12. Januar 2015 um 6:03 Uhr

  • jointviews.com/wp-admin/… So sieht die URL für meine Kategorie aus

    Benutzer4260940

    12. Januar 2015 um 6:04 Uhr

  • um die Werte zu lesen, die durch die URL gegangen sind. Nicht um darauf zuzugreifen

    Benutzer4260940

    12. Januar 2015 um 6:06 Uhr

  • wie kann ich es dann anzeigen? es soll meine Werke zeigen

    Benutzer4260940

    12. Januar 2015 um 7:20 Uhr

Benutzer-Avatar
Pieter Goosen

Beide anderen Antworten sind falsch, insbesondere die vom OP. query_posts sollte NIEMALS verwendet werden, es steht sogar im Kodex, also bitte den Kodex lesen. Außerdem sollten Sie die Hauptabfrage niemals durch benutzerdefinierte Abfragen ersetzen.

Die Lösung ist einfach, wie ich unten beschrieben habe und es ist der richtige Weg es zu tun.

ORIGINALE ANTWORT

Sie haben hier ein paar Fehler

  • Damit Ihr benutzerdefinierter Beitragstyp ein Archiv hat, müssen Sie das festlegen has_archive Parameter zu true in Ihren benutzerdefinierten Registrierungsargumenten für den Beitragstyp. Sehen register_post_type()

  • Wenn Sie Ihren benutzerdefinierten Beitragstyp wie Seiten nicht verwenden möchten, legen Sie die hierarchical Parameter zu false. Wenn Sie dies auf true setzen, wird Ihr Backend erheblich verlangsamt, wenn Ihre Posts zunehmen, da WordPress versucht, für jeden Post einen Baum zu erstellen, wie es für Seiten der Fall ist

  • Verwenden Sie niemals benutzerdefinierte Abfragen anstelle der Hauptabfrage. Es ist immer mühsamer und eine Verschwendung von Ressourcen. Sehen dieser Beitrag für eine vollständige Erklärung, wo und wann benutzerdefinierte Abfragen richtig verwendet werden.

  • Dieser Punkt ist eine Erweiterung des vorherigen. Wenn Sie die Hauptabfrage ändern müssen, verwenden Sie pre_get_posts dazu. Es verwendet die gleichen genauen Parameter wie WP_Query wie die Hauptabfrage verwendet WP_Query Beiträge zu holen. Das alles ist in dem oben verlinkten Beitrag erklärt

  • Ihr Hauptfehler in Ihrer benutzerdefinierten Abfrage ist Ihr Mangel an Verständnis für den Unterschied zwischen Kategorien, Tags und benutzerdefinierten Taxonomien. Ich habe einen vollständigen Beitrag geschrieben (den Sie lesen können hier ) dazu und trug es tatsächlich auch in den Codex ein. Sie verwenden eine benutzerdefinierte Taxonomie, sodass die Kategorieparameter nicht funktionieren. Sie müssen eine verwenden tax_query für benutzerdefinierte Taxonomien

Führen Sie die folgenden Schritte aus, um Ihr Problem zu lösen

  • Ergänzen Sie die has_achive Parameter zu Ihren Argumenten hinzufügen, wenn Sie Ihren benutzerdefinierten Beitragstyp registrieren, und setzen Sie ihn auf true. Wenn Sie möchten, stellen Sie die ein hierarchical Parameter zu false sowie in Ihrem benutzerdefinierten Beitragstyp. (Legen Sie dies nicht für Ihre benutzerdefinierte Taxonomie fest, da sich Ihre Taxonomie wie normale Tags verhält)

  • Löschen Sie danach Ihre Rewrite-Regeln, indem Sie die Permalink-Seite unter „Einstellungen“ besuchen und auf „Aktualisieren“ klicken.

  • Besuchen Sie Ihre Homepage, um sicherzustellen, dass Ihre neuen Regeln gespeichert sind

  • Löschen Sie Ihre benutzerdefinierte Abfrage und kehren Sie zur Standardschleife zurück. Dein archive-work.php sollte so aussehen

    if( have_posts() ) {
        while( have_posts() ) {
            the_post();
    
            // Your custom markup and template tags
    
        }
    }
    
  • Wenn Sie Beiträge aus einem bestimmten Begriff anzeigen müssen, erstellen Sie eine taxonomy.php, taxonomy-{$taxonomy}.php oder taxonomy-{$taxonomy}-{$term}.php Schablone. Überprüf den Vorlagenhierarchie Für mehr Information

BEARBEITEN 1

Wenn Sie nur einen bestimmten Begriff in Ihrem benutzerdefinierten Beitragstyp-Archivbegriff anzeigen müssen, nachdem Sie die obigen Schritte ausgeführt haben, verwenden Sie pre_get_posts um die Hauptabfrage richtig zu ändern

add_action( 'pre_get_posts', function ( $q ) {

    if( !is_admin() && $q->is_main_query() && is_post_type_archive( 'work' ) ) {
        $q->set( 'categories', 'slides' );
    }

});

BEARBEITEN 2

Hier ist Code, um dies zu lösen

Kopieren Sie den folgenden Code und fügen Sie ihn anstelle Ihres Codes ein, wo Sie Ihren Beitragstyp registrieren. Ich habe die hinzugefügt has_archive Parameter. Ich habe auch die Rewrite-Regel für Ihre Taxonomie auf geändert categories. Es ist wirklich mühsam, denselben Slug sowohl für den benutzerdefinierten Beitragstyp als auch für die Taxonomie zu haben. Dies funktioniert standardmäßig nicht und wirft alles komplett aus dem Ruder

add_action( 'init', 'work_register' );   

function work_register() {   

    $labels = array( 
        'name' => _x('Work', 'post type general name'), 
        'singular_name' => _x('Work Item', 'post type singular name'), 
        'add_new' => _x('Add New', 'work item'), 
        'add_new_item' => __('Add New Work Item'), 
        'edit_item' => __('Edit Work Item'), 
        'new_item' => __('New Work Item'), 

        'view_item' => __('View Work Item'), 
        'search_items' => __('Search Work'), 
        '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, 
        'menu_icon' => get_stylesheet_directory_uri() . '/article16.png', 
        'rewrite' => array( 'slug' => 'work', 'with_front'=> false ), 
        'capability_type' => 'post', 
        'hierarchical' => true,
        'has_archive' => true,  
        'menu_position' => null, 
        'supports' => array('title','editor','thumbnail') 
    );   

    register_post_type( 'work' , $args ); 

    register_taxonomy( 'categories', array('work'), array(
        'hierarchical' => true, 
        'label' => 'Categories', 
        'singular_label' => 'Category', 
        'rewrite' => array( 'slug' => 'categories', 'with_front'=> false )
        )
    );

    register_taxonomy_for_object_type( 'categories', 'work' ); // Better be safe than sorry
}

Ersetzen Sie in Ihrer archive-work.php Ihre benutzerdefinierte Abfrage durch diesen Code

<?php

$count = 0;
echo '<ul>';
while ( have_posts() ) : the_post();

    $count++;
    $class = ($count % 3 == 1) ? 'first' : '';

    echo '<li class="'.$class.'">';
    echo '<a href="';
    the_permalink();
    echo '">';
    echo '<div class="overlay" style="background-color:'.ot_get_option( 'main_colour' ).';"></div>';
    the_post_thumbnail('full');
    echo '</a>';

    echo '<br />';

    echo '<h2><a href="';
    the_permalink();
    echo '">';
    the_title();
    echo '</a></h2>';

    echo '<div class="entry-content">';
    echo limit_words(get_the_excerpt(), '30'); 
    echo '..</div>';
    echo '</li>';
endwhile;
echo '</ul>';
?>

SEHR WICHTIG -> OK, jetzt besuchen Einstellungen >> Permalinks im Backend (Admin-Bereich) und klicken Sie auf Änderungen speichern. Dadurch werden Ihre Permalinks geleert und Ihre neue Permalink-Struktur festgelegt

Sie sollten jetzt alle Ihre Beiträge aus Ihrem benutzerdefinierten Beitragstyp sehen, wenn Sie sie besuchen

http://example.com/work/

  • Hallo, ich bin etwas beschäftigt mit einer anderen Arbeit. Ich werde bald darauf zurückkommen 🙂

    Benutzer4260940

    14. Januar 2015 um 12:07 Uhr

<?php
query_posts( array( 'post_type' => 'work', 'categories' => 'slides' ) );
//the loop start here
if ( have_posts() ) : while ( have_posts() ) : the_post();
?>
<h3><?php the_title(); ?></h3>
<?php the_content(); ?>
<?php endwhile; endif; wp_reset_query(); ?>

Ich habe es endlich bekommen hier
perfekt

  • query_posts ist eine der am schlechtesten zu verwendenden Funktionen. Wenn ich dir einen Tipp geben darf, niemals verwenden query_posts. Es unterbricht die Hauptabfrage, führt SQL-Abfragen erneut aus, verlangsamt Ihre Seite (was schlecht für SEO ist), unterbricht und füllt die Paginierung, unterbricht die $wp_query und $post Globals sowie get_queried_object() die von Plugins weit verbreitet ist. Es könnte Ihr Problem jetzt lösen, aber Sie werden später viel Mist bekommen

    – Pieter Goosen

    12. Januar 2015 um 10:10 Uhr

  • Übrigens, diese verlinkte Antwort ist völlig falsch, alt und falsch und wird als solche abgelehnt.

    – Pieter Goosen

    12. Januar 2015 um 10:12 Uhr

  • Ich bin etwas schlecht im Codieren. Also würde ich gerne etwas Code bekommen, um das Problem zu lösen. Ich bin noch kein Experte, um meinen eigenen zu schreiben

    Benutzer4260940

    13. Januar 2015 um 5:00 Uhr

  • OK, ich werde versuchen, dir zu helfen. Siehe meine Antwort in 5 min

    – Pieter Goosen

    13. Januar 2015 um 5:02 Uhr

  • OK, überprüfe mein Update. Tue zuerst, was ich in meinem gesagt habe BEARBEITEN 2. Bringen Sie dies zum Laufen und antworten Sie dann, wenn Sie weitere Informationen benötigen

    – Pieter Goosen

    13. Januar 2015 um 5:31 Uhr

Benutzer-Avatar
Benutzer3040610

Versuchen Sie es mit dem folgenden Code,

<?php 

$args = array( 'posts_per_page' => 5,'post_type' => 'work','category' => 15 );

$myposts = get_posts( $args );
foreach ( $myposts as $post ):?>
<li>
    <a href="https://stackoverflow.com/questions/27896131/<?php the_permalink(); ?>"><?php the_title(); ?></a>
</li>
<?php endforeach; ?>

  • Analysefehler: Syntaxfehler, unerwartetes „endforeach“ (T_ENDFOREACH) in /home/jvadmin/public_html/wp-content/themes/flozo/archive-work.php in Zeile 17

    Benutzer4260940

    12. Januar 2015 um 6:10 Uhr

  • @Melvin Sind die Beiträge in der Kategorie mit der ID (15)?

    – Benutzer3040610

    12. Januar 2015 um 6:19 Uhr

  • ich habe ‘category’ => 15 in ‘tag_ID’ => 15 geändert .. aber jetzt werden alle eposts angezeigt jointviews.com/portfolio Sie können in der Nähe der Fußzeile sehen

    Benutzer4260940

    12. Januar 2015 um 6:28 Uhr

  • Sie haben also die benutzerdefinierten Beiträge (Arbeiten) unter der Kategorie?

    – Benutzer3040610

    12. Januar 2015 um 6:34 Uhr

  • es kam mit dem Thema

    Benutzer4260940

    12. Januar 2015 um 6:35 Uhr

1383810cookie-checkFügen Sie Kategorien zu benutzerdefinierten Beitragstypen hinzu und zeigen Sie sie basierend auf Kategorien an

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

Privacy policy