字段类型的高级自定义字段UPDATE_FIELD:分类

时间:2014-01-05 作者:Q Studio

我需要通过wp\\u insert\\u post插入一篇文章,然后添加相关的post\\u meta-然而,wp管理员已经用优秀的ACF进行了定制。

我知道我可以add_post_meta 以这种方式:

add_post_meta( $post_id, \'q_key_type\', $q_key_type );
然而,为了让ACF高兴,还需要使用“update_field“功能-类似于:

update_field( "field_52c737a413e07", $q_key_type, $post_id );
此方法工作正常,但我无法正确注册分类法对象-我可以使用add\\u post\\u meta获取要保存的值-当我查看新帖子时,它无法识别分类法-值为空,但在Posteta表中正确存储了值-缺少的是正确的字段识别。

我可以使用这两种方法正确保存“Text”和“User”类型的字段。

下面是post\\u meta表中两行的图像-前两行是由acf创建的-后两行是手动创建的-它们的格式似乎相同:

enter image description here

在post\\u meta表中,我只能找到另一个对相同字段名称的引用-它包含一个包含以下数据的数组-这似乎是acf的字段设置:

Array (
    [key] => field_52c737a413e07
    [label] => Type
    [name] => q_key_type
    [type] => taxonomy
    [instructions] => 
    [required] => 0
    [taxonomy] => q_key_type
    [field_type] => select
    [allow_null] => 0
    [load_save_terms] => 1
    [return_format] => object
    [conditional_logic] => Array (
        [status] => 0
        [rules] => Array (
            [0] => Array (
                [field] => null
                [operator] => ==
                [value] => 
            )
        )
        [allorany] => all
    )
[order_no] => 3
)
所以,问题是——ACF还在哪里保存分类法数据——我在术语表中找不到任何东西?

3 个回复
最合适的回答,由SO网友:Q Studio 整理而成

我确实需要添加post\\u meta:

add_post_meta( $insert_q_key_id, \'q_key_type\', (int)$q_key_type ); // Q Key Type
对于ACF:

update_field( "field_52c737a413e07", (int)$q_key_type, $insert_q_key_id ); // Q Key Type
wp\\u set\\u object\\u术语涵盖了答案“应”的其余部分:

wp_set_object_terms( $insert_q_key_id, (int)$q_key_type, \'q_key_type\', true );
然而,在我需要的时候,该函数还没有完全可用,所以答案是为该函数创建一个简单的替换:

     /**
     * simple wp_set_object_terms replacement as not available during API call
     * 
     * @since       0.4
     * @global      Object      $wpdb
     * @param       integer     $object_id
     * @param       integer     $tt_id
     * @return      Mixed       Integer of inserted row on success | Boolean false
     */
    public function q_wp_set_object_terms( $object_id = null, $tt_id = null )
    {

        if ( ! $object_id || ! $tt_id ) { return false; }

        global $wpdb; 

        if ( $wpdb->insert( $wpdb->term_relationships, array( \'object_id\' => (int)$object_id, \'term_taxonomy_id\' => (int)$tt_id ) ) ) {

            return $wpdb->insert_id;

        }

        // if not ##
        return false;

    }
我可以使用静态类实例调用它(在我的例子中,该方法是单独类的一部分…):

Q_Key::q_wp_set_object_terms ( $insert_q_key_id, (int)$q_key_type );

SO网友:boboshady

我发现update_field() 函数实际上为我完成了这项工作,我不知道它是否已经更新,以实现这一点。您需要注意的是,如果您有一个单选(select)字段或一个允许多个选择的字段,那么基本上,如果它是多个,您需要通过一个分类ID数组。

例如:

$field_key = \'field_xxxxxxxxxxxxxx\';   //the field key of your chosen taxonomy field
$idarray = array("$termid->term_id");  //use an array to pass it multiple term IDs. Note that the term_id is in quotes, as it needs to be a string
$postid = \'\';                          //your post ID

update_field($field_key, $idarray, $postid);
Theupdate_field() 函数将根据字段设置自动为您处理序列化,因此您不必担心其他任何事情。

我使用这种方法更新了同一条帖子记录上的单个和多个分类字段,并测试了我可以使用ACF推荐的方法查询这些结果,因此它肯定能正确地输入数据。

编辑:请记住一件事,您会注意到我已将术语\\u id用引号括起来,将其转换为字符串-ACF将id作为字符串存储在序列化数组中,因此这是必要的,否则他们建议的查询此数据的方法将不起作用(将来通过wp admin结束字段时,无论如何都会将其更改回字符串)。

SO网友:bramchi

确保在使用update_field() 作用

示例:

$post_id = "event_4"; // event (custom taxonomy) term ID = 4
update_field( \'my_field\', \'my_value\', $post_id );
伟大的ACF文档在“从不同对象更新值”一节中讨论了这一点:https://www.advancedcustomfields.com/resources/update_field/

ACF处理有关创建和同步自定义字段的所有工作。不需要自己用add_post_meta()

我在这个兔子洞里浪费了几个小时,真的可以用RTFM!每10分钟通知一次。‍♂️

结束

相关推荐

列出分类法:如果分类法没有POST,就不要列出分类法--取决于定制的POST-META?

这可能很难解释,我不知道是否有解决办法!?我有一个名为“wr\\u event”的自定义帖子类型和一个名为“event\\u type”的分层自定义分类法。自定义帖子类型有一个元框,用于event_date 并且与此帖子类型关联的所有帖子都按以下方式排序event_date. 我在循环中有一个特殊的条件来查询event_date 已经发生了-在这种情况下,它没有显示,但只列在我的档案中。就像你可以使用wp_list_categories() 我编写了一个自定义函数,它以完全相同的方式列出所有分类术语。现在

字段类型的高级自定义字段UPDATE_FIELD:分类 - 小码农CODE - 行之有效找到问题解决它

字段类型的高级自定义字段UPDATE_FIELD:分类

时间:2014-01-05 作者:Q Studio

我需要通过wp\\u insert\\u post插入一篇文章,然后添加相关的post\\u meta-然而,wp管理员已经用优秀的ACF进行了定制。

我知道我可以add_post_meta 以这种方式:

add_post_meta( $post_id, \'q_key_type\', $q_key_type );
然而,为了让ACF高兴,还需要使用“update_field“功能-类似于:

update_field( "field_52c737a413e07", $q_key_type, $post_id );
此方法工作正常,但我无法正确注册分类法对象-我可以使用add\\u post\\u meta获取要保存的值-当我查看新帖子时,它无法识别分类法-值为空,但在Posteta表中正确存储了值-缺少的是正确的字段识别。

我可以使用这两种方法正确保存“Text”和“User”类型的字段。

下面是post\\u meta表中两行的图像-前两行是由acf创建的-后两行是手动创建的-它们的格式似乎相同:

enter image description here

在post\\u meta表中,我只能找到另一个对相同字段名称的引用-它包含一个包含以下数据的数组-这似乎是acf的字段设置:

Array (
    [key] => field_52c737a413e07
    [label] => Type
    [name] => q_key_type
    [type] => taxonomy
    [instructions] => 
    [required] => 0
    [taxonomy] => q_key_type
    [field_type] => select
    [allow_null] => 0
    [load_save_terms] => 1
    [return_format] => object
    [conditional_logic] => Array (
        [status] => 0
        [rules] => Array (
            [0] => Array (
                [field] => null
                [operator] => ==
                [value] => 
            )
        )
        [allorany] => all
    )
[order_no] => 3
)
所以,问题是——ACF还在哪里保存分类法数据——我在术语表中找不到任何东西?

3 个回复
最合适的回答,由SO网友:Q Studio 整理而成

我确实需要添加post\\u meta:

add_post_meta( $insert_q_key_id, \'q_key_type\', (int)$q_key_type ); // Q Key Type
对于ACF:

update_field( "field_52c737a413e07", (int)$q_key_type, $insert_q_key_id ); // Q Key Type
wp\\u set\\u object\\u术语涵盖了答案“应”的其余部分:

wp_set_object_terms( $insert_q_key_id, (int)$q_key_type, \'q_key_type\', true );
然而,在我需要的时候,该函数还没有完全可用,所以答案是为该函数创建一个简单的替换:

     /**
     * simple wp_set_object_terms replacement as not available during API call
     * 
     * @since       0.4
     * @global      Object      $wpdb
     * @param       integer     $object_id
     * @param       integer     $tt_id
     * @return      Mixed       Integer of inserted row on success | Boolean false
     */
    public function q_wp_set_object_terms( $object_id = null, $tt_id = null )
    {

        if ( ! $object_id || ! $tt_id ) { return false; }

        global $wpdb; 

        if ( $wpdb->insert( $wpdb->term_relationships, array( \'object_id\' => (int)$object_id, \'term_taxonomy_id\' => (int)$tt_id ) ) ) {

            return $wpdb->insert_id;

        }

        // if not ##
        return false;

    }
我可以使用静态类实例调用它(在我的例子中,该方法是单独类的一部分…):

Q_Key::q_wp_set_object_terms ( $insert_q_key_id, (int)$q_key_type );

SO网友:boboshady

我发现update_field() 函数实际上为我完成了这项工作,我不知道它是否已经更新,以实现这一点。您需要注意的是,如果您有一个单选(select)字段或一个允许多个选择的字段,那么基本上,如果它是多个,您需要通过一个分类ID数组。

例如:

$field_key = \'field_xxxxxxxxxxxxxx\';   //the field key of your chosen taxonomy field
$idarray = array("$termid->term_id");  //use an array to pass it multiple term IDs. Note that the term_id is in quotes, as it needs to be a string
$postid = \'\';                          //your post ID

update_field($field_key, $idarray, $postid);
Theupdate_field() 函数将根据字段设置自动为您处理序列化,因此您不必担心其他任何事情。

我使用这种方法更新了同一条帖子记录上的单个和多个分类字段,并测试了我可以使用ACF推荐的方法查询这些结果,因此它肯定能正确地输入数据。

编辑:请记住一件事,您会注意到我已将术语\\u id用引号括起来,将其转换为字符串-ACF将id作为字符串存储在序列化数组中,因此这是必要的,否则他们建议的查询此数据的方法将不起作用(将来通过wp admin结束字段时,无论如何都会将其更改回字符串)。

SO网友:bramchi

确保在使用update_field() 作用

示例:

$post_id = "event_4"; // event (custom taxonomy) term ID = 4
update_field( \'my_field\', \'my_value\', $post_id );
伟大的ACF文档在“从不同对象更新值”一节中讨论了这一点:https://www.advancedcustomfields.com/resources/update_field/

ACF处理有关创建和同步自定义字段的所有工作。不需要自己用add_post_meta()

我在这个兔子洞里浪费了几个小时,真的可以用RTFM!每10分钟通知一次。‍♂️

相关推荐

列出分类法:如果分类法没有POST,就不要列出分类法--取决于定制的POST-META?

这可能很难解释,我不知道是否有解决办法!?我有一个名为“wr\\u event”的自定义帖子类型和一个名为“event\\u type”的分层自定义分类法。自定义帖子类型有一个元框,用于event_date 并且与此帖子类型关联的所有帖子都按以下方式排序event_date. 我在循环中有一个特殊的条件来查询event_date 已经发生了-在这种情况下,它没有显示,但只列在我的档案中。就像你可以使用wp_list_categories() 我编写了一个自定义函数,它以完全相同的方式列出所有分类术语。现在