image_downsize 应该在自定义助行器中工作吗?

is image_downsize supposed to work inside a custom walker?

我根据这里的代码实现了这个自定义助行器 I Displaying a wordpress menu with submenu and thumbnail

(它应该检索图像 URL 以将其用作 css 背景,而不是呈现实际的 img 标签)

一切正常,除了 wp_get_attachment_image_src 总是返回 false。

add_filter('walker_nav_menu_start_el', 'generate_nav_images', 20, 4);

    add_filter('walker_nav_menu_start_el', 'generate_nav_images', 20, 4);
    function generate_nav_images($item_output, $item, $depth, $args){

            if(has_post_thumbnail($item->object_id)){


                $thumb_url = wp_get_attachment_image_src( (int)$item->object_id, 'thumbnail', false );

                $dom = new DOMDocument();
                $dom->loadHTML($item_output); 
                $dom->getElementsByTagName('a')->item(0)->setAttribute( 'style' , 'background-image: url('. $thumb_url[0] . ');' );
                $item_output = $dom->saveHTML();
        }
        return $item_output;
    }

页面确实有缩略图,页面 ID 返回正常,get_the_post_thumbnail() returns 很好,但 wp_get_attachment_image_src() 没有。

我跟踪了关于图像大小返回 false 的许多函数的问题,除了 has_thumbnail()。

我跟踪的更深的 "false" 值是过滤器 "image_downsize" 但后来功能对我来说太高级了:(

image_downsize 甚至应该在助行器内工作吗?

谢谢。

这是您的解决方案:

add_filter('walker_nav_menu_start_el', 'generate_nav_images', 20, 4);
function generate_nav_images($item_output, $item, $depth, $args){
    if( $args->theme_location == "topnav") {
        if(has_post_thumbnail($item->object_id)){

            // get attachment ID
            $thumb_id = get_post_meta($item->object_id, '_thumbnail_id', true);
            $thumb_url = wp_get_attachment_image_src( $thumb_id, 'thumbnail', false );

            $dom = new DOMDocument();
            $dom->loadHTML($item_output); 
            $dom->getElementsByTagName('a')->item(0)->setAttribute( 'style' , 'background-image: url('. $thumb_url[0] . ');' );
            $item_output = $dom->saveHTML();
        }
    }
    return $item_output;
}

wp_get_attachment_image_src() 预计附件不是 Post ID。