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 )));
}
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/
<?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
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; ?>
Ich bin ziemlich sicher
tag_ID
muss seintag_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