Добавление настраиваемого поля внешняя ссылка на страницы категорий архивов


У меня есть веб-сайт woocommerce. Сначала я хотел бы добавить настраиваемое поле на страницах продуктов администратора, чтобы задать внешний URL-адрес , который я буду использовать на страницах продуктов категории "Архивы".

Также в идеале я хотел бы иметь это настраиваемое поле в метабоксе настроек страниц продуктов администратора. Но код, который у меня есть, меняет ссылку на всех страницах архивов.

На данный момент у меня есть этот код, который не делает то, что мне нужно:

remove_action( 'woocommerce_before_shop_loop_item', 'woocommerce_template_loop_product_link_open', 10 );
add_action( 'woocommerce_before_shop_loop_item', 'mycode_woocommerce_template_loop_product_link_open', 20 );
function mycode_woocommerce_template_loop_product_link_open() {

    $url = 'https://www.some_domain.com/';

    echo '<a href="' . $url . '">';

}

Как я могу сделать, чтобы он работал с архивами категорий только страницы?

Спасибо

Author: LoicTheAztec, 2016-09-17

1 answers

Шаг 1 - Создание настраиваемого поля в метабоксе настройки страниц продуктов администратора:

enter image description here

// Inserting a Custom Admin Field
add_action( 'woocommerce_product_options_general_product_data', 'add_custom_text_field_create' );
function add_custom_text_field_create() {
    echo '<div class="options_group">';

    woocommerce_wp_text_input( array(
        'type'              => 'text',
        'id'                => 'extern_link',
        'label'             => __( 'External Link', 'woocommerce' ),
        'placeholder'       => '',
        'description'       => __( 'Insert url', 'woocommerce' ),
    ) );

    echo '</div>';
}

// Saving the field value when submitted
add_action( 'woocommerce_process_product_meta', 'add_custom_field_text_save' );
function add_custom_field_text_save( $post_id ){
$wc_field = $_POST['extern_link'];
if( !empty( $wc_field ) )
    update_post_meta( $post_id, 'extern_link', esc_attr( $wc_field ) );
} 

Шаг 2 - Замена ссылки пользовательским мета-значением только на страницах архивов категорий продуктов.

remove_action( 'woocommerce_before_shop_loop_item', 'woocommerce_template_loop_product_link_open');
add_action( 'woocommerce_before_shop_loop_item', 'custom_wc_template_loop_product_link_open', 10 );
function custom_wc_template_loop_product_link_open() {
    // For product category archives pages only.
    if (is_product_category()) {
        // You get here your custom link
        $link = get_post_meta(get_the_ID(), 'extern_link', true);
        echo '<a href="' . $link . '" class="woocommerce-LoopProduct-link">';
    //For the other woocommerce archives pages
    } else {
        echo '<a href="' . get_the_permalink() . '" class="woocommerce-LoopProduct-link">';
    }
}

Код входит в function.php файл вашей активной дочерней темы (или темы) или также в любом файле плагина.

Этот код протестирован и работает

 4
Author: LoicTheAztec, 2016-09-17 19:58:48