Der Filter funktionierte nicht für die Inhaltsklasse (hybrid_post_attributes)

Ich entwickle mein neues Theme mit dem hybriden hybrid_post_attributes und versuche, mein classnelement in der generierten class hybrid_post_attributes mit einem Filter mit diesem Code hinzuzufügen.

 add_filter( 'hybrid_post_attributes', 'my_post_atributes'); function my_post_atributes($attributes){ return $attributes['class'] = substr_replace($attributes['class'], ' item', -1); } 

Ich möchte, dass meine ‘item’-class als letzte class aus’ hybrid_post_attributes’-classn hinzugefügt wird. Hier ist hybrid_post_attributes function.

 function hybrid_post_attributes() { $attributes = array(); $output = ''; $attributes['id'] = 'post-' . get_the_ID(); $attributes['class'] = join( ' ', hybrid_get_post_class() ); $attributes = apply_atomic( 'post_attributes', $attributes ); foreach( $attributes as $attr => $value ) $output .= " {$attr}='{$value}'"; echo $output; } 

Und hier ist hybrid_get_post_class-function.

 function hybrid_get_post_class( $class = '', $post_id = null ) { static $post_alt; $post = get_post( $post_id ); /* Make sure we have a real post first. */ if ( !empty( $post ) ) { $post_id = $post->ID; /* Add hentry for microformats compliance, the post type, and post status. */ $classes = array( 'hentry', $post->post_type, $post->post_status ); /* Post alt class. */ $classes[] = 'post-' . ++$post_alt; $classes[] = ( $post_alt % 2 ) ? 'odd' : 'even alt'; /* Author class. */ $classes[] = 'author-' . sanitize_html_class( get_the_author_meta( 'user_nicename' ), get_the_author_meta( 'ID' ) ); /* Sticky class (only on home/blog page). */ if ( is_home() && is_sticky() && !is_paged() ) $classes[] = 'sticky'; /* Password-protected posts. */ if ( post_password_required() ) $classes[] = 'protected'; /* Has excerpt. */ if ( post_type_supports( $post->post_type, 'excerpt' ) && has_excerpt() ) $classes[] = 'has-excerpt'; /* Has  link. */ if ( !is_singular() && false !== strpos( $post->post_content, '' ) ) $classes[] = 'has-more-link'; /* Post format. */ if ( current_theme_supports( 'post-formats' ) && post_type_supports( $post->post_type, 'post-formats' ) ) { $post_format = get_post_format( $post_id ); $classes[] = ( ( empty( $post_format ) || is_wp_error( $post_format ) ) ? 'format-standard' : "format-{$post_format}" ); } /* Add category and post tag terms as classes. */ if ( 'post' == $post->post_type ) { foreach ( array( 'category', 'post_tag' ) as $tax ) { foreach ( (array)get_the_terms( $post->ID, $tax ) as $term ) { if ( !empty( $term->slug ) ) $classes[] = $tax . '-' . sanitize_html_class( $term->slug, $term->term_id ); } } 

Ist meine Art der Filterung falsch?
Vielen Dank.

Solutions Collecting From Web of "Der Filter funktionierte nicht für die Inhaltsklasse (hybrid_post_attributes)"

Damit Ihr Filter funktioniert, müsste der Hybrid Core-Code etwa so aussehen: $abcd = apply_filters('hybrid_post_attributes',$something); und ich sehe das nicht in dem Code, den du gepostet hast. Tatsächlich sehe ich überhaupt keine apply_filters . Basierend auf diesem veröffentlichten Code können Sie diese Elemente nicht filtern.

Ich glaube nicht, dass Sie verstehen, wie Filter funktionieren. Sie können nicht mit einer function verknüpfen. Sie müssen einen Haken an etwas setzen, das speziell mit apply_filters oder do_action (für Aktions-Hooks) erstellt wurde. Sehen:

Klärung von Filtern und Haken
http://codex.wordpress.org/Plugin_API

Wie auch immer, basierend auf dem Namen, ist hybrid_get_post_class selbst an post_class . Du solltest deine eigene function damit verbinden können.

 add_filter('post_class', 'my_post_attributes'); function my_post_attributes($classes){ $classes[] = ' item'; return $classes; } 

Hier ist Ihre “one line” Version, @ChipBennett.

 add_filter('post_class', 'my_post_attributes'); function my_post_attributes($classes){ return array_merge($classes,array('item')); } 

Offenbar ist Ihr Callback falsch geschrieben:

 add_filter( 'hybrid_post_attributes', 'my_post_atributes'); function my_post_atributes($attributes){ return $attributes['class'] = substr_replace($attributes['class'], ' item', -1); } 

Sie übergeben ihm ein Array , und Sie müssen dieses Array zurückgeben. Wie beschrieben, geben Sie nur einen Array- Schlüssel zurück . Versuchen Sie, das Array zu ändern und es dann zurückzugeben:

 add_filter( 'hybrid_post_attributes', 'my_post_atributes'); function my_post_atributes($attributes){ // Modify $attributes['class'] = substr_replace($attributes['class'], ' item', -1); // Return return $attributes; }