Фильтр не работал в классе содержимого (hybrid_post_attributes)

Я разрабатываю свою новую тему, используя базовую инфраструктуру Hybrid, и пытаюсь добавить item класса на сгенерированный класс hybrid_post_attributes используя фильтр с этим кодом.

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

Я хочу, чтобы мой класс «item» добавлялся как последний класс из классов «hybrid_post_attributes». Вот функция hybrid_post_attributes .

 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; } 

И вот функция hybrid_get_post_class.

 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 <!--more--> link. */ if ( !is_singular() && false !== strpos( $post->post_content, '<!--more-->' ) ) $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 ); } } 

Использовал ли мой способ использования фильтра неправильно?
Благодарю.

Solutions Collecting From Web of "Фильтр не работал в классе содержимого (hybrid_post_attributes)"

Чтобы ваш фильтр работал, код Hybrid Core должен был запускать что-то вроде $abcd = apply_filters('hybrid_post_attributes',$something); и я не вижу этого в коде, который вы опубликовали. На самом деле, я вообще не вижу apply_filters . Основываясь исключительно на этом опубликованном коде, вы не можете фильтровать эти элементы.

Я не думаю, что вы понимаете, как работают фильтры. Вы не можете подключиться к функции. Вам нужно подключиться к чему-то определенному, созданному с помощью apply_filters или do_action (для действий крючков). Видеть:

Уточнение фильтров и крючков
http://codex.wordpress.org/Plugin_API

Тем не менее, моя догадка, основанная на имени, заключается в том, что hybrid_get_post_class сам подключен к post_class . Вы должны иметь возможность подключить к ней свою собственную функцию.

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

Вот ваша версия «одной строки», @ChipBennett.

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

Похоже, ваш обратный вызов написан неправильно:

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

Вы передаете ему массив , и вам нужно вернуть этот массив. Как написано, вы возвращаете только один ключ массива. Попробуйте изменить массив, а затем верните его:

 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; }