web-dev-qa-db-ja.com

カテゴリを保護するためにWoocommerceのショップページを無効にする

Woocommerceの「ショップ」ページを無効にしようとしています。基本的には、写真家のためにプリントや画像のダウンロードを販売するショップテーマを作成しています。

プライベートギャラリーを作成する必要があるため、カスタム投稿タイプを作成しました。ここでは、woocommerceカテゴリのショートコードを使用して製品を表示し、投稿タイプをパスワードで保護します。

これは、woocommerceカテゴリをパスワードで保護するための回避策です(誰かがより良いカテゴリを知っている場合は説明してください)。

問題は、誰かが/ shopに行くと、「保護されたもの」を含むすべての製品を購入することです。そのため、ショップページを無効にする必要があり、テーマ関数でプログラムで無効にする必要があります。何かご意見は?

6
chifliiiii

*編集-どうやら、以下で提案したページ設定は機能しなくなりました。 WooCommerceに変更するプラグイン設定がない場合、私は個人的にwordpressリダイレクトプラグイン リダイレクト のように使用します。このようにして、不要なものから自動的にリダイレクトできます。ショップページから製品を表示するページに移動します。404の問題を回避し、すべてをそのまま維持します。また、開発者以外の人に複雑さを追加するテンプレートファイルの編集も回避します。


古い答え:

Woo設定を試しましたか?

管理エリア、左側のメインメニュー、Woocommerce>設定[ページ]タブをクリックします。

ページ設定の下の「ショップベースページ」で、ドロップダウンの右側に小さな「x」があります。それをクリックしてページを削除します。

修正が必要なリンクが他にある場合はお知らせください。修正するためのフック/フィルターを見つけます。

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ページになります。多田!

さて、それはできないと言って、メニューから削除するだけだと言うすべての人々、そしてうまくいかないクレイジーなfunctions.phpアクションソリューションを持つすべての人々、そしてすべての人々はWoocommerce-> Settingsエリアからショップページを削除し、自分の言葉を食べることができるようになりました。これらの方法はどれも機能せず、この質問に答える前に自分でこれをテストするのに5分かかった場合、彼らはこれを知っていたでしょう!

20
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条件関数ドキュメント

18
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;
});

次に、WooCommerce"設定"製品"ディスプレイに移動し、[ショップページ]オプションの[x]をクリックして、CMSのショップページを削除する必要があります。

パーマリンクキャッシュをフラッシュする必要がある場合があります。これは、設定"パーマリンクの[更新]ボタンをクリックするだけで実行できます。

2
Lewis

最後の提案は、WP 4.6.1およびWooCommerce2.6.4では機能しませんでした。[公開]タブで製品を非表示にすると機能します。

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

1
Dudikowski

デフォルトのショップを無効にするページおよび/ shop /スラッグを空けておくカスタムページの場合は、次を使用します。

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

あなたはいくつか(または多分それ以上)のものをフックする必要があります:

/* 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' );

}

明らかにYOUR-CATEGORY-SLUG、YOUR-CATEGORY-SLUG-2を変更して、1つまたは複数の猫をショップページから非表示にします。

次に、メニューからも非表示にする必要がありますよね?:

/* 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