首页 > 解决方案 > apply_filters 不回显无序列表中的列表项

问题描述

我正在使用 wordpressapply_filters钩子来附加一个动作钩子。我的代码是在标签中的某些链接时回显列表ul。(如果 woocommerce 处于活动状态)。

我的代码在这里

$loggedin_item = '<div>';
    $loggedin_item .= $user_dp; //it works & its none of this questions business
    $loggedin_item .= '<ul>';
        apply_filters( 'after_user_loggedin_menu', $is_wc_active, $is_logged_in ); //its not working
    $loggedin_item .= '</ul>';
$loggedin_item .= '</div>';

我的附件功能在这里。如果我使用 echo 它会在外面回显ul,如果我使用 return 它不会回显任何东西

function wc_action_header( $is_wc_active, $is_logged_in ){
    $wc_li = '';
    if( $is_wc_active){
        $my_account_url = get_permalink( get_option('woocommerce_myaccount_page_id') );
        $wc_account_items = wc_get_account_menu_items();
        foreach ($wc_account_items as $key => $value) {
            $wc_li .= '<li><a href="' . $my_account_url . $key . '">'. esc_attr($value) .'</a></li>'; 
        }
    }
    echo $wc_li; 
}

并添加钩子

add_filter('after_user_loggedin_menu', array($this, 'wc_action_header' ), 10, 2);

标签: phpwordpress

解决方案


由于您将 HTML 存储在$loggedin_itemvar 中,因此您需要将wc_action_header输出添加到此 var。

$loggedin_item = '<div>';
    $loggedin_item .= $user_dp; //it works & its none of this questions business
    $loggedin_item .= '<ul>';

    $output = '';
    $output = apply_filters( 'after_user_loggedin_menu', $is_wc_active, $is_logged_in );
    $loggedin_item.=$output;

    $loggedin_item .= '</ul>';
$loggedin_item .= '</div>';

并更改echo $wc_li;return $wc_li;您的wc_action_header功能。


推荐阅读