WooCommerce-在删除类别之前从类别中获取产品

时间:2017-09-12 作者:l_nxy

我在用这个钩子--
add_action( \'delete_term_taxonomy\', array( $this, \'before_product_category_deleted\' ) );
--在删除产品类别之前执行某些操作。

在该函数中,我尝试使用以下代码在删除之前获取该类别中的所有产品:

$args = array(
    \'fields\' => \'ids\',
    \'posts_per_page\' => -1,
    \'post_type\' => \'product\',
    \'tax_query\' => array(
        array(
            \'terms\' => $category_ids,
            \'taxonomy\' => \'product_cat\',
            \'operator\' => \'IN\',
        ),
    ),
);

$results = new WP_Query( $args );
不幸的是,我什么都没有得到。似乎到delete_term_taxonomy action fires,该类别已从相关产品中删除。

如何在删除类别之前获取该类别中的产品?

1 个回复
SO网友:db306

钩子delete_term_taxonomy 在删除类别之前激发。如果查看原始代码:

/**
 * Fires immediately before a term taxonomy ID is deleted.
 *
 * @since 2.9.0
 *
 * @param int $tt_id Term taxonomy ID.
 */
do_action( \'delete_term_taxonomy\', $tt_id );
$wpdb->delete( $wpdb->term_taxonomy, array( \'term_taxonomy_id\' => $tt_id ) );

/**
 * Fires immediately after a term taxonomy ID is deleted.
 *
 * @since 2.9.0
 *
 * @param int $tt_id Term taxonomy ID.
 */
do_action( \'deleted_term_taxonomy\', $tt_id );
您正在使用正确的挂钩达到预期目的。您的查询有问题,或者根本没有触发挂钩。你得到的答案是Array(0) ?

您应该首先尝试查看在删除类别时是否能够触发挂钩。我使用日志功能测试挂钩和其他难以跟踪的功能,如cron或表单提交等。这有助于确保发生某些事情,并记录一些事件和输出。

You have a useful tutorial here on how to achieve this

如果您使用该触发器成功地将任何内容登录到日志文件中,则意味着您应该检查查询。这意味着钩子被触发了。

然而,看看您的代码,我可以看到您正在为此使用一个类。这让我相信问题来自于类的实例化,您何时调用这个类?钩子“add\\u action”函数是否放置在构造函数中?

为了避免OOP插件中的挂钩出现问题,我建议使用Devin Vinson\'s loader 这让我省去了很多麻烦,使用这种加载类有助于在一开始就注册挂钩,并在一个地方处理挂钩。

但是,如果您确实找到了钩子工作的证据,那么您应该签出查询。

$category_ids 数组,如$category_ids = array(\'1\', \'2\', \'3\'); ?

您是否尝试过在钩子之外的其他地方运行该查询?您可以尝试在其他安全的地方运行该查询,并确保得到预期的结果。

结束