Verwenden des Filters “excerpt_more” für einen bestimmten Beitragstyp

Ich habe den excerpt_more Filter in der functions.php eines Themas und in der functions.php eines Plugins verwendet. Hier ist der Code für das Thema

  function theme_excerpt_more( $more ) { return '...'; } add_filter('excerpt_more', 'theme_excerpt_more'); 

und hier ist der Code für das Plugin

  function newsbox_excerpt_more($more) { global $post; $options = get_option('newsbox_plugin_display_options'); if(isset($options['read_more_text'])){ $read_more_text = $options['read_more_text']; } else{ $read_more_text = "Read More »"; } return '...ID) . '">' . $read_more_text . ''; } add_filter('excerpt_more', 'newsbox_excerpt_more'); 

Aber nur der excerpt_more des Themas funktioniert. Ich möchte, dass das Plugin excerpt_more auf dem Post funktioniert, der im excerpt_more gesetzt wird. Dies ist der Shortcode

[news_box posts_per_page=-1 news_box_title="Latest News" post_type="latest_news" category ="Uncategorized"]

Wenn ich post_type nicht post_type , dann funktioniert excerpt_more des Plugins mit dem Standardpost.

Irgendwelche Vorschläge, um dies zu erreichen?

Bearbeiten: Vollständiger Code

  function newsbox_new_loading_shortcod($atts){ extract(shortcode_atts(array( 'posts_per_page'=>'-1', 'news_box_title'=>'Latest News', 'post_type'=>'post', 'category'=>'' ),$atts,'news_box')); $q = new WP_Query( array('posts_per_page' => $posts_per_page,'post_type'=>array($post_type),'category_name'=>$category)); $list = '
'.$news_box_title.'
    '; while($q->have_posts()) : $q->the_post(); $newsbox_post_img_src = wp_get_attachment_image_src( get_post_thumbnail_id(), '', false ); $list .= '
  • '.get_the_excerpt().'
  • '; endwhile; wp_reset_postdata(); return $list . '
'; } add_shortcode('news_box','newsbox_new_loading_shortcod');

Solutions Collecting From Web of "Verwenden des Filters “excerpt_more” für einen bestimmten Beitragstyp"

Wie ich in meiner Bearbeitung zu meiner Antwort zu Ihrem vorherigen Beitrag gesagt habe, habe ich Ihren kompletten Shortcode umgeschrieben, um ein bisschen nützlicher zu sein, und ich habe auch die function extract() , die eine schlechte function ist.

Um diese Frage zu beantworten, musste ich Ihren Shortcode weiter modifizieren. Um einen Konflikt mit anderen the_excerpt() zu vermeiden, habe ich the_excerpt() und durch wp_trim_words . Dies macht auch die Notwendigkeit für den Auszug mehr function ungültig, so dass Sie das löschen können. All diese functionalität ist jetzt in den Shortcode integriert

Hier ist der Update-Code. Nur zum Umbenennen: Benötigt PHP 5.4+

 add_shortcode( 'news_box', 'newsbox_new_loading_shortcode' ); function newsbox_new_loading_shortcode($atts){ ob_start(); $a = shortcode_atts( [ 'posts_per_page' => '-1', 'news_box_title' => 'Latest News', 'news_box_more' => '', 'post_type' => 'post', 'taxonomy' => '', 'terms' => '', 'category' => '', ], $atts ); if( '' == $a['taxonomy'] || '' == $a['terms'] ) { if( '' == $a['category'] ) { $args = [ 'posts_per_page' => $a['posts_per_page'], 'post_type' => $a['post_type'], ]; }else{ $args = [ 'posts_per_page' => $a['posts_per_page'], 'post_type' => $a['post_type'], 'category_name' => $a['category'], ]; } }else{ $args = [ 'posts_per_page' => $a['posts_per_page'], 'post_type' => $a['post_type'], 'tax_query' => [ [ 'taxonomy' => $a['taxonomy'], 'field' => 'slug', 'terms' => $a['terms'], ] ] ]; } //The following lines is for the excerpt more text NEW!! if( 'post' != $a['post_type'] && '' != $a['news_box_more'] ){ $read_more_text = $a['news_box_more']; }else { $read_more_text = "Read More »"; } // end of excerpt more text code $q = new WP_Query($args); if ( $q->have_posts() ) : while($q->have_posts()) : $q->the_post(); $newsbox_post_img_src = wp_get_attachment_image_src(get_post_thumbnail_id(), '', false, '' ); // wp_trim_words function NEW!! $content = get_the_content(); $trimmed_content = wp_trim_words( $content, 55, ' ...' . $read_more_text . '' ); // wp_trim_words function ?> 
  • < ?php if( !empty($newsbox_post_img_src)) { ?> < ?php } ?> < ?php echo $trimmed_content; // Replaced the_excerpt() ?>
  • < ?php endwhile; $list = ob_get_clean(); return $list; endif; wp_reset_postdata(); }

    Zur Unterstützung von PHP <5.4 können Sie für die Shortcode-Funktion folgendes tun.

     add_shortcode( 'news_box', 'newsbox_new_loading_shortcode' ); function newsbox_new_loading_shortcode($atts){ ob_start(); $a = shortcode_atts( array( 'posts_per_page' => '-1', 'news_box_title' => 'Latest News', 'news_box_more' => '', 'post_type' => 'post', 'taxonomy' => '', 'terms' => '', 'category' => '', ), $atts ); if( '' == $a['taxonomy'] || '' == $a['terms'] ) { if( '' == $a['category'] ) { $args = array( 'posts_per_page' => $a['posts_per_page'], 'post_type' => $a['post_type'], ); }else{ $args = array( 'posts_per_page' => $a['posts_per_page'], 'post_type' => $a['post_type'], 'category_name' => $a['category'], ); } }else{ $args = array( 'posts_per_page' => $a['posts_per_page'], 'post_type' => $a['post_type'], 'tax_query' => array( array( 'taxonomy' => $a['taxonomy'], 'field' => 'slug', 'terms' => $a['terms'], ), ), ); } //The following lines is for the excerpt more text NEW!! if( 'post' != $a['post_type'] && '' != $a['news_box_more'] ){ $read_more_text = $a['news_box_more']; }else { $read_more_text = "Read More »"; } // end of excerpt more text code $q = new WP_Query($args); if ( $q->have_posts() ) : while($q->have_posts()) : $q->the_post(); $newsbox_post_img_src = wp_get_attachment_image_src(get_post_thumbnail_id(), '', false, '' ); // wp_trim_words function NEW!! $content = get_the_content(); $trimmed_content = wp_trim_words( $content, 55, ' ...' . $read_more_text . '' ); // wp_trim_words function ?> 
  • < ?php if( !empty($newsbox_post_img_src)) { ?> < ?php } ?> < ?php echo $trimmed_content; // Replaced the_excerpt() ?>
  • < ?php endwhile; $list = ob_get_clean(); return $list; endif; wp_reset_postdata(); }

    Nur aus Interesse, haben Sie folgendes in Ihrem 'news_box_title' => Latest News', aber ich kann sehen, wo es hineinpasst. Ich habe es auch in meinem Code verwendet, aber ich habe es nirgendwo benutzt. Sie müssen es dort platzieren, wo Sie es brauchen.

    Versuche dies:

     function newsbox_excerpt_more($more) { global $post; if ( ! ( 'post' == $post->post_type ) ) { return $more; } $options = get_option('newsbox_plugin_display_options'); if(isset($options['read_more_text'])){ $read_more_text = $options['read_more_text']; } else { $read_more_text = "Read More »"; } return '...' . $read_more_text . ''; } add_filter('excerpt_more', 'newsbox_excerpt_more', 100); 

    Hier ist die Filterpriorität auf 100 . Auch innerhalb der function post_type ist geprüft. Wenn nicht post , wird der Standardwert zurückgegeben. Andernfalls wird es zurückgegeben, wenn Sie in der function schreiben.