如何获取任何帖子类型的所有自定义域

时间:2017-03-17 作者:user115277

我有几种帖子类型。我想获取与该帖子类型关联的所有自定义字段。

示例:

Post
-- image
-- Featured image
-- body
我需要获取数组中的所有字段或自定义字段。我找到了解决办法from here, 但这不符合我的目的:

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

2 个回复
最合适的回答,由SO网友:Faysal Mahamud 整理而成

在函数中添加以下代码。php

for 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 meta key的数组值。

How to use

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

For pods

函数pods(){global$wpdb;//获取pods post type 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);

How to use

foreach($fields as $key => $value){
update_post_meta(76, $value, \'Steve\');
}
函数acf()和pods()为您提供该post类型的确切元键。如果复制并粘贴代码,则可能无法工作。

希望这个答案对你和其他人都有帮助。

让我知道你什么都不麻烦。

SO网友:bosco

Post Type功能有几个选项可用于获取"features" 特定立柱类型支持的。最简单的方法是简单地使用the get_all_post_type_supports() function:

$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() 查看帖子类型是否支持特定功能。

另一种检查post类型特性的方法是获取其post类型对象,只需检查$supports 属性:

$post_type_object = get_post_type_object( \'post\' );

print_r( $post_type_object->supports );
自定义字段自custom fieldspost meta-data 没有直接的方法可以检索特定帖子类型所使用的自定义字段名列表,而是按帖子而不是帖子类型进行关联。

相反,您必须自己编译一个数组,方法是遍历所讨论的post类型的每个post,并使用get_metadata( $post_id )get_post_custom_keys( $post_id ) 检索为该帖子存储的每个自定义字段。这可能是一个very手术费用昂贵,应尽可能少做-如果您考虑每周或每月不止做一次,我强烈建议您寻找其他方法来实现最终目标。

还可以使用自定义SQL查询来确定此信息,并且无疑比为每一篇文章类型查询元数据要有效得多。

相关推荐

列出分类法:如果分类法没有POST,就不要列出分类法--取决于定制的POST-META?

这可能很难解释,我不知道是否有解决办法!?我有一个名为“wr\\u event”的自定义帖子类型和一个名为“event\\u type”的分层自定义分类法。自定义帖子类型有一个元框,用于event_date 并且与此帖子类型关联的所有帖子都按以下方式排序event_date. 我在循环中有一个特殊的条件来查询event_date 已经发生了-在这种情况下,它没有显示,但只列在我的档案中。就像你可以使用wp_list_categories() 我编写了一个自定义函数,它以完全相同的方式列出所有分类术语。现在