$category = $_product->get_categories();
preg_match_all("`<[^>]+>([^<]+)</[^>]+>`", $category, $categories);
if (in_array('Pants', $categories[1])) {
?>
<h2>This product has Pants, and potentially other categories</h2>
<?php
}
$ categories [1]은 각 요소가 단일 범주 인 배열입니다. in_array()는 배열에서 요청 된 값이 ANYWHERE인지 확인합니다.
테스트를 :
$category = '<a href="linktocategorypage" rel="tag">T-Shirts</a><a href="linktocategorypage" rel="tag">Pants</a>';
preg_match_all("`<[^>]+>([^<]+)</[^>]+>`", $category, $categories);
$pants = in_array('Pants', $categories[1]);
if ($pants) echo "True"; else echo "False";
print_r($categories[1]);
수율 :
True
Array
(
[0] => T-Shirts
[1] => Pants
)
업데이트
코드와 통합 :
$stack = array();
foreach ($woocommerce->cart->get_cart() as $cart_item_key => $values) {
$_product = $values['data'];
$category = $_product->get_categories();
preg_match_all("`<[^>]+>([^<]+)</[^>]+>`", $category, $categories);
foreach($categories[1] as $cat) $stack[] = $cat; // Could also use array_merge here
}
if(in_array('Pants', $stack)) echo 'We have pants';
else echo 'We do not have pants';
하는 경우 $ stack 배열에 범주가 두 번 이상 표시되는 것을 원하지 않습니다.
$stack = array();
foreach ($woocommerce->cart->get_cart() as $cart_item_key => $values) {
$_product = $values['data'];
$category = $_product->get_categories();
preg_match_all("`<[^>]+>([^<]+)</[^>]+>`", $category, $categories);
foreach($categories[1] as $cat) {
if (!in_array($cat, $stack)) $stack[] = $cat;
}
}
if(in_array('Pants', $stack)) echo 'We have pants';
else echo 'We do not have pants';
출처
2013-08-30 19:32:15
gwc
아니요,이 코드에서 strip_tags를 제거해야합니다. 데이터베이스에 html을 저장하지 마십시오. –
스트립 태그는 단순히 get_categories()에서 반환 된 링크를 제거합니다. 하이퍼 링크에서 텍스트를 추출해야합니다. – JCHASE11
나는 이해하지만 매우 취약한 알고리즘이다. –