私はいくつかの投稿タイプがあります。その投稿タイプに関連付けられているすべてのカスタムフィールドを取得したいです。
例:
Post
-- image
-- Featured image
-- body
すべてのフィールドまたはカスタムフィールドを配列で取得する必要があります。私は解決策を見つけました ここから 、しかしそれは私の目的を達成するものではありません:
echo '<pre>';
print_r(get_post_custom($post_id));
echo '</pre>';
Functions.phpに次のコードを追加してください。
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;
}
これにより、acfのpostメタキーの配列値がわかります。
使い方
foreach(acf() as $key => $value){
update_post_meta(76, $value['type'], 'Steve');
}
ポッド用
function pods(){global $ wpdb; //ポッドの投稿タイプIDを取得します。
$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);
使い方
foreach($fields as $key => $value){
update_post_meta(76, $value, 'Steve');
}
関数acf()とpods()はあなたにその投稿タイプの正確なメタキーを与えます。コードをコピーして貼り付けるとうまくいかないことがあります。
この答えがあなたにも他の人にも役立つことを願います。
何も問題がないことをお知らせください。
"features" /特定の投稿タイプがサポートする/のリストを取得するためのいくつかのオプションがあります。最も簡単な方法は、単純に 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
* )
*/
投稿タイプが特定の機能をサポートしているかどうかを確認するために post_type_supports()
を使用することもできます。
投稿タイプの機能をチェックして、投稿タイプオブジェクトを取得して$supports
プロパティをチェックする別の方法です。
$post_type_object = get_post_type_object( 'post' );
print_r( $post_type_object->supports );
カスタムフィールド are 投稿メタデータ 投稿タイプではなく投稿ごとに関連付けられているため、特定の投稿で使用されているカスタムフィールド名のリストを取得する直接的な方法はありません。タイプ。
そうではなく、問題の投稿タイプのすべての投稿をループ処理し、その投稿用に格納されたすべてのカスタムフィールドを取得するためにget_metadata( $post_id )
またはget_post_custom_keys( $post_id )
を使用して、配列を自分でコンパイルする必要があります。これは潜在的にvery高価な操作であり、できるだけ少ない頻度で実行する必要があります - これが毎週または月に2回以上実行することを検討しているものである場合、あなたはあなたの最終目標を達成するための他の方法を調べます。
この情報を決定するためのカスタムSQLクエリも可能であり、投稿タイプのすべての投稿についてメタデータをクエリするよりもはるかにパフォーマンスが高いことは間違いありません。