是否有计划地执行此操作?这意味着通过本地主机上的PHP脚本,导出,然后再导入,或者其他任何可行的方式。
我想说的是:
桌子wp_terms
是我发现exclude-from-catalog
term_id
我在后端测试了一个产品页面,然后在MySQL/PHPMyAdmin中进行了此查询
SELECT *
FROM wp_posts p
INNER JOIN wp_postmeta pm ON ( pm.post_id = p.ID AND pm.meta_key=\'_visibility\' )
INNER JOIN wp_term_relationships tr ON (p.ID = tr.object_id)
INNER JOIN wp_term_taxonomy tt ON (tr.term_taxonomy_id = tt.term_taxonomy_id)
INNER JOIN wp_terms t ON (t.term_id = tt.term_id)
WHERE p.post_type = \'product\'
and t.term_id = 7;
我可以通过一大堆列看到我设置的产品。
这个
post_id
/
object_id
两者都引用了我手动设置为从目录中排除的产品页面ID。
我的问题是,如果我做这样的查询
SELECT *
FROM wp_posts p
INNER JOIN wp_postmeta pm ON ( pm.post_id = p.ID AND pm.meta_key=\'_visibility\' )
INNER JOIN wp_term_relationships tr ON (p.ID = tr.object_id)
INNER JOIN wp_term_taxonomy tt ON (tr.term_taxonomy_id = tt.term_taxonomy_id)
INNER JOIN wp_terms t ON (t.term_id = tt.term_id)
WHERE p.post_type = \'product\'
and post_status = \'draft\';
它将返回每个页面上每个实例的所有post meta。。。该查询几乎返回400000个结果。
看看怎么做wp_terms
显然与wp_term_relationships
和wp_term_taxonomy
我认为这不是一项简单的任务。
此外,它似乎只是一个新的meta_id
以及taxonomy
product_visibility
仅当您在后端指定某些内容时(例如featured
, outofstock
, 或exclude-from-catalog
).
这是一项不可能完成的任务吗?WordPress/WooCommerce术语是否结构化,因此我无法执行此操作,必须手动设置product_visibility
对于我在wp admin中起草的每个产品?
最合适的回答,由SO网友:hwl 整理而成
调查wp_set_object_terms()
您可以采取以下措施:wp_set_object_terms( $post_id, \'exclude-from-catalog\', \'product_visibility\' );
按状态获取所有帖子,使用Wp_Query. 我添加了\'fields\' => \'ids\'
param将查询仅限于ID,而不是收集整个post对象。
在一系列状态为“Draft”或“Pending”或“auto Draft”的帖子上
function catalog_exclude_drafts() {
$args = array(
\'post_type\' => \'product\',
\'post_status\' => array( \'pending\', \'draft\', \'auto-draft\' ),
\'posts_per_page\' => -1,
\'fields\' => \'ids\'
);
$drafts = new WP_Query( $args );
$ids = $drafts->posts;
$map = array_map( \'wrapper_for_set_obj\', $ids );
}
function wrapper_for_set_obj( $post_id ) {
wp_set_object_terms( $post_id, \'exclude-from-catalog\', \'product_visibility\' );
}
你可以
hook the above (或某些完善的变体)on
init
在本地主机或其他设备上运行一次。为了将来证明你的草稿,把它挂上
save_post
. 事实上,你可以把它挂上
save_post_products
自WP 3.7引入以来
save_post{post_type}
.
一次性更新:add_action( \'init\', \'catalog_exclude_drafts\' );
展望未来:add_action( \'save_post_products\', \'wrapper_for_set_obj\' );