回答:
箱から出して、いいえ、MagentoのCatalog -> Google Sitemap
機能によって生成されたサイトマップから特定の製品を除外する方法はありません。
プログラムでこれを実行しようとした場合、Magentoの最新バージョン(1.7.xブランチで確認済み、これは以前/ EEバージョンで使用されている可能性があります)は次のリソースモデルクラスを使用します
Mage_Sitemap_Model_Resource_Catalog_Product
製品のリストを取得します。
#File: app/code/core/Mage/Sitemap/Model/Sitemap.php
$collection = Mage::getResourceModel('sitemap/catalog_product')->getCollection($storeId);
これは標準のMagento CRUDモデルでgetCollection
はなく、コレクションオブジェクトを返しません。代わりに、getCollection
これらの製品のデータベースを手動で照会します。
特定の製品がサイトマップに表示されないようにする機能を実装する場合は、次のいずれかを試みます。
クラスgetCollection
はparent::getCollection
、を呼び出すメソッドを書き直し、配列から製品を手動で除外します
_addFilter
parent :: _ addFilterメソッドを呼び出すクラスを書き換えてから、さらにWHERE句を追加して_select
、特定の製品を除外します。ハッキングのようなものですが_select
、データベースへのクエリに使用されるオブジェクトにアクセスできる唯一の方法です。理想的には、新しいWHERE句を一度だけ追加するために、何らかのグローバル/静的フラグが必要です。
Magento 1.9.0以降。コアファイルに触れることなくこれを行うことができます。
次の2つの新しいイベントを監視できます。
sitemap_categories_generating_before
sitemap_products_generating_before
属性に基づいて製品を除外するには、次を実行できます。
にオブザーバーを追加する sitemap_products_generating_before
app \ code \ community \ My \ Module \ etc \ config.xml
<events>
<sitemap_products_generating_before>
<observers>
<my_module>
<class>my_module/observer</class>
<method>excludeProductsFromSitemap</method>
</my_module>
</observers>
</sitemap_products_generating_before>
</events>
app \ code \ community \ My \ Module \ Model \ Observer.php
public function excludeProductsFromSitemap(Varien_Event_Observer $observer)
{
$collection = $observer->getCollection();
$items = $collection->getItems();
$excludeIds = Mage::getModel('catalog/product')
->getCollection()
->setStoreId($observer->getStoreId()) # requieres Magento 1.9.3.0
->addAttributeToFilter('use_in_sitemap', 0)
->getAllIds();
foreach ($excludeIds as $id) {
unset($items[$id]);
}
$collection->setItems($items);
}
「yes / no」という名前の製品属性を追加しますuse_in_sitemap
(デフォルト値は「yes」の場合があります)
注:Magento 1.9.3.0までは、属性をglobal
スコープに設定する必要があります。
これを実現するには、次のことを実行できます。
製品に対して属性を作成しますexclude_from_sitemap
(はい/いいえ)
Mage_Sitemap_Model_Resource_Catalog_Product
クラスを上書きgetCollection
し、新しい属性にフィルターを追加して機能を変更します。つまり、サイトマップから除外します
あなたが開発者ではない場合、次のモジュールは上記の達成に役立ちますが、もちろん有料の拡張機能です
http://www.scommerce-mage.co.uk/magento-extensions/magento-google-site-map-exclusion.html