在WooCommerce中将所有草稿设置为“从目录中排除”

时间:2017-07-08 作者:bbruman

是否有计划地执行此操作?这意味着通过本地主机上的PHP脚本,导出,然后再导入,或者其他任何可行的方式。

我想说的是:

桌子wp_terms 是我发现exclude-from-catalog term_id

enter image description here

我在后端测试了一个产品页面,然后在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;
我可以通过一大堆列看到我设置的产品。

enter image description here

这个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_relationshipswp_term_taxonomy 我认为这不是一项简单的任务。

此外,它似乎只是一个新的meta_id 以及taxonomy product_visibility 仅当您在后端指定某些内容时(例如featured, outofstock, 或exclude-from-catalog).

这是一项不可能完成的任务吗?WordPress/WooCommerce术语是否结构化,因此我无法执行此操作,必须手动设置product_visibility 对于我在wp admin中起草的每个产品?

1 个回复
最合适的回答,由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 (或某些完善的变体)oninit 在本地主机或其他设备上运行一次。为了将来证明你的草稿,把它挂上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\' );

结束

相关推荐

重新编码类别-template.php以转到自定义URL

感谢所有人的支持–热爱这些论坛!问题是:–与普通页面相比,自动创建的类别和标记页面无法完全自定义解决方案是将类别/标记页面重定向到包含完整内容的内置页面–示例:https://www.checkhookfighting.com/category/brazilian-jiu-jitsu/ 重定向到https://www.checkhookfighting.com/techniques/brazilian-jiu-jitsu/问题:有没有办法将标签硬编码到wordpress模板中的页面WP分类法的一些初步研究