我将此功能硬编码到内容单一产品中。php(WooCommerce),它可以显示来自categories ID 64 and 72:
$args = array(
\'post_type\' => \'product\',
\'post_status\' => \'publish\',
\'posts_per_page\' => \'3\',
\'orderby\' => \'rand\',
\'tax_query\' => array(
\'relation\' => \'AND\',
array(
\'taxonomy\' => \'product_cat\',
\'field\' => \'term_id\',
\'terms\' => array( 64, 72 ),
),
),
);
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
global $product;
现在,我没有对类别ID进行硬编码,而是在产品中添加了一个自定义字段
MyCustomField
并写道
64,72 在里面。然后我尝试修改上述代码以动态填充:
$MyCustomField = get_post_meta($post->ID, \'MyCustomField\', true);
$args = array(
\'post_type\' => \'product\',
\'post_status\' => \'publish\',
\'posts_per_page\' => \'3\',
\'orderby\' => \'rand\',
\'tax_query\' => array(
\'relation\' => \'AND\',
array(
\'taxonomy\' => \'product_cat\',
\'field\' => \'term_id\',
\'terms\' => array( $MyCustomField ),
),
),
);
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
global $product;
不幸的是,这无法正常工作:
\'terms\' => array( $MyCustomField )
因为它只显示第一个类别(ID 64)的产品,而不是我想要的两个类别的产品。
我是个程序员新手,我做错了什么?谢谢
SO网友:sMyles
来自WordPress codex:
关系(字符串)—当存在多个内部分类法数组时,每个内部分类法数组之间的逻辑关系。可能的值为“AND”、“OR”。不要与单个内部分类法数组一起使用。
其他事情也很少,您应该将值作为数组保存到自定义元中,WordPress将自动序列化该值:
使用update_post_meta
将自动序列化传递给它的任何数组:
update_post_meta( $post_id, \'MyCustomField\', array( 64, 72 ) );
然后,您可以在提取值时取消序列化:
$MyCustomField = maybe_unserialize( get_post_meta( $post->ID, \'MyCustomField\', TRUE ) );
在进行WP\\u查询调用之前,您可能还应该检查以确保有一个值
if( ! empty( $MyCustomField ) ){
$args = array(
\'post_type\' => \'product\',
\'post_status\' => \'publish\',
\'posts_per_page\' => \'3\',
\'orderby\' => \'rand\',
\'tax_query\' => array(
array(
\'taxonomy\' => \'product_cat\',
\'field\' => \'term_id\',
\'terms\' => $MyCustomField,
),
),
);
}
如果您的计划是通过WP Admin界面添加这些值(意味着您想输入CSV),那么您应该使用@ClemC方法,并使用
explode
, 具有
array_map
转换为整数的步骤