使用 PHP 分隔重复的字符串
Separating a string that is duplicated using PHP
变量 $category 被接收为 "summersummer" 或 "all-seasonall-season"。
有什么办法可以拆分吗?我想把它作为一个术语来传递。
这是我的代码。
function advanced_search_query($query) {
if($query->is_search()) {
// category terms search.
$category = $_GET['category'];
$string_array = explode(" ",$category);
print_r($string_array);
$taxonomy = 'product_cat';
if (isset($category) && !empty($category)) {
$args = array(
array(
'taxonomy' => $taxonomy,
'field' => 'slug',
'terms' => $category
)
);
$query->set('tax_query', $args);
}
return $query;
} } add_action('pre_get_posts', 'advanced_search_query', 1000);
print_r 给我 Array ( [0] => all-season ) Array ( [0] => all-season )
编辑 1(发送 $category 值的代码):
<form role="search" method="get" class="woocommerce-product-search" action="<?php print_r( $query ); ?><?php echo esc_url( home_url( '/' ) ); ?>">
<label class="screen-reader-text" for="s"><?php _e( 'Search for:', 'woocommerce' ); ?></label>
<input type="search" class="search-field" placeholder="<?php echo esc_attr_x( 'Search Products…', 'placeholder', 'woocommerce' ); ?>" value="<?php echo get_search_query(); ?>" name="s" title="<?php echo esc_attr_x( 'Search for:', 'label', 'woocommerce' ); ?>" />
<select name="category">
<option value="winter">Winter</option>
<option value="all-season">All Season</option>
<option value="run-flat">Run Flats</option>
<option value="summer">Summer</option>
</select>
<input type="submit" value="<?php echo esc_attr_x( 'Search', 'submit button', 'woocommerce' ); ?>" />
<input type="hidden" name="post_type" value="product" />
您遇到的问题是您编写的代码多次 运行 而不是复制字符串的变量。
在修改查询/输出字符串进行测试之前,您需要在 pre_get_posts
回调中进行更多检查。
改变这个:
if($query->is_search()) {
收件人:
if ( ! is_admin() && $query->is_main_query() && $query->is_search() ) {
我还建议将其分成两个条件,但我不想让事情过于复杂。我们首先检查我们不在管理员中。这与您的问题无关,但在使用 pre_get_posts
时是一项重要的检查。然后我们检查我们是否正在对页面上的主查询进行操作。 pre_get_posts
将在页面加载时触发多次,因此我们必须确保我们只修改主帖子循环。
变量 $category 被接收为 "summersummer" 或 "all-seasonall-season"。
有什么办法可以拆分吗?我想把它作为一个术语来传递。
这是我的代码。
function advanced_search_query($query) {
if($query->is_search()) {
// category terms search.
$category = $_GET['category'];
$string_array = explode(" ",$category);
print_r($string_array);
$taxonomy = 'product_cat';
if (isset($category) && !empty($category)) {
$args = array(
array(
'taxonomy' => $taxonomy,
'field' => 'slug',
'terms' => $category
)
);
$query->set('tax_query', $args);
}
return $query;
} } add_action('pre_get_posts', 'advanced_search_query', 1000);
print_r 给我 Array ( [0] => all-season ) Array ( [0] => all-season )
编辑 1(发送 $category 值的代码):
<form role="search" method="get" class="woocommerce-product-search" action="<?php print_r( $query ); ?><?php echo esc_url( home_url( '/' ) ); ?>">
<label class="screen-reader-text" for="s"><?php _e( 'Search for:', 'woocommerce' ); ?></label>
<input type="search" class="search-field" placeholder="<?php echo esc_attr_x( 'Search Products…', 'placeholder', 'woocommerce' ); ?>" value="<?php echo get_search_query(); ?>" name="s" title="<?php echo esc_attr_x( 'Search for:', 'label', 'woocommerce' ); ?>" />
<select name="category">
<option value="winter">Winter</option>
<option value="all-season">All Season</option>
<option value="run-flat">Run Flats</option>
<option value="summer">Summer</option>
</select>
<input type="submit" value="<?php echo esc_attr_x( 'Search', 'submit button', 'woocommerce' ); ?>" />
<input type="hidden" name="post_type" value="product" />
您遇到的问题是您编写的代码多次 运行 而不是复制字符串的变量。
在修改查询/输出字符串进行测试之前,您需要在 pre_get_posts
回调中进行更多检查。
改变这个:
if($query->is_search()) {
收件人:
if ( ! is_admin() && $query->is_main_query() && $query->is_search() ) {
我还建议将其分成两个条件,但我不想让事情过于复杂。我们首先检查我们不在管理员中。这与您的问题无关,但在使用 pre_get_posts
时是一项重要的检查。然后我们检查我们是否正在对页面上的主查询进行操作。 pre_get_posts
将在页面加载时触发多次,因此我们必须确保我们只修改主帖子循环。