Ich möchte einen Index von A bis Z mit allen Beiträgen eines bestimmten benutzerdefinierten Beitragstyps erstellen. Dies ist der Code bisher:
<?php
/**
* The Template for displaying archive series.
*
* Theme: Default
*/
get_header(); ?>
<div id="content">
<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array('paged' => $paged,'posts_per_page' => -1,'post_type' => 'series_type','post_status' => 'publish','orderby' => 'title','order' => 'asc');
$fruits = new WP_Query($args);
if($fruits->have_posts()){
$current_first_letter = '';
$t = array();
$s = array();
while($fruits->have_posts()){
$fruits->the_post();
$title = get_the_title();
if(is_string($title)){
$first_letter = strtoupper($title[0]);
if($first_letter != $current_first_letter){
$t[] = $first_letter;
$current_first_letter = $first_letter;
}
}
$s[$first_letter][] = get_the_title();
}
}
$t = array_unique($t);
$tc = count($t);
$sc = count($s);
for($i=0; $i<$tc; $i++){
?>
<div>
<h4><?php echo $t[$i]; ?></h4>
<ul>
<?php
foreach($s as $key => $value){
if($key == $t[$i]){
$vc = count($value);
for($j=0; $j<$vc; $j++){
?>
<li><?php echo $value[$j]; ?></li>
<?php
}
}
}
?>
</ul>
</div>
<?php
}
if($fruits->max_num_pages > 1){ ?>
<nav class="prev-next-posts">
<div class="prev-posts-link">
<?php echo get_next_posts_link( 'Older Entries', $fruits->max_num_pages ); ?>
</div>
<div class="next-posts-link">
<?php echo get_previous_posts_link( 'Newer Entries' ); ?>
</div>
</nav>
<?php } ?>
<?php wp_reset_postdata(); ?>
</div><!-- #content -->
<?php get_footer(); ?>
Das Problem ist, dass ich nicht weiß, wie ich sie alle als Hyperlinks anstelle von Rohtext erstellen kann. Kann mir jemand helfen, den Code zu reparieren?
Ok, du musst nur eine Schleife mit dem ersten Buchstaben machen. WordPress-Abfrage wird die post_title
ASC
Reihenfolge behandeln.
EDIT: Ich benutze get_permalink () innerhalb der Schleife, um die URL zu erhalten ( https://developer.wordpress.org/reference/functions/get_permalink/ )
$series = new WP_Query(array(
'posts_per_page' => -1,
'post_type' => 'series_type',
'orderby' => 'title',
'order' => 'asc'
));
if($series->have_posts())
{
$letter = '';
while($series->have_posts())
{
$series->the_post();
// Check the current letter is the same that the first of the title
if($letter != strtoupper(get_the_title()[0]))
{
echo ($letter != '') ? '</ul></div>' : '';
$letter = strtoupper(get_the_title()[0]);
echo '<div><ul><h4>'.strtoupper(get_the_title()[0]).'</h4>';
}
echo '<li><a href="'.get_permalink().'">'.get_the_title().'</a></li>';
}
}
Probieren Sie diese Funktion aus, ich benutze sie, um einen verknüpfbaren A-Z-Index zu erstellen
function nstrm_sd_do_az_loop() {
global $page_slug;
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$your_query = new WP_Query( array( ... ) );
$current = '';
$nav = '<div class="az-navigation"><ul>';
$letter = get_query_var( 'letter' );
if ( $your_query->have_posts() ):
while ( $your_query->have_posts() ): $your_query->the_post();
global $post;
$firstletter = strtoupper( substr( get_the_title(), 0, 1 ) );
if ( $firstletter != $current ) {
if ( $letter == $firstletter ) {
$class = ' class="current"';
} else {
$class = '';
}
$nav .= '<li' . $class . '><a href="/' . $page_slug . '/' . $firstletter . '">' . $firstletter . '</a></li>';
$current = $firstletter;
}
endwhile;
endif;
echo $nav . '<li><a href="/' . $page_slug . '">' . __( 'All', 'your-text-domain' ) . '</a></li></ul></div>';
}