it-swarm.com.de

So erhalten Sie alle benutzerdefinierten Felder eines beliebigen Beitragstyps

Ich habe mehrere Beitragstypen. Ich möchte alle benutzerdefinierten Felder erhalten, die diesem Beitragstyp zugeordnet sind.

Beispiel:

Post
-- image
-- Featured image
-- body

Ich muss alle Felder oder benutzerdefinierten Felder im Array abrufen. Ich habe eine Lösung gefunden von hier , aber sie erfüllt nicht meinen Zweck:

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

Fügen Sie den folgenden Code in die functions.php ein

für 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;
  }

Dadurch erhalten Sie den Array-Wert des Post-Meta-Schlüssels für acf.

Wie benutzt man

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

Für Schoten

function pods () {global $ wpdb; // Hole die ID des Pods-Beitragstyps.

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

Wie benutzt man

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

mit den Funktionen acf () und pods () erhalten Sie den genauen Metaschlüssel für diesen Beitragstyp. Wenn Sie den Code kopieren und einfügen, funktioniert er möglicherweise nicht.

Hoffe diese Antwort hilft dir und auch anderen.

lassen Sie mich wissen, dass Sie nichts stören.

1
Faysal Mahamud

Beitragstyp-Funktionen

Es gibt verschiedene Möglichkeiten, um eine Liste von "Features" zu erhalten, die ein bestimmter Beitragstyp unterstützt. Am einfachsten ist es, einfach die Funktion get_all_post_type_supports() zu verwenden:

$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
 * )
 */

Sie können auch post_type_supports() verwenden, um festzustellen, ob ein Beitragstyp bestimmte Funktionen unterstützt.

Eine andere Möglichkeit, die Eigenschaften eines Beitragstyps zu überprüfen, um sein Beitragstypobjekt zu erhalten, und einfach die Eigenschaft $supports zu überprüfen:

$post_type_object = get_post_type_object( 'post' );

print_r( $post_type_object->supports );

Benutzerdefinierte Felder

Da es sich bei benutzerdefinierten Feldern um Post-Metadaten handelt, die postweise und nicht postweise verknüpft sind, gibt es keine direkte Möglichkeit, eine Liste der benutzerdefinierten Feldnamen abzurufen, die von einem bestimmten Post verwendet werden Art.

Stattdessen müssten Sie ein Array selbst kompilieren, indem Sie jeden Beitrag des betreffenden Beitragstyps durchlaufen und mit get_metadata( $post_id ) oder get_post_custom_keys( $post_id ) jedes für diesen Beitrag gespeicherte benutzerdefinierte Feld abrufen. Dies ist möglicherweise einesehrteure Operation und sollte so selten wie möglich durchgeführt werden. Wenn Sie dies in Erwägung ziehen, mehr als einmal pro Woche oder Monat zu tun, würde ich dies wärmstens empfehlen Sie suchen nach anderen Mitteln, um Ihr Endziel zu erreichen.

Eine benutzerdefinierte SQL-Abfrage zur Ermittlung dieser Informationen ist ebenfalls möglich und wäre zweifellos wesentlich leistungsfähiger als die Abfrage von Metadaten für jeden Beitrag eines Beitragstyps.

3
bosco