webentwicklung-frage-antwort-db.com.de

Wie erstelle ich eine A-Z-Indexliste für benutzerdefinierte Beitragstypen?

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?

1
TravelWhere

Ok, du musst nur eine Schleife mit dem ersten Buchstaben machen. WordPress-Abfrage wird die post_titleASC 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>';
}
1
Marcel Bootsman