it-swarm.com.ru

Отключить страницу магазина в Woocommerce для защиты категорий

Я пытаюсь отключить страницу "магазин" в Woocommerce. По сути, я создаю тему магазина для продажи печатных изданий и изображений для фотографа.

Поскольку мне нужно создавать частные галереи, я создал собственный тип публикации, в котором я использую шорткод категории woocommerce для отображения продуктов, а затем защищаю паролем тип записи.

Это обходной путь для защиты паролем категорий WooCommerce (если кто-то знает, лучше, пожалуйста, объясните).

Проблема в том, что если кто-то идет в магазин, он покупает все товары, включая "защищенные". Так что мне нужно отключить страницу магазина, и мне нужно сделать это программно на моих функциях темы. Какие-нибудь мысли?

5
chifliiiii

* Edit - очевидно, настройки страницы, которые я предложил ниже, больше не работают. Если в WooCommerce нет настройки плагина для его изменения, я бы лично использовал плагин перенаправления wordpress, например Redirection . Таким образом, вы можете автоматически перенаправить их со страницы нежелательного магазина на любую страницу, где отображаются ваши продукты. Это позволяет избежать проблемы 404 и держит все в такте. Это также позволяет избежать редактирования файлов шаблонов, что добавляет сложностей не-разработчикам.


Старый ответ:

Вы пробовали настройки Woo?

Область администратора, левое главное меню, Woocommerce> Настройки Нажмите вкладку страниц.

В разделе "Настройки страниц" выбрана "Страница базовой базы", ​​в выпадающем меню справа есть маленькая буква "х". Нажмите, чтобы избавиться от страницы.

Если в другом месте есть ссылки, которые нужно исправить, дайте мне знать, и я найду зацепки/фильтры, чтобы исправить это.

3
David Hobs

Я не знаю, почему это так сложно найти ответ в Интернете и почему никто другой не может думать об этом. Но вот правильный ответ, независимо от того, выбрали вы это или нет.

Чтобы отключить страницу магазина, скопируйте файл archive-product.php из /wp-content/plugins/woocommerce/templates/archive-product.php и вставьте /wp-content/themes/{Your Theme}/woocommerce/archive-product.php

Откройте файл и перезапишите все в файле следующим кодом:

<?php
global $wp_query;

$wp_query->set_404();
status_header(404);

get_template_part('404');
?>

Сохраните файл, и теперь ваша страница магазина исчезла, а теперь страница 404! TADA!

Теперь все те люди, которые говорят, что это не может быть сделано, и просто удалить его из меню, и все эти люди с сумасшедшими functions.php решениями для действий, которые не работают, и все те люди, которые говорят, чтобы удалить страницу магазина из области Woocommerce-> Settings теперь можно есть собственные слова, потому что ни один из этих способов не работает, и они знали бы об этом, если бы потратили 5 минут, чтобы проверить это сами, прежде чем ответить на этот вопрос!

19
Solomon Closson

Добавьте это к функциям:

function woocommerce_disable_shop_page() {
    global $post;
    if (is_shop()):
    global $wp_query;
    $wp_query->set_404();
    status_header(404);
    endif;
}
add_action( 'wp', 'woocommerce_disable_shop_page' );

Документы: Документация по условным функциям WooCommerce

13
user3590977

В WooCommerce есть фильтр для массива, который он использует для создания типа публикации Product: woocommerce_register_post_type_product.

Вместо того, чтобы изменить шаблон архива, чтобы принудительно перенаправить его, вы можете полностью удалить архив с типом записи, но изменив атрибут has_archive в типе записи при создании.

add_filter('woocommerce_register_post_type_product', function($post_type) {
    $post_type['has_archive'] = false;
    return $post_type;
});

Затем вы должны удалить страницу магазина в CMS, перейдя по ссылке WooCommerce "Настройки" Продукт "Показать и нажав" x "на опции" Страница магазина ".

Вам может потребоваться очистить кэш постоянных ссылок, что можно сделать, просто нажав кнопку "Обновить" в Настройки "Постоянные ссылки.

2
Lewis

Последнее предложение не сработало для меня с WP 4.6.1 и WooCommerce 2.6.4. Скрытие продуктов на вкладке "Публикация" работает для меня.

http://paperhedge.com/hide-products-from-displaying-in-shop-page-woocommerce/

1
Dudikowski

Чтобы отключить магазин по умолчанию страницу и оставить/shop/slug free для пользовательских страниц используйте это:

function remove_woocommerce_default_shop( $args, $post_type ) {
    if (class_exists('WooCommerce')) {
        if ( $post_type == "product" ) {
            $args['has_archive'] = true;
        }
        return $args;
    }
}
add_filter('register_post_type_args', 'remove_woocommerce_default_shop', 20, 2);
0
Federico Schiocchet

Вам нужно подключить пару (или, может быть, больше) вещей:

/* hide category from shop pages */
add_action( 'pre_get_posts', 'custom_pre_get_posts_query' );
function custom_pre_get_posts_query( $q ) {

    if ( ! $q->is_main_query() ) return;
    if ( ! $q->is_post_type_archive() ) return;

    if ( ! is_admin() ) {
        $q->set( 'tax_query', array(array(
            'taxonomy' => 'product_cat',
            'field' => 'slug',
            'terms' => array( YOUR-CATEGORY-SLUG, YOUR-CATEGORY-SLUG-2 ), // Don't display products in the knives category on the shop page
            'operator' => 'NOT IN'
        )));

    }

    remove_action( 'pre_get_posts', 'custom_pre_get_posts_query' );

}

Измените, очевидно, ВАШУ-КАТЕГОРИЮ-СЛАГА, ВАШУ-КАТЕГОРИЮ-СЛАГА-2 на то, чтобы ваша кошка или кошки прятались от страниц магазина.

Тогда вам тоже нужно скрывать их от меню, верно?

/* hide category from menues */
add_filter( 'get_terms', 'get_subcategory_terms', 10, 3 );
function get_subcategory_terms( $terms, $taxonomies, $args ) {
    $new_terms = array();

    // if category and on the shop page (change it with is_woocommerce() if want to hide from all woo pages)
    if ( in_array( 'product_cat', $taxonomies ) && ! is_admin() && is_shop() ) {

        foreach ( $terms as $key => $term ) {
          if ( ! in_array( $term->slug, array( YOUR-CATEGORY-SLUG, YOUR-CATEGORY-SLUG-2 ) ) ) {
            $new_terms[] = $term;
          }

    }
        $terms = $new_terms;
    }
  return $terms;
}

Но я не думаю, что это решит проблему на 100%, с тех пор, как насчет результатов поиска?

0
rgdesign