如何使用IF IS_HOME()语句包装ADD_FILTER?

时间:2016-02-24 作者:beliy333

我有以下代码:

if ( !function_exists( \'df_excerpt_more\' ) ) {

   function df_excerpt_more( $more ) {
       return \' &hellip; <a class="more-link" href="\' . esc_url( get_permalink( get_the_ID() ) ) . \'">\' . esc_attr__( \'Read More\', \'applique\' ) . \'<i class="ion-ios-arrow-thin-right"></i></a>\';
   }

   add_filter( \'excerpt_more\', \'df_excerpt_more\' );

}
我想添加第二行“add\\u filter”,并仅在页面位于主页时执行它。所以我试着这样做:

if ( !function_exists( \'df_excerpt_more\' ) ) {

   function df_excerpt_more( $more ) {
       return \' &hellip; <a class="more-link" href="\' . esc_url( get_permalink( get_the_ID() ) ) . \'">\' . esc_attr__( \'Read More\', \'applique\' ) . \'<i class="ion-ios-arrow-thin-right"></i></a>\';
   }

   add_filter( \'excerpt_more\', \'df_excerpt_more\' );

   //second filter if is home like this:
   if ( is_home() ) :
     add_filter(\'get_the_excerpt\', \'df_excerpt_more\');
   endif;

}
出于某种原因,这是行不通的。看起来很简单。我错过了什么?

1 个回复
最合适的回答,由SO网友:Wes Moberly 整理而成

这个is_home() 函数在parse_query 行动因此,您可能希望像这样重写代码:

if ( ! function_exists( \'df_excerpt_more\' ) ) {

    function df_excerpt_more( $more ) {
        return \' &hellip; <a class="more-link" href="\' . esc_url( get_permalink( get_the_ID() ) ) . \'">\' . esc_attr__( \'Read More\', \'applique\' ) . \'<i class="ion-ios-arrow-thin-right"></i></a>\';
    }

}

add_action( \'parse_query\', \'df_add_excerpt_filters\' );

function df_add_excerpt_filters() {

    add_filter( \'excerpt_more\', \'df_excerpt_more\' );

    if ( is_home() ) :
        add_filter( \'get_the_excerpt\', \'df_excerpt_more\' );
    endif;

}

相关推荐

Apply_Filters()对所需的参数进行切片

我正在尝试向WooCommerce订单中的每个退款行添加一个按钮(其功能超出了这个问题的范围,足以说明它需要退款id作为参数)。我发现这些行是在woocommerce\\includes\\admin\\meta Box\\views\\html订单退款中创建的。无法重写的php。然而,有一项行动:do_action( \'woocommerce_admin_order_item_values\', null, $refund, $refund->get_id() ); 这似乎非常适合我的