现有帖子的默认值



我使用高级自定义字段在网站上创建了一个新区域。该区域显示在新帖子和修改后的帖子上,但不显示在旧帖子上。可以做些什么以最小的努力在所有帖子上显示它?

在2013年的一篇帖子中,我看到当时没有解决方案。

<div id="advert">
    <a href="<?php echo get_field( 'add_ad_link' ); ?>">
        <img src="<?php echo get_field( 'ad_image' ); ?>">
    </a>
</div>

您可以使用Benoti答案中的想法,并将此片段粘贴到functions.php中。您的案例的方法是:

add_action('admin_init', 'set_default_acf_values');
function set_default_acf_values() {
    $args = [
        'post_type'      => 'post',
        'posts_per_page' => -1,
    ];
    $posts = get_posts($args);
    foreach($posts as $post) {
        if (empty(get_field('add_ad_link', $post->ID))) {
             update_field('add_ad_link', DEFAULT_AD_LINK, $post->ID);
        }
        if (empty(get_field('ad_image', $post->ID))) {
             update_field('ad_image', DEFAULT_AD_IMAGE, $post->ID);
        }
    }
}

您的add_ad_image字段应设置为图像URL以保持简单。

请注意,每次您进入管理区域时,都会执行此代码,因此在第一次进入后,最好将其删除(因为所有帖子现在都有这些字段的值(。

我不使用ACF,但您可以通过WordPress函数get_post_metaupdate_post_meta在所有帖子中循环使用,并应用自定义字段(如果不存在(。

粘贴函数的一个非常简单的示例。hp:

add_action('admin_init', 'apply_my_custom_field');
function apply_my_custom_field(){
   if(!get_option('se_40493675')){ 
       $args = array(
              'post_type'=> 'post',
              'posts_per_page' => -1,
              'post_status'=> 'publish'
       );
       $posts = get_posts($args);
       foreach($posts as $post){
           if(!get_post_meta($post->ID, 'your_custom_field_name')){
              update_post_meta($post->ID, 'your_custom_field_name', 'your_custom_field_value');
           }
       }
       update_option('se_40493675', 1);
  }
}

随意更改$args,例如:'post_status'=> array('publish', 'pending', 'draft')

对于还没有字段值的帖子,也许可以使用acf的默认值。

如果您知道以下字段密钥,则可以获得ACF的默认值:

$field = get_field_object('Your_acf_field_key'));
$default_value = $field['default_value'];

要获得acf密钥,您必须查询数据库。我从这里得到了我的查询:如何从WordPress数据库中获得高级自定义字段字段密钥?

因此,如果您只有字段名,那么获得默认值的代码将是:

function get_acf_key($field_name) {
    global $wpdb;
    return $wpdb->get_var("
        SELECT `meta_key`
        FROM $wpdb->postmeta
        WHERE `meta_key` LIKE 'field_%' AND `meta_value` LIKE '%$field_name%';
        ");
}
$field = get_field_object(get_acf_key('Your_acf_name'));
$default_value = $field['default_value'];

请注意,acf密钥可能在不同的环境中发生更改。

对于任何遇到这种情况的人来说,我发现的最好的解决方案是这个工具:https://github.com/mcguffin/acf-quick-edit-fields

这为我手动更新181篇帖子节省了一两个小时。安装该插件后,我编辑了ACF字段,并选中了"允许在批量编辑模式下编辑此字段"选项,然后我就可以批量编辑帖子并更新字段。

您可以通过批量编辑然后保存/更新来完成。

转到您的网站管理员。然后从管理菜单中的"帖子"中选择"所有帖子"。然后选中"批量操作"框下方的"标题"复选框。现在您已经选择了该页面中的所有帖子(1-20(。然后从"批量操作"框中选择"编辑"。然后单击"应用"。然后点击"更新"(它在右下角(。对所有旧帖子重复此操作。仅此而已。然后该区域将显示在旧帖子上。

请告诉我。

相关内容

  • 没有找到相关文章

最新更新