How do we get this array output? - multidimensional-array

We need this output:
$filters = [
['property' => 'status.id', 'expression' => '!=', 'value' => 5],
['property' => 'status.id', 'expression' => '!=', 'value' => 1],
['property' => 'status.id', 'expression' => '!=', 'value' => 7],
];
and this way doesn't work:
foreach ($orderStatusItems as $orderStatusItem) {
$filters[] .= "['property' => 'status.id', 'expression' => '!=', 'value' => $orderStatusItem],";
}

here is the solution:
$orderFilters = [];
foreach ($orderStatusItems as $orderStatusItem) {
array_push($orderFilters, ['property' => 'status.id', 'expression' => '!=', 'value' => $orderStatusItem]);
}

Related

How to add product attributes programmatically?

if i try this:
$arr = [
'pa_yacht-dozvillya' => [
'name' => 'pa_yaht-dozvillya',
'value' => 'Акваскутер',
'is_visible' => 1,
'is_taxonomy' => 1,
],
];
update_post_meta(2194, '_product_attributes', $arr);
then this adds an attribute with no value
here

How can I add a filter for specific categories on functions.php?

I am on functions.php and I want to add this filter:
function graphene_alter_the_query( $request ) {
$dummy_query = new WP_Query();
$dummy_query->parse_query( $request );
if (!is_category('25')) {
$request['gdsr_sort'] = 'rating';
}
else {
$request['gdsr_sort'] = 'comment_count';
}
return $request;
}
add_filter( 'request', 'graphene_alter_the_query' );
the filter should do the same thing for all categories except cat 25 but seems like it cant tell it apart like if the IF condition is not detecting the category so I tried to debug it by looking at the values in WP_Query and I get this:
$myquery = new WP_Query(); print_r($myquery);
WP_Query Object ( [query] => Array ( [category_name] => 'my cat' ) [query_vars] => Array ( [category_name] => 'my cat' [error] => [m] => [p] => 0 [post_parent] => [subpost] => [subpost_id] => [attachment] => [attachment_id] => 0 [name] => [pagename] => [page_id] => 0 [second] => [minute] => [hour] => [day] => 0 [monthnum] => 0 [year] => 0 [w] => 0 [tag] => [cat] => [tag_id] => [author] => [author_name] => [feed] => [tb] => [paged] => 0 [meta_key] => [meta_value] => [preview] => [s] => [sentence] => [title] => [fields] => [menu_order] => [embed] => [category__in] => Array ( ) [category__not_in] => Array ( ) [category__and] => Array ( ) [post__in] => Array ( ) [post__not_in] => Array ( ) [post_name__in] => Array ( ) [tag__in] => Array ( ) [tag__not_in] => Array ( ) [tag__and] => Array ( ) [tag_slug__in] => Array ( ) [tag_slug__and] => Array ( ) [post_parent__in] => Array ( ) [post_parent__not_in] => Array ( ) [author__in] => Array ( ) [author__not_in] => Array ( ) ) [tax_query] => WP_Tax_Query Object ( [queries] => Array ( [0] => Array ( [taxonomy] => category [terms] => Array ( [0] => 'my cat' ) [field] => slug [operator] => IN [include_children] => 1 ) ) [relation] => AND [table_aliases:protected] => Array ( ) [queried_terms] => Array ( [category] => Array ( [terms] => Array ( [0] => 'my cat' ) [field] => slug ) ) [primary_table] => [primary_id_column] => ) [meta_query] => [date_query] => [post_count] => 0 [current_post] => -1 [in_the_loop] => [comment_count] => 0 [current_comment] => -1 [found_posts] => 0 [max_num_pages] => 0 [max_num_comment_pages] => 0 [is_single] => [is_preview] => [is_page] => [is_archive] => 1 [is_date] => [is_year] => [is_month] => [is_day] => [is_time] => [is_author] => [is_category] => 1 [is_tag] => [is_tax] => [is_search] => [is_feed] => [is_comment_feed] => [is_trackback] => [is_home] => [is_privacy_policy] => [is_404] => [is_embed] => [is_paged] => [is_admin] => [is_attachment] => [is_singular] => [is_robots] => [is_favicon] => [is_posts_page] => [is_post_type_archive] => [query_vars_hash:WP_Query:private] => 6d85cdf18f3e6a58a470a3002d5807fc [query_vars_changed:WP_Query:private] => [thumbnails_cached] => [stopwords:WP_Query:private] => [compat_fields:WP_Query:private] => Array ( [0] => query_vars_hash [1] => query_vars_changed ) [compat_methods:WP_Query:private] => Array ( [0] => init_query_flags [1] =>
but both tag_id and cat appear empty. Why is that?

WooCommerce get product name, price etc from Object

I have this code:
$args = array(
'category' => array( 'membership-level' ),
'orderby' => 'name',
);
$products = wc_get_products( $args );
echo '<pre>';
print_r( $products );
echo '</pre>';
And its output is something like that:
Array
(
[0] => WC_Product_Simple Object
(
[object_type:protected] => product
[post_type:protected] => product
[cache_group:protected] => products
[data:protected] => Array
(
[name] => Test Level
[slug] => test-level
[date_created] => WC_DateTime Object
(
[utc_offset:protected] => 0
[date] => 2022-04-10 11:54:18.000000
[timezone_type] => 1
[timezone] => +00:00
)
[date_modified] => WC_DateTime Object
(
[utc_offset:protected] => 0
[date] => 2022-04-10 11:54:18.000000
[timezone_type] => 1
[timezone] => +00:00
)
[status] => publish
[featured] =>
[catalog_visibility] => visible
[description] => Hello Test Level
[short_description] =>
[sku] =>
[price] => 12
[regular_price] => 12
[sale_price] =>
[date_on_sale_from] =>
[date_on_sale_to] =>
[total_sales] => 1
[tax_status] => taxable
[tax_class] =>
[manage_stock] =>
[stock_quantity] =>
[stock_status] => instock
[backorders] => no
[low_stock_amount] =>
[sold_individually] =>
[weight] =>
[length] =>
[width] =>
[height] =>
[upsell_ids] => Array
(
)
[cross_sell_ids] => Array
(
)
[parent_id] => 0
[reviews_allowed] => 1
[purchase_note] =>
[attributes] => Array
(
)
[default_attributes] => Array
(
)
[menu_order] => 0
[post_password] =>
[virtual] => 1
[downloadable] =>
[category_ids] => Array
(
[0] => 141
)
[tag_ids] => Array
(
)
[shipping_class_id] => 0
[downloads] => Array
(
)
[image_id] =>
[gallery_image_ids] => Array
(
)
[download_limit] => -1
[download_expiry] => -1
[rating_counts] => Array
(
)
[average_rating] => 0
[review_count] => 0
)
[supports:protected] => Array
(
[0] => ajax_add_to_cart
)
[id:protected] => 5275
[changes:protected] => Array
(
)
[object_read:protected] => 1
[extra_data:protected] => Array
(
)
[default_data:protected] => Array
(
[name] =>
[slug] =>
[date_created] =>
[date_modified] =>
[status] =>
[featured] =>
[catalog_visibility] => visible
[description] =>
[short_description] =>
[sku] =>
[price] =>
[regular_price] =>
[sale_price] =>
[date_on_sale_from] =>
[date_on_sale_to] =>
[total_sales] => 0
[tax_status] => taxable
[tax_class] =>
[manage_stock] =>
[stock_quantity] =>
[stock_status] => instock
[backorders] => no
[low_stock_amount] =>
[sold_individually] =>
[weight] =>
[length] =>
[width] =>
[height] =>
[upsell_ids] => Array
(
)
[cross_sell_ids] => Array
(
)
[parent_id] => 0
[reviews_allowed] => 1
[purchase_note] =>
[attributes] => Array
(
)
[default_attributes] => Array
(
)
[menu_order] => 0
[post_password] =>
[virtual] =>
[downloadable] =>
[category_ids] => Array
(
)
[tag_ids] => Array
(
)
[shipping_class_id] => 0
[downloads] => Array
(
)
[image_id] =>
[gallery_image_ids] => Array
(
)
[download_limit] => -1
[download_expiry] => -1
[rating_counts] => Array
(
)
[average_rating] => 0
[review_count] => 0
)
[data_store:protected] => WC_Data_Store Object
(
[instance:WC_Data_Store:private] => WC_Product_Data_Store_CPT Object
(
[internal_meta_keys:protected] => Array
(
[0] => _visibility
[1] => _sku
[2] => _price
[3] => _regular_price
[4] => _sale_price
[5] => _sale_price_dates_from
[6] => _sale_price_dates_to
[7] => total_sales
[8] => _tax_status
[9] => _tax_class
[10] => _manage_stock
[11] => _stock
[12] => _stock_status
[13] => _backorders
[14] => _low_stock_amount
[15] => _sold_individually
[16] => _weight
[17] => _length
[18] => _width
[19] => _height
[20] => _upsell_ids
[21] => _crosssell_ids
[22] => _purchase_note
[23] => _default_attributes
[24] => _product_attributes
[25] => _virtual
[26] => _downloadable
[27] => _download_limit
[28] => _download_expiry
[29] => _featured
[30] => _downloadable_files
[31] => _wc_rating_count
[32] => _wc_average_rating
[33] => _wc_review_count
[34] => _variation_description
[35] => _thumbnail_id
[36] => _file_paths
[37] => _product_image_gallery
[38] => _product_version
[39] => _wp_old_slug
[40] => _edit_last
[41] => _edit_lock
)
[must_exist_meta_keys:protected] => Array
(
[0] => _tax_class
)
[extra_data_saved:protected] =>
[updated_props:protected] => Array
(
)
[meta_type:protected] => post
[object_id_field_for_meta:protected] =>
)
[stores:WC_Data_Store:private] => Array
(
[coupon] => WC_Coupon_Data_Store_CPT
[customer] => WC_Customer_Data_Store
[customer-download] => WC_Customer_Download_Data_Store
[customer-download-log] => WC_Customer_Download_Log_Data_Store
[customer-session] => WC_Customer_Data_Store_Session
[order] => WC_Order_Data_Store_CPT
[order-refund] => WC_Order_Refund_Data_Store_CPT
[order-item] => WC_Order_Item_Data_Store
[order-item-coupon] => WC_Order_Item_Coupon_Data_Store
[order-item-fee] => WC_Order_Item_Fee_Data_Store
[order-item-product] => WC_Order_Item_Product_Data_Store
[order-item-shipping] => WC_Order_Item_Shipping_Data_Store
[order-item-tax] => WC_Order_Item_Tax_Data_Store
[payment-token] => WC_Payment_Token_Data_Store
[product] => WC_Product_Data_Store_CPT
[product-grouped] => WC_Product_Grouped_Data_Store_CPT
[product-variable] => WC_Product_Variable_Data_Store_CPT
[product-variation] => WC_Product_Variation_Data_Store_CPT
[shipping-zone] => WC_Shipping_Zone_Data_Store
[webhook] => WC_Webhook_Data_Store
[order-item-line_item_removed] => WC_Order_Item_Product_Data_Store
[order-item-line_item_switched] => WC_Order_Item_Product_Data_Store
[order-item-coupon_pending_switch] => WC_Order_Item_Coupon_Data_Store
[order-item-fee_pending_switch] => WC_Order_Item_Fee_Data_Store
[subscription] => WCS_Subscription_Data_Store_CPT
[product-variable-subscription] => WCS_Product_Variable_Data_Store_CPT
[product-subscription_variation] => WC_Product_Variation_Data_Store_CPT
[order-item-line_item_pending_switch] => WC_Order_Item_Product_Data_Store
[report-revenue-stats] => Automattic\WooCommerce\Admin\API\Reports\Orders\Stats\DataStore
[report-orders] => Automattic\WooCommerce\Admin\API\Reports\Orders\DataStore
[report-orders-stats] => Automattic\WooCommerce\Admin\API\Reports\Orders\Stats\DataStore
[report-products] => Automattic\WooCommerce\Admin\API\Reports\Products\DataStore
[report-variations] => Automattic\WooCommerce\Admin\API\Reports\Variations\DataStore
[report-products-stats] => Automattic\WooCommerce\Admin\API\Reports\Products\Stats\DataStore
[report-variations-stats] => Automattic\WooCommerce\Admin\API\Reports\Variations\Stats\DataStore
[report-categories] => Automattic\WooCommerce\Admin\API\Reports\Categories\DataStore
[report-taxes] => Automattic\WooCommerce\Admin\API\Reports\Taxes\DataStore
[report-taxes-stats] => Automattic\WooCommerce\Admin\API\Reports\Taxes\Stats\DataStore
[report-coupons] => Automattic\WooCommerce\Admin\API\Reports\Coupons\DataStore
[report-coupons-stats] => Automattic\WooCommerce\Admin\API\Reports\Coupons\Stats\DataStore
[report-downloads] => Automattic\WooCommerce\Admin\API\Reports\Downloads\DataStore
[report-downloads-stats] => Automattic\WooCommerce\Admin\API\Reports\Downloads\Stats\DataStore
[admin-note] => Automattic\WooCommerce\Admin\Notes\DataStore
[report-customers] => Automattic\WooCommerce\Admin\API\Reports\Customers\DataStore
[report-customers-stats] => Automattic\WooCommerce\Admin\API\Reports\Customers\Stats\DataStore
[report-stock-stats] => Automattic\WooCommerce\Admin\API\Reports\Stock\Stats\DataStore
)
[current_class_name:WC_Data_Store:private] => WC_Product_Data_Store_CPT
[object_type:WC_Data_Store:private] => product-simple
)
[meta_data:protected] =>
)
Now I want to get the name, and price from that output. If I use $products->get_name(); then I am getting a error message:
Fatal error: Uncaught Error: Call to a member function get_name() on
array in
So, my question is how can I use the WooCommerce methods to get name, price, etc from that $product variable?

Wordpress pre_get_posts and date_query showing blank screen

I'm trying to implement a filter on wp_query to show annual archives by School Year (sept - may) rather than jan-dec. When I view a yearly archive page, such as sitename.com/2017/, I get a white screen of death, and no PHP errors.
My code in functions.php looks like the following:
add_action( 'pre_get_posts', 'school_year_filter' );
function school_year_filter($query) {
if (! is_admin() && $query->is_main_query() && $query->is_year() && $query->is_archive()) {
$year = get_query_var('year');
$year2 = $year + 1;
$query->set(
'date_query' => array(
array(
'after' => array(
'year' => "$year",
'month' => '9',
'day' => '1',
),
'before' => array(
'year' => "$year2",
'month' => '5',
'day' => '31',
),
'inclusive' => true,
),
),
);
}
}
Try this code.
I changed this line 'date_query'=>array( to 'date_query', array(.
add_action( 'pre_get_posts', 'school_year_filter' );
function school_year_filter($query) {
if (! is_admin() && $query->is_main_query() && $query->is_year() && $query->is_archive()) {
$year = get_query_var('year');
$year2 = $year + 1;
$query->set(
'date_query', array(
array(
'after' => array(
'year' => $year,
'month' => '9',
'day' => '1',
),
'before' => array(
'year' => $year2,
'month' => '5',
'day' => '31',
),
'inclusive' => true,
),
)
);
}
}
https://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts#Only_Display_Search_Results_After_Specific_Date

How to get posts by compare 2 custom fields value?

I have "product" custom post type. It have 2 custom fields: price1, price2 (price of product)
I want to get all posts have price1 < price2 (compare 2 values)
How can i do that?
Here's a nice sample that should help you out:
$args = array(
'tax_query' => array(
'taxonomy' => 'custom_taxonomy_name',
array(
'key' => 'price',
'value' => array( 100, 200 ),
'compare' => 'BETWEEN',
'type' => 'numeric',
),
array(
'key' => 'description',
'value' => 'round',
'compare' => 'NOT LIKE'
)
)
);
$query = new WP_Query($args);

Resources