如何从用户元添加POST_META?

时间:2017-06-14 作者:Andrea A

插件search and filter, 无法检索author_meta. 所以我需要补充post_meta 从…起author_meta. 有可能吗?

编辑我以这种方式创建user\\u meta:

    function custom_user_profile_fields($user){
    $previous_value = \'\';
    if( is_object($user) && isset($user->ID) ) {
        $previous_value = get_user_meta( $user->ID, \'company\', true );
    }
    ?>
    <h3>Extra profile information</h3>
    <table class="form-table">
        <tr>
            <th><label for="company">Company Name</label></th>
            <td>
                <input type="text" class="regular-text" name="company" value="<?php echo esc_attr( $previous_value ); ?>" id="company" /><br />
                <span class="description">Where are you?</span>
            </td>
        </tr>
    </table>
<?php
}
add_action( \'show_user_profile\', \'custom_user_profile_fields\' );
add_action( \'edit_user_profile\', \'custom_user_profile_fields\' );
add_action( "user_new_form", "custom_user_profile_fields" );

function save_custom_user_profile_fields($user_id){

    if(!current_user_can(\'manage_options\'))
        return false;

    # save my custom field
    if( isset($_POST[\'company\']) ) {
        update_user_meta( $user_id, \'company\', sanitize_text_field( 
    $_POST[\'company\'] ) );
    } else {
        //Delete the company field if $_POST[\'company\'] is not set
        delete_user_meta( $user_id, \'company\', $meta_value );
    }
    }
add_action(\'user_register\', \'save_custom_user_profile_fields\');
add_action( \'personal_options_update\', \'save_custom_user_profile_fields\' );
add_action( \'edit_user_profile_update\', \'save_custom_user_profile_fields\' );
现在我需要将“company”设置为post\\u meta。

编辑我在函数中添加了。php您的代码,我每三分钟设置一次WP Cron,但我在Posteta中没有找到MySql表“genre”。我改了“公司”,现在是“通用”,但它是一样的。

function  add_cron_recurrence_interval( $schedules ) {
$schedules[\'every_three_minutes\'] = array(
        \'interval\'  => 180,
        \'display\'   => __( \'Every 3 Minutes\', \'textdomain\' )
    );
   return $schedules;
 }
 add_filter( \'cron_schedules\', \'add_cron_recurrence_interval\' );



 function author_company_post_sync() {
    global $wpdb;
      $posts= $wpdb->get_results("SELECT ID,post_author FROM ".$wpdb-
      >prefix."posts");
    foreach ($posts as $post) {
   $company = get_user_meta($post->post_author, \'genere\', true);
 update_user_meta($post->ID, \'genere\', $company);
   }
 }

 // schedule with WP Cron to run sync callback once daily...
 if (!wp_next_scheduled(\'author_company_post_sync\')) {
    wp_schedule_event( time(), \'every_three_minutes\', 
   \'author_company_post_sync\');
 }
编辑解决方案:User meta to post

2 个回复
SO网友:majick

您可以使用这样的过滤器来获取匹配的author元字段(使用post元键检查author元键值):

add_filter(\'get_post_metadata\', \'custom_get_author_meta\', 10, 4);

function custom_get_author_meta($metadata, $post_id, $meta_key, $single) {
    if (!$metadata) {
        $post = get_post($post_id); 
        $author_id = $post->post_author;
        $value = get_the_author_meta($meta_key, $author_id);
        if ($value) {return $value;}
    }
    return $metadata;
}
Update: 已编辑问题的具体答案:

add_filter(\'get_post_metadata\', \'custom_get_author_company_meta\', 10, 4);

function custom_get_author_meta($metadata, $post_id, $meta_key, $single) {
    if (!$meta_key == \'company\') {
        $post = get_post($post_id); 
        $author_id = $post->post_author;
        $value = get_user_meta($author_id, \'company\', true);
        if ($value) {return $value;}
    }
    return $metadata;
}
执行以下操作时,应从作者的用户元字段返回company字段:

$company = get_post_meta($postid, \'company\', true);
因此,如果您处于循环中,也可以执行以下操作:

global $post;
$company = get_post_meta($post->ID, \'company\', true);
UPDATE: 此替代解决方案将循环所有现有的post记录,并同步post_meta 字段“company”(公司)author_meta 相同姓名的帖子作者的密钥。。。每天通过WP Cron。

function author_company_post_sync() {
     global $wpdb;
     $posts= $wpdb->get_results("SELECT ID,post_author FROM ".$wpdb->prefix."posts");
     foreach ($posts as $post) {
          $company = get_user_meta($post->post_author, \'company\', true);
          update_post_meta($post->ID, \'company\', $company);
     }
}

// schedule with WP Cron to run sync callback once daily...
if (!wp_next_scheduled(\'author_company_post_sync\')) {
    wp_schedule_event(time(), \'daily\', \'author_company_post_sync\');
}
这应该使它与任何想要post_meta 指定的字段,因为它现在也将实际存在于该表中。:-)

SO网友:Danny van Holten

Yo可能需要用户元

https://codex.wordpress.org/Function_Reference/get_user_meta

您可以通过将文章作者作为user\\u id来访问它。

因此:

get_user_meta($post->post_author, \'meta_key\'

结束

相关推荐

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

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