在保存时使用wp_UPDATE_TERM时,如何保留对术语名称或段的编辑?

时间:2016-09-16 作者:Florian

我正在尝试将内容插入学期的description 保存时字段。

// insert stuff into description field of taxonomy
function insert_taxonomy_content( $term_id, $tt_id, $taxonomy ){
    // only insert content on certain taxonomies
    if ( $taxonomy === \'some_custom_taxonomy\' ){

         // unhook this function so it doesn\'t loop infinitely
         remove_action(\'edit_term\', \'insert_taxonomy_content\');

         $content = "Some Content";
         $update_args = array(
             \'description\' => $content,
         );

         // update the post, which calls save_post again
         wp_update_term( $term_id, $taxonomy, $update_args );

         // re-hook this function
         add_action(\'edit_term\', \'insert_taxonomy_content\');
     }
 }
add_action(\'edit_term\', \'insert_taxonomy_content\', 10, 3);
添加内容很有效,但现在我不能再更改现有术语的标题了。我也不能添加新术语。

我认为这为我指明了正确的方向:https://wordpress.stackexchange.com/a/183852/10595

传入的数组与数据库中已有的数据合并。

那么,我如何才能捕获新的标题和/或输入到名称/段塞字段中的段塞,并将其传递给wp_update_term?

我还根据cjbj\'s suggestion:

// insert stuff into description field of taxonomy
function insert_taxonomy_content( $term_id, $taxonomy ){
    // only insert content on certain taxonomies
    if ( $taxonomy === \'some_custom_taxonomy\' ){

         // unhook this function so it doesn\'t loop infinitely
         remove_action(\'edit_terms\', \'insert_taxonomy_content\');

         $content = "Some Content";
         $update_args = array(
             \'description\' => $content,
         );

         // update the post, which calls save_post again
         wp_update_term( $term_id, $taxonomy, $update_args );

         // re-hook this function
         add_action(\'edit_terms\', \'insert_taxonomy_content\');
     }
 }
add_action(\'edit_terms\', \'insert_taxonomy_content\', 10, 2);
这让我可以再次编辑标题和片段,但现在description 不会更新。

2 个回复
最合适的回答,由SO网友:Florian 整理而成

所以,多亏了cjbj,我终于找到了正确的答案!我需要使用edited_term 而不是edit_term. 非常细微的差别。edited_term 保存术语后激发。

// insert stuff into description field of taxonomy
function insert_taxonomy_content( $term_id, $tt_id, $taxonomy ){
    // only insert content on certain taxonomies
    if ( $taxonomy === \'some_custom_taxonomy\' ){

         // unhook this function so it doesn\'t loop infinitely
         remove_action(\'edited_term\', \'insert_taxonomy_content\');

         $content = "Some Content";
         $update_args = array(
             \'description\' => $content,
         );

         // update the post, which calls save_post again
         wp_update_term( $term_id, $taxonomy, $update_args );

         // re-hook this function
         add_action(\'edited_term\', \'insert_taxonomy_content\');
     }
 }
add_action(\'edited_term\', \'insert_taxonomy_content\', 10, 3);

SO网友:cjbj

这个edit_term 钩火“after 一个术语已经更新,但在术语缓存被清理之前”。因此,每次更新一个术语时,都会启动一个函数,再次更新该术语,但只更新其描述。我还没有对此进行测试,但我可以想象,在此过程中,WP在某个地方放松了第一次更新,并认为第二次更新是唯一重要的更新。

无论如何,我建议你试试edit_terms 钩子,它会开火before 该术语正在更新。这样,您的更新不会中断常规的更新过程。

UPDATE

这可能有点像猜谜游戏,但还有几个钩子wp_update_term 您可以尝试:edited_terms, edit_term_taxonomyedited_term_taxonomy.

然而,关键仍然是你在打电话wp_update_term 一半在里面wp_update_term. 该函数处理全局变量$wpdb. 所以数据库首先由外部调用的第一部分更改,然后由内部调用(您的函数)更改,然后再由外部调用的第二部分更改。

也许更好的做法是放弃wp_update_terms 在您的功能中。相反,您可以尝试使用$wpdb->update, 因此,在钩子函数中不会发生其他对数据库的操作。我无法对此进行测试,但正在跟踪wp_update_terms 处理描述,如下所示:

$description = "Some Content";
$wpdb->update( $wpdb->term_taxonomy, compact( \'description\' ));

相关推荐

我在相关产品“TAX_QUERY”‘TERMS’值方面遇到问题

我有两种自定义页面类型。第一个是;“产品”;第二个是;附件;。在产品页面上,有“附件”类别;“输入”;罗列立柱。输入对值进行编码,如;06010603等;。这些代码也是产品代码。当我用metabox输入产品代码时,功能会在某些区域启动。如产品表、产品图片等。如何在术语部分打印此代码。提前感谢你们的帮助。工作代码;<?php $article_list = get_post_meta ( get_the_ID(), \'products_article_list\', t