it-swarm.com.de

Wie schneide ich Titel im Widget "Neueste Beiträge" ab?

Ich habe den Thread dazu hier gelesen ...

http://wordpress.org/support/topic/truncate-titles-in-recent-posts-widget?replies=8

die vorgeschlagene Lösung funktionierte jedoch nicht, da ich nicht sicher war, was ich mit dem Code anfangen sollte.

Kann mir jemand den vollständigen Code mit dem Code aus dem Pastebin-Link geben und hier: http://wordpress.org/support/topic/post-title-char-count?replies=5

Titel bitte auf 25 Zeichen kürzen? Ich bin wirklich nicht gut in PHP.

Es kann einfacher sein, ein Plugin zu erstellen, da der Code bereits vorhanden ist, sodass jeder auswählen kann, auf wie viele Zeichen die Titel beschränkt werden sollen.

Vielen Dank!

1
katkat

Ich war mir nicht sicher, ob ich antworten oder einfach abstimmen würde, um dieses Thema zu schließen. Ich habe das Gefühl, dass ich das ursprüngliche Thema, auf das Sie sich beziehen, ausreichend beantwortet habe. Ich würde mich hier nur wiederholen.

Das heißt, hier ist eine aktuelle Version, die Sie verwenden können (hat nur 2 Minuten gedauert). Sie müssen nur Ihren eigenen Code implementieren, um die Titel im Widget abzuschneiden. Ich habe den Codebereich für Sie markiert.

add_action( 'widgets_init', 'switch_recent_posts_widget' );

function switch_recent_posts_widget() {

    unregister_widget( 'WP_Widget_Recent_Posts' );
    register_widget( 'WP_Widget_Recent_Posts_Truncated' );

}

class WP_Widget_Recent_Posts_Truncated extends WP_Widget {

    function __construct() {
        $widget_ops = array('classname' => 'widget_recent_entries', 'description' => __( "The most recent posts on your site") );
        parent::__construct('recent-posts', __('Recent Posts'), $widget_ops);
        $this->alt_option_name = 'widget_recent_entries';

        add_action( 'save_post', array(&$this, 'flush_widget_cache') );
        add_action( 'deleted_post', array(&$this, 'flush_widget_cache') );
        add_action( 'switch_theme', array(&$this, 'flush_widget_cache') );
    }

    function widget($args, $instance) {
        $cache = wp_cache_get('widget_recent_posts', 'widget');

        if ( !is_array($cache) )
            $cache = array();

        if ( isset($cache[$args['widget_id']]) ) {
            echo $cache[$args['widget_id']];
            return;
        }

        ob_start();
        extract($args);

        $title = apply_filters('widget_title', empty($instance['title']) ? __('Recent Posts') : $instance['title'], $instance, $this->id_base);
        if ( ! $number = absint( $instance['number'] ) )
            $number = 10;

        $r = new WP_Query(array('posts_per_page' => $number, 'no_found_rows' => true, 'post_status' => 'publish', 'ignore_sticky_posts' => true));
        if ($r->have_posts()) :
?>
        <?php echo $before_widget; global $post ?>
        <?php if ( $title ) echo $before_title . $title . $after_title; ?>
        <ul>
        <?php  while ($r->have_posts()) : $r->the_post(); ?>
        <li><a href="<?php the_permalink() ?>" title="<?php echo esc_attr(get_the_title() ? get_the_title() : get_the_ID()); ?>">
            <?php 
            if( get_the_title() ) 
                the_title(); // DO YOUR STRING LENGTH RESTRICTION HERE!
            else 
                the_ID(); 
            ?>
        </a></li>
        <?php endwhile; ?>
        </ul>
        <?php echo $after_widget; ?>
<?php
        // Reset the global $the_post as this query will have stomped on it
        wp_reset_postdata();

        endif;

        $cache[$args['widget_id']] = ob_get_flush();
        wp_cache_set('widget_recent_posts', $cache, 'widget');
    }

    function update( $new_instance, $old_instance ) {
        $instance = $old_instance;
        $instance['title'] = strip_tags($new_instance['title']);
        $instance['number'] = (int) $new_instance['number'];
        $this->flush_widget_cache();

        $alloptions = wp_cache_get( 'alloptions', 'options' );
        if ( isset($alloptions['widget_recent_entries']) )
            delete_option('widget_recent_entries');

        return $instance;
    }

    function flush_widget_cache() {
        wp_cache_delete('widget_recent_posts', 'widget');
    }

    function form( $instance ) {
        $title = isset($instance['title']) ? esc_attr($instance['title']) : '';
        $number = isset($instance['number']) ? absint($instance['number']) : 5;
?>
        <p><label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title:'); ?></label>
        <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo $title; ?>" /></p>

        <p><label for="<?php echo $this->get_field_id('number'); ?>"><?php _e('Number of posts to show:'); ?></label>
        <input id="<?php echo $this->get_field_id('number'); ?>" name="<?php echo $this->get_field_name('number'); ?>" type="text" value="<?php echo $number; ?>" size="3" /></p>
<?php
    }
}

Sie müssen entscheiden, wie Sie den Titel abschneiden möchten, entweder nach einer festgelegten Anzahl von Wörtern oder, wie Sie in Ihrer Frage gesagt haben, nach der Anzahl der Zeichen. In jedem Fall hat jeder Ansatz einige Nachteile, weshalb ich gehe Sie entscheiden, welche Sie implementieren möchten und warum ..

Neben dem Bereich, den Sie aktualisieren müssen, befindet sich ein Kommentar, der wie folgt aussieht.

// DO YOUR STRING LENGTH RESTRICTION HERE!

Kleiner Hinweis, stellen Sie sicher, dass Sie get_the_title() verwenden, wenn Sie den Titel bearbeiten müssen, da dies einen Rückgabewert anstelle eines gedruckten Werts ergibt (den Sie mit the_title() erhalten).

Hier finden Sie einen Link zu einem Thema zu StackOverflow in Bezug auf das Abschneiden von Text sowie einen Google-Link mit einer Vielzahl von Links, die Sie lesen können, um zu erfahren, wie Sie mit dem Abschneiden vorgehen sollen.

https://stackoverflow.com/questions/965235/how-can-i-truncate-a-string-in-php
http: //www.google.comk/search? q = php + String + auf + Länge kürzen

HINWEIS: Dies ist ein Ersatz für das vorhandene Widget für kürzlich veröffentlichte Beiträge. Sie verlieren nicht das bereits eingerichtete Widget. Es übernimmt die Einstellungen der zuletzt veröffentlichten Standardbeiträge Widget.

2
t31os