Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Combine Terms under same Title, unless new = create new Title Wordpress Query

During a 'foreach' loop, if the same term is detected, only add the page link, otherwise add the term name and page link during a single wp_query?

So for example:

  1. Title 1 Apple Pie
  2. Title 1 Cherry Pie
  3. Title 2 Ham Pie
  4. Title 3 Goat Pie
  5. Title 1 Noodle Cake

Should Become:

    • Title 1
      • Apple Pie,
      • Cherry Pie,
      • Noodle Cake
    • Title 2
      • Ham Pie
    • Title 3
      • Goat Pie
<?php 

$alternate_edition_a = array(
            'post_type'=> 'alternate_edition',
            'post_status' => 'publish',
            'posts_per_page'=>10,
            'no_found_rows' => true,
          'tax_query' => array(
        array(
        'taxonomy' => 'game_titles',
        'field' => 'slug', 
        'terms' => $gametitle_con,
        )
    )
);
$alternate_edition_query = new WP_Query( $alternate_edition_a );
if($alternate_edition_query->have_posts() ) : while ( $alternate_edition_query->have_posts() ) : $alternate_edition_query->the_post();

$alternate_editionTitlesID[] = get_the_ID(); 

$systemformats_altedition_terms = get_the_terms($post->id, 'system_formats');

foreach ($systemformats_altedition_terms as $systemformats_altedition_term) {

if (!has_term($systemformats_altedition_term->slug, 'system_formats', $gameFeatTitleID)) {

    $systemterm_slug[] = $systemformats_altedition_term->slug;

}
}

endwhile; else: endif; wp_reset_postdata(); /*Important to reset away from alternate post type*/ 

$array_notpresentclean = array_unique($systemterm_slug);

/*print_r ($array_notpresentclean);
*/

foreach ($array_notpresentclean as $array_notpresentclean2) {

$alternate_edition_a2 = array(
            'post_type'=> 'alternate_edition',
            'post_status' => 'publish',
            'posts_per_page'=>10,
            'no_found_rows' => true,
            'post__in' => $alternate_editionTitlesID,
          'tax_query' => array(
           array(
                'taxonomy' => 'system_formats',
                'field' => 'slug',
                'terms' => $array_notpresentclean2,
            ),
    ),
);
$alternate_edition_query2 = new WP_Query( $alternate_edition_a2 );
if($alternate_edition_query2->have_posts() ) : while ( $alternate_edition_query2->have_posts() ) : $alternate_edition_query2->the_post();

$currentterm_obj = get_term_by('slug', $array_notpresentclean2, 'system_formats');

if (!isset($var_notpresent)) {

$var_notpresent = 1; ?>

<a href="<?php echo esc_url( home_url( '/' ) ); ?>system_information/<?php echo $currentterm_obj->slug; ?>" title="<?php echo $currentterm_obj->description;?>"><?php echo $currentterm_obj->name;?></a>

<?php } ?>

<li><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php echo get_the_title(); ?>"><?php echo get_the_title(); ?></a></li>

<?php 

endwhile; else: endif; wp_reset_postdata(); /*Important to reset away from alternate post type*/ 

unset($var_notpresent);

} 



?>

Output is:

  1. Cheese
    • Cake is a LIE
  2. Steam
    • Cake is a LIE
    • Banananaa Chainsaw
    • Gears of War: Ultimate Edition Windows 10
  3. Sega Saturn
    • Fears of Bore
  4. Nintendo
    • Banananaa Chainsaw
    • Gears of War: Ultimate Edition
  5. Xbox One
    • Banananaa Chainsaw
    • Hamsters of WHAR
    • Gears of War: Ultimate Edition Windows 10
    • Gears of War: Ultimate Edition
like image 789
Matthew O'Donnell Avatar asked Nov 10 '22 07:11

Matthew O'Donnell


1 Answers

I hope this helps.

$titles = array('Title 1 Apple Pie','Title 1 Cherry Pie','Title 2 Ham Pie','Title 3 Goat Pie');
$list = '<ol>';
foreach ($titles as $value) {
$subtitle = substr($value, 0, 7);
if(!strpos($final,$subtitle )){
   $list .= '<li>' . $value . '</li>' ;
}  else {
    $pos = stripos($list, $subtitle);
    $left_string = substr($list,0, $pos);
    $substring = substr($list, $pos);
    $next_pos = stripos($substring, '<');
    $right_string = substr($substring, $next_pos);
    $current = substr($substring, 8, $next_pos);
    $current = rtrim($current, '</li>');
    $list = '';
    $last = $current . ' '. substr($value, 8);
    $list = $left_string .' '. $subtitle.' '. $last . ' '.      $right_string;
      }
  }
    $final .= '</ol>';
     echo $final;

output.

enter image description here

like image 177
Junius L. Avatar answered Nov 14 '22 23:11

Junius L.