更新帖子元时如何触发以保存帖子

时间:2017-10-14 作者:Anna Gabrielyan

我的处境很混乱。我已经添加了从一个网站数据库到另一个网站的帖子和所有帖子元,一切都很好,有图片、标题、帖子描述。

但是post Meta没有显示在网页(img1)上,虽然当我在wp admin(img2)中转到post edit页面时,它们是存在的,但我可以看到post数据,但直到我单击\'Update\' 扣上我自己的钮扣。

之后,将显示所有post数据。(img3、img4)

帖子太多了(大约4000个菜谱),所以我不能手动完成,这需要很长时间。

所以我需要一些东西来触发每个帖子的自动更新。

我已经尝试更新帖子元,但它不起作用,它仍然需要手动更新帖子。

$metas = get_post_meta(get_the_ID());
foreach($metas as $meta_key => $meta_value){
  foreach( $meta_value as $val ){
    update_post_meta( get_the_ID(), $meta_key, $val);
  }
}  
有没有办法做到这一点?

IMG1img1

IMG2img2

img3零六

IMG4img4

1 个回复
SO网友:janh

我用它成功地插入了带有ACF/Posteta数据的帖子,但请在部署live之前在开发站点上测试它,可能会有一些可怕的假设。通常,它假设每个名称只有一次,即“myfield”不存在于两个含义不同的字段组中。

$mycustomvalue = 123;
$f_mycustomfield = get_acf_key_by_name("mycustomfield");
update_post_meta( $postid, "mycustomfield", $mycustomvalue );
update_post_meta( $postid, "_mycustomfield", $f_mycustomfield["key"] );


function load_acf_names2key() {
    global $acf_names2key;
    $acf_names2key = array();
    $posts = get_posts(array(
        \'numberposts\'   => -1,
        \'post_type\'     => \'acf\',
        \'orderby\'       => \'menu_order title\',
        \'order\'         => \'asc\',
        \'suppress_filters\' => false,
    ));
    foreach($posts as $fieldgroup) {
        $fields = get_post_meta( $fieldgroup->ID );
        foreach($fields as $fieldkey => $fieldmeta) {
            if(substr($fieldkey, 0, 6) == "field_") {
                $field = get_post_meta( $fieldgroup->ID, $fieldkey);
                foreach($field as $subfield) {
                    if(!array_key_exists($subfield["name"], $acf_names2key)) $acf_names2key[ $subfield["name"] ] = array();
                    $subfield[ "group" ] = $fieldgroup->post_name;
                    array_push( $acf_names2key[ $subfield["name"] ], $subfield );
                }
            }
        }
    }
}

function get_acf_key_by_name($name, $options = array()) {
    global $acf_names2key;
    if(!$acf_names2key || !is_array($acf_names2key) || count($acf_names2key) == 0) {
        load_acf_names2key();
    }
    if(!array_key_exists($name, $acf_names2key))
        return false;
    foreach($acf_names2key[ $name ] as $possible) {
        foreach($options as $key => $val) {
            if(preg_match("!^/.*/i?$!", $val)) {
                if(!preg_match($val, $possible[ $key ])) {
                    continue 2;
                }
            }
            else if($possible[ $key ] != $val) {
                continue 2;
            }
        }
        # no options? this will return the first one
        # has options? will return the first item that
        #     satisfies all options
        return $possible;
    }
    return false;
}
我写这篇文章已经有很长一段时间了,但我记忆犹新,我到底想用那些可以传递给的$选项做什么get_acf_key_by_name (或者如果我只是从某处复制粘贴的代码),但它总是对我有用。我还没有尝试使用转发器字段,所以这可能是一个挑战,但请尝试一下。

结束

相关推荐

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

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