从简码 atts 数组值返回 WP_Query 个对象
Retun WP_Query objects from shortcode atts array values
寻找 return 在 name
中找到的每个事件(产品),其中 name
以逗号分隔,例如[woo_products_by_name name="shoe,shirt"]
如果我不 explode
name
那么什么都不会 return 编辑因为只看到 shoe,shirt
。如果使用 explode
则查询不是选择性的,并且似乎所有产品都是 returned。如果仅使用 'name' => $name
并且指定了上述的一节二乘积,则查询将按预期工作。想要 return 每个项目的匹配项,因此在此示例中,产品将 returned.
function woo_products_by_name_shortcode( $atts, $content = null ) {
// Get attribuets
extract(shortcode_atts(array(
'name' => ''
), $atts));
//$name = explode(",", $atts['name']);
ob_start();
// Define Query Arguments
$loop = new WP_Query( array(
'post_type' => 'product',
'posts_per_page' => 10,
'name' => explode(",",$name)
));
// Get products number
$product_count = $loop->post_count;
echo '<pre>'; print_r($loop->posts); echo '</pre>';
return ob_get_clean();
}
add_shortcode("woo_products_by_name", "woo_products_by_name_shortcode");
理想情况下,您会在短代码中使用 id
或其他可查询属性,如果您这样做,查询会容易得多 - 但会破坏 get_by_name
方法。
您可能正在 运行 一个 foreach
循环中查看两个单独的查询,或者更好的是删除 WP_Query
并使用 get_page_by_path()
function woo_products_by_name_shortcode( $atts, $content = null ) {
// Get attribuets
extract(shortcode_atts(array(
'name' => ''
), $atts));
$name_array = explode(",", $atts['name']);
ob_start();
$products = array();
foreach( $name_array as $product ){
$products[$product] = get_page_by_path( $product, OBJECT, 'product' );
}
// Get products number
$product_count = count( $name_array );
echo '<pre>'; print_r($products); echo '</pre>';
return ob_get_clean();
}
add_shortcode("woo_products_by_name", "woo_products_by_name_shortcode");
由于您提到需要使用 WP_Query,您将求助于通过使用 $wpdb
class 和 sql 查询来获取 ID,然后使用这些 ID 运行 WP_Query - 或者您可以从 get_page_by_path
获取 ID 并使用 post__in
参数查询这些 ID(注意双下划线)
function woo_products_by_name_shortcode( $atts, $content = null ) {
// Get attribuets
extract(shortcode_atts(array(
'name' => ''
), $atts));
$name_array = explode(",", $atts['name']);
$product_ids = array();
foreach( $name_array as $product ){
$product = get_page_by_path( $product, OBJECT, 'product' );
$product_ids[] = $product->ID;
}
ob_start();
// Define Query Arguments
$loop = new WP_Query( array(
'post_type' => 'product',
'posts_per_page' => 10,
'post__in' => $product_ids
));
// Get products number
$product_count = $loop->post_count;
echo '<pre>'; print_r($loop->posts); echo '</pre>';
return ob_get_clean();
}
add_shortcode("woo_products_by_name", "woo_products_by_name_shortcode");
这可以使用非常简单的 SQL 请求来完成,该请求将为您的产品 slug 提供产品 ID。然后使用 WP_Query
post__in
参数,你会得到你期望的:
function woo_products_by_name_shortcode( $atts, $content = null ) {
// Get attribuets
extract(shortcode_atts(array(
'name' => ''
), $atts));
if( empty($name) ) return;
// Format product slugs string
$name = str_replace(",", "','", $name);
global $wpdb;
// Get the corresponding products ids
$ids = $wpdb->get_col( "SELECT ID FROM {$wpdb->prefix}posts
WHERE post_type = 'product' AND post_name IN('$name')" );
ob_start();
// Define Query Arguments
$loop = new WP_Query( array(
'post_type' => 'product',
'posts_per_page' => -1,
'post__in' => $ids
));
// Get products number
$product_count = $loop->post_count;
echo '<pre>'; print_r($loop->posts); echo '</pre>';
return ob_get_clean();
}
add_shortcode("woo_products_by_name", "woo_products_by_name_shortcode");
代码进入您的活动子主题(或活动主题)的 function.php 文件。 已测试并有效。
html/php 中的测试输出:
<?php echo do_shortcode( "[woo_products_by_name name='shoe,shirt']" ); ?>
在 Wordpress 文本编辑器中测试输出:
[woo_products_by_name name='shoe,shirt']
寻找 return 在 name
中找到的每个事件(产品),其中 name
以逗号分隔,例如[woo_products_by_name name="shoe,shirt"]
如果我不 explode
name
那么什么都不会 return 编辑因为只看到 shoe,shirt
。如果使用 explode
则查询不是选择性的,并且似乎所有产品都是 returned。如果仅使用 'name' => $name
并且指定了上述的一节二乘积,则查询将按预期工作。想要 return 每个项目的匹配项,因此在此示例中,产品将 returned.
function woo_products_by_name_shortcode( $atts, $content = null ) {
// Get attribuets
extract(shortcode_atts(array(
'name' => ''
), $atts));
//$name = explode(",", $atts['name']);
ob_start();
// Define Query Arguments
$loop = new WP_Query( array(
'post_type' => 'product',
'posts_per_page' => 10,
'name' => explode(",",$name)
));
// Get products number
$product_count = $loop->post_count;
echo '<pre>'; print_r($loop->posts); echo '</pre>';
return ob_get_clean();
}
add_shortcode("woo_products_by_name", "woo_products_by_name_shortcode");
理想情况下,您会在短代码中使用 id
或其他可查询属性,如果您这样做,查询会容易得多 - 但会破坏 get_by_name
方法。
您可能正在 运行 一个 foreach
循环中查看两个单独的查询,或者更好的是删除 WP_Query
并使用 get_page_by_path()
function woo_products_by_name_shortcode( $atts, $content = null ) {
// Get attribuets
extract(shortcode_atts(array(
'name' => ''
), $atts));
$name_array = explode(",", $atts['name']);
ob_start();
$products = array();
foreach( $name_array as $product ){
$products[$product] = get_page_by_path( $product, OBJECT, 'product' );
}
// Get products number
$product_count = count( $name_array );
echo '<pre>'; print_r($products); echo '</pre>';
return ob_get_clean();
}
add_shortcode("woo_products_by_name", "woo_products_by_name_shortcode");
由于您提到需要使用 WP_Query,您将求助于通过使用 $wpdb
class 和 sql 查询来获取 ID,然后使用这些 ID 运行 WP_Query - 或者您可以从 get_page_by_path
获取 ID 并使用 post__in
参数查询这些 ID(注意双下划线)
function woo_products_by_name_shortcode( $atts, $content = null ) {
// Get attribuets
extract(shortcode_atts(array(
'name' => ''
), $atts));
$name_array = explode(",", $atts['name']);
$product_ids = array();
foreach( $name_array as $product ){
$product = get_page_by_path( $product, OBJECT, 'product' );
$product_ids[] = $product->ID;
}
ob_start();
// Define Query Arguments
$loop = new WP_Query( array(
'post_type' => 'product',
'posts_per_page' => 10,
'post__in' => $product_ids
));
// Get products number
$product_count = $loop->post_count;
echo '<pre>'; print_r($loop->posts); echo '</pre>';
return ob_get_clean();
}
add_shortcode("woo_products_by_name", "woo_products_by_name_shortcode");
这可以使用非常简单的 SQL 请求来完成,该请求将为您的产品 slug 提供产品 ID。然后使用 WP_Query
post__in
参数,你会得到你期望的:
function woo_products_by_name_shortcode( $atts, $content = null ) {
// Get attribuets
extract(shortcode_atts(array(
'name' => ''
), $atts));
if( empty($name) ) return;
// Format product slugs string
$name = str_replace(",", "','", $name);
global $wpdb;
// Get the corresponding products ids
$ids = $wpdb->get_col( "SELECT ID FROM {$wpdb->prefix}posts
WHERE post_type = 'product' AND post_name IN('$name')" );
ob_start();
// Define Query Arguments
$loop = new WP_Query( array(
'post_type' => 'product',
'posts_per_page' => -1,
'post__in' => $ids
));
// Get products number
$product_count = $loop->post_count;
echo '<pre>'; print_r($loop->posts); echo '</pre>';
return ob_get_clean();
}
add_shortcode("woo_products_by_name", "woo_products_by_name_shortcode");
代码进入您的活动子主题(或活动主题)的 function.php 文件。 已测试并有效。
html/php 中的测试输出:
<?php echo do_shortcode( "[woo_products_by_name name='shoe,shirt']" ); ?>
在 Wordpress 文本编辑器中测试输出:
[woo_products_by_name name='shoe,shirt']