Valores predeterminados para publicaciones existentes

4 minutos de lectura

Creé una nueva área en un sitio usando Campos personalizados avanzados. El área se muestra en las publicaciones nuevas y las publicaciones modificadas, pero no en las publicaciones antiguas. ¿Qué se puede hacer para mostrarlo en todas las publicaciones con el mínimo esfuerzo?

en un publicación de 2013 Vi que no había solución para eso en ese entonces.

<div id="advert">
    <a href="https://stackoverflow.com/questions/40493675/<?php echo get_field("add_ad_link' ); ?>">
        <img src="https://stackoverflow.com/questions/40493675/<?php echo get_field("ad_image' ); ?>">
    </a>
</div>

avatar de usuario
Jordi Nebot

Podría usar la idea de la respuesta de Benoti y pegar este fragmento en su functions.php. El enfoque para su caso sería:

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);
        }
    }
}

Su add_ad_image el campo debe establecerse como URL de la imagen para mantener esto simple.

Tenga en cuenta que este código se ejecutará cada vez que ingrese a su área de administración, por lo que sería una buena idea eliminarlo después de la primera vez (ya que todas las publicaciones ahora tendrán un valor para esos campos).

  • Tenga en cuenta que hay un error tipográfico en la solución. Debería ser “ad_image” en la condición del segundo caso.

    – caos

    30 oct 2020 a las 19:07

No uso ACF, pero puede hacerlo en un bucle a través de todas las publicaciones y aplicar el campo personalizado si no existe, con las funciones de WordPress get_post_meta y update_post_meta.

Un ejemplo muy simple, para pegar en functions.php:

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);
  }
}

Cambie $args como desee, es decir: 'post_status'=> array('publish', 'pending', 'draft').

  • Gracias por esta útil solución; Solo lo usé para establecer un valor predeterminado en un nuevo campo booleano para más de 1500 publicaciones existentes. Pregunta rápida: ¿cuál es el propósito de la get_option() comprobar con update_option? para asegurar la apply_my_custom_field() ¿La función solo se ejecuta una vez? ¡Gracias!

    – melindroso

    8 oct 2020 a las 22:01

avatar de usuario
Edwin Snotje

Tal vez podría usar el valor predeterminado de su acf para publicaciones que aún no tienen un valor para el campo.

Puede obtener el valor predeterminado de un ACF si conoce la clave de campo de esta manera:

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

Para obtener la clave acf, debe consultar la base de datos. Recibí mi consulta desde aquí: ¿Cómo obtener la clave de campo de Campos personalizados avanzados de la base de datos de WordPress?

Entonces, si solo tiene el nombre del campo, su código para obtener el valor predeterminado sería:

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'];

Tenga en cuenta que la clave acf puede cambiar en un entorno diferente.

Para cualquiera que se encuentre con esto, la mejor solución que encontré fue esta herramienta: https://github.com/mcguffin/acf-quick-edit-fields

Esto me ahorró una hora o dos de actualizar manualmente 181 publicaciones. Después de instalar ese complemento, edité el campo ACF y marqué la opción “Permitir editar este campo en modo de edición masiva”, luego pude editar masivamente las publicaciones y actualizar el campo.

Puede hacerlo mediante edición masiva y luego guardar/actualizar.

Vaya al administrador de su sitio. Luego seleccione “Todas las publicaciones” de “publicaciones” en el menú de administración. Luego marcó la casilla de verificación “Título” debajo de la casilla “Acciones masivas”. Ahora ha seleccionado todas las publicaciones dentro de esa página (1-20). A continuación, seleccione “editar” en el cuadro “Acciones masivas”. Luego haga clic en “Aplicar”. Luego haga clic en “Actualizar” (Está en la esquina inferior derecha). Repita para todas las publicaciones antiguas. Eso es todo. Luego, el área se mostrará en las publicaciones antiguas.

Por favor hagamelo saber.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad