Как ограничить количество категорий Wordpress, выводимых через этот код PHP? - PullRequest
1 голос
/ 25 января 2020

Таким образом, в этом примере кода я получаю все категории каждого поста, выводимого во внешнем интерфейсе, внутри нужного DIV, там, в L oop.
Что здорово .

Но для целей макета я хочу иметь возможность ограничить это выводом только ДВУХ категорий из каждого сообщения, даже если с ним связано 5 или 10.

Любой код предложения?

<?php
// The Query
$args = array(
    'post_type' => 'post',
    'posts_per_page' => 36,
    'orderby' => 'date',
    'order' => 'DESC',
    'tax_query' => array(
        array(
            'taxonomy' => 'menuelement',
            'field'    => 'slug',
            'terms'    => array('news', 'debate', 'depth'),
        ),
    ),
);
$menuelements = new WP_Query( $args );


// checks if has posts
if ($menuelements->have_posts()) :  ?>

<div class="kmn-posts-row">
<?php
    // The Loop
    while ($menuelements->have_posts()) : $menuelements->the_post(); ?>

             <div class="kmn-posts-category">   
             <span><?php echo get_modified_term_list( get_the_ID(), 'category', '', '', '', array(1)); ?></span>
             </div>

<?php 
endwhile;
?>
</div>
<?php

else :
    echo 'No posts in query.';

endif;

/* Restore original Post Data 
 * NB: Because we are using new WP_Query we aren't stomping on the 
 * original $wp_query and it does not need to be reset with 
 * wp_reset_query(). We just need to set the post data back up with
 * wp_reset_postdata().
 */
wp_reset_postdata();

Ответы [ 2 ]

2 голосов
/ 25 января 2020

простой способ - получить категории и использовать php встроенную функцию array_slice

. Вот код, который вы можете использовать, см. Пример кода.

<?php
// The Query
$args = array(
    'post_type' => 'post',
    'posts_per_page' => 36,
    'orderby' => 'date',
    'order' => 'DESC',
    'tax_query' => array(
        array(
            'taxonomy' => 'menuelement',
            'field'    => 'slug',
            'terms'    => array('news', 'debate', 'depth'),
        ),
    ),
);
$menuelements = new WP_Query( $args );


// checks if has posts
if ($menuelements->have_posts()) :  ?>

<div class="kmn-posts-row">
<?php
    // The Loop
    while ($menuelements->have_posts()) : $menuelements->the_post(); ?>

             <div class="kmn-posts-category">   
             <span><?php 
    $categories = get_the_category();
    array_slice($categories,0,2);
    foreach($categories as $cat){
        echo '<a href="'.get_category_link($cat).'">'.$cat->name.'</a>';
    }
     ?></span>
             </div>

<?php 
endwhile;
?>
</div>
<?php

else :
    echo 'No posts in query.';

endif;

/* Restore original Post Data 
 * NB: Because we are using new WP_Query we aren't stomping on the 
 * original $wp_query and it does not need to be reset with 
 * wp_reset_query(). We just need to set the post data back up with
 * wp_reset_postdata().
 */
wp_reset_postdata();
0 голосов
/ 25 января 2020

Вы можете переписать функцию worpress в вашей функции. php или плагин:

define( 'PRODUCT_CATEGORY_LIMIT', 2 );
function custom_get_modified_term_list( $id = 0, $taxonomy, $before = '', $sep = '', $after = '', $exclude = array() ){
    $terms = get_the_terms($id, $taxonomy);

    $term_links = [];

    if (is_wp_error($terms)) {
        return $terms;
    }

    if (empty($terms)) {
        return false;
    }

    foreach ($terms as $term) {

        if (!in_array($term->term_id, $exclude)) {
            $link = get_term_link($term, $taxonomy);
            if (is_wp_error($link)) {
                return $link;
            }
            if ( count($term_links) === PRODUCT_CATEGORY_LIMIT ) {
                break;
            }
            $term_links[] = '<a href="'.$link.'" rel="tag">'.$term->name.'</a>';
        }
    }

    if (!isset($term_links)) {
        return false;
    }

    return $before.join($sep, $term_links).$after;
}


<div class="kmn-posts-category">
     <span><?php echo custom_get_modified_term_list( get_the_ID(), 'category', '', '', '', array(1)); ?></span>
</div>
...