1. Ten fragment kodu jest bez sensu
<?php while ( have_posts() ) : the_post(); ?>
<?php endwhile; // end of the loop. ?>
<?php echo get_post_meta($post->ID, 'Main', true); ?>
Po co pusta pętla while?
2. Jeśli chcesz aby na stronie kategorii wyświetlał się tekst który jest ustawiony na stronie sklepu to muszisz pobrać ID strony sklepu. Jeśli sklep jest na woocommerce możesz to zrobić w ten sposób
<?php echo get_post_meta(get_option( 'woocommerce_shop_page_id' ) 'Main', true); ?>
3. To oczywiście spowoduje że na wszystkich stronach będzie wyświetlony tekst ze strony sklepu, dlatego muszisz sprawdzić czy aktualnie wyświetlana strona jest stroną kategorii czy też nie. Służą do tego takie funkcje jak np is_category() lub is_tax().
Tak więc Twój kod powinien wyglądać mniej więcej tak:
$post_id = is_category() ? get_option('woocommerce_shop_page_id') : $post->ID;
echo get_post_meta($post_id, 'Main', true);