web-dev-qa-db-fra.com

Comment obtenir tous les champs personnalisés de tout type de message

J'ai plusieurs types de post. Je souhaite obtenir tous les champs personnalisés associés à ce type de publication.

Exemple:

Post
-- image
-- Featured image
-- body

Je dois obtenir tous les champs ou les champs personnalisés dans un tableau. J'ai trouvé une solution à partir d'ici , mais cela ne sert pas mon but:

    echo '<pre>';
    print_r(get_post_custom($post_id));
    echo '</pre>';
4
user115277

Ajoutez le code suivant dans le functions.php

pour acf

function get_all_meta($type){
              global $wpdb;
              $result = $wpdb->get_results($wpdb->prepare(
                  "SELECT post_id,meta_key,meta_value FROM wp_posts,wp_postmeta WHERE post_type = %s
                    AND wp_posts.ID = wp_postmeta.post_id", $type
              ), ARRAY_A);
               return $result;
          }

function acf(){
    $options = array();
    $acf = get_all_meta('acf');
    foreach($acf as $key => $value){
      $options['post_type'][$value['post_id']]['post_id'] = $value['post_id'];
      $test = substr($value['meta_key'], 0, 6);
      if($test === 'field_'){
        $post_types = maybe_unserialize( $value['meta_value'] );
        $options['post_type'][$value['post_id']]['key'][] = $post_types['key'];
        $options['post_type'][$value['post_id']]['key'][] = $post_types['name'];
        $options['post_type'][$value['post_id']]['key'][] = $post_types['type'];
      }
      if($value['meta_key'] == 'rule'){
        $post_types = maybe_unserialize( $value['meta_value'] );

        $options['post_type'][$value['post_id']]['post_types'] = $post_types['value'];
      }
    }
    return $options;
  }

Cela vous donnera la valeur de tableau de post meta key pour acf.

Comment utiliser

foreach(acf() as $key => $value){
update_post_meta(76, $value['type'], 'Steve');
}

Pour les dosettes

fonctions pods () {global $ wpdb; // récupère l'id des types de post des pods.

    $result = $wpdb->get_results($wpdb->prepare(
      "SELECT ID,post_title,post_parent FROM wp_posts WHERE post_type = %s", $type
    ), ARRAY_A);

// pods each field for a post type create separate post type so again query to get the field post type result.
    $pods_field_post_type = array();    
    foreach($result as $value){
    $pods_field_post_type = $wpdb->get_results($wpdb->prepare(
    "SELECT ID,post_title,post_name FROM wp_posts WHERE post_type = %s
    AND post_parent = %d
    ", '_pods_field',$value["ID"]
    ), ARRAY_A);

    }
$fields = array();
   foreach($pods_field_post_type as key => $value):
     $podsAPI = new PodsAPI();
     $pod = $podsAPI->load_pod( array( 'name' => '
  post' ));
     $fields[] = $pod['fields'][$value['post_name']]['type'];
  endforeach;
  }
print_r($fields);

Comment utiliser

foreach($fields as $key => $value){
update_post_meta(76, $value, 'Steve');
}

fonction acf () et pods () vous donnent la clé méta exacte de ce type de message. Si vous copiez et collez le code, il risque de ne pas fonctionner.

J'espère que cette réponse vous aidera et aidera également les autres.

laissez-moi savoir que vous ne dérangez rien.

1
Faysal Mahamud

Post Type Caractéristiques

Plusieurs options existent pour obtenir une liste de "fonctionnalités" prises en charge par un type de message particulier. Le plus simple est d’utiliser simplement la fonction get_all_post_type_supports() :

$post_type_features = get_all_post_type_supports( 'post' );

print_r( $post_type_features );
/* Array
 * (
 *   [0] => author
 *   [1] => editor
 *   [2] => thumbnail
 *   [3] => excerpt
 *   [4] => trackbacks
 *   [5] => custom-fields
 *   [6] => comments
 *   [7] => revisions
 *   [8] => post-formats
 *   [9] => title
 * )
 */

Vous pouvez également utiliser post_type_supports() pour voir si un type de publication prend en charge des fonctionnalités spécifiques.

Une autre façon de vérifier les caractéristiques d'un type de publication consiste à obtenir son objet de type publication et à simplement vérifier la propriété $supports:

$post_type_object = get_post_type_object( 'post' );

print_r( $post_type_object->supports );

Les champs personnalisés

Etant donné que les champs personnalisés sont les méta-données postales associées post-par-post plutôt que post-type, il n’existe aucun moyen direct d’extraire une liste de noms de champs personnalisés utilisés par un poste particulier. type.

Au lieu de cela, vous devrez compiler vous-même un tableau en parcourant chaque publication du type de publication en question et en utilisant get_metadata( $post_id ) ou get_post_custom_keys( $post_id ) pour récupérer tous les champs personnalisés stockés pour cette publication. C’est potentiellement une opération onéreusetrèsqui devrait être effectuée le moins souvent possible - si vous envisagez de le faire plus d’une fois par semaine ou par mois, je recommanderais vivement cette option. vous recherchez d'autres moyens d'atteindre votre objectif final.

Une requête SQL personnalisée permettant de déterminer ces informations est également possible et serait sans doute beaucoup plus performante que la requête de métadonnées pour chaque publication d'un type de publication.

3
bosco