web-dev-qa-db-ja.com

ユーザーをカスタム投稿タイプにリンクする

ユーザーをカスタム投稿タイプ(大学)にリンクしたいです。誰もがこれを行うための良い方法を知っていますか?

最終的な目標は、自分の大学を表示および編集するためのリンクを表示することです。

アドバンストカスタムフィールドを使用していますが、ユーザーのリンクをサポートするようなリレーショナルフィールドはありません。

1
hyp0thetical

あなたがユーザープロフィール領域の投稿をリンクしようとしているならば、以下のコードは良い出発点であるかもしれません。これをあなたのfunctions.phpファイルに入れることができます。最初の関数は、ユーザープロフィールセクションのカスタム投稿タイプからのすべての投稿を含む選択タグを表示します。オプション値は投稿ID、タイトルは投稿名です。次の関数は、ユーザープロフィール情報を保存し、ユーザーメタフィールドを追加または更新します(この場合、投稿のIDを格納する 'userphotos'を使用しました。サイトのどこかにユーザーの投稿を表示する場合は複数の投稿を含める場合は、チェックボックスをオンにするか、selectタグにmultiple属性を使用して、投稿を配列としてメタフィールドに格納します。また、ユーザープロファイルセクションをどのように機能させたいのかがよくわからなかったので、これがあなたが探しているものではない場合はお詫び申し上げます。

<?php
function add_extra_user_fields( $user ) {
    $userid = get_user_meta($user->ID);
    $args = array(
     'post_type' => 'your_post_type',
     'posts_per_page' => -1,
    );
    $query = new WP_Query($args);
    ?>
    <select name="testprofile">Select a Post</p>
    <?php if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); ?>
        <option value="<?php the_ID(); ?>" 
        if (get_user_meta( $userid, userphotos, true) == $userid ){ 
            echo 'selected'; 
        }?>>
        <?php the_title(); ?>
        </option>
    <?php endwhile; endif; ?>
    </select>
    <?php
}

add_action( 'show_user_profile', 'add_extra_user_fields' );
add_action( 'edit_user_profile', 'add_extra_user_fields' );

function save_extra_user_fields( $user_id ) {
    update_user_meta( $user_id, 'userphotos', sanitize_text_field( $_POST['testprofile'] ) );
}

add_action( 'personal_options_update', 'save_extra_user_fields' );
add_action( 'edit_user_profile_update', 'save_extra_user_fields' );
2
kcbluewave890

コメントするのに十分な評判がないので、:

Kcbluewave890のおかげで解決策が見つかりましたが、修正すべき点がいくつかあります。これがfunctions.phpファイルのための私の作業コードです:

function add_extra_user_fields( $user ) {
$args = array(
    'post_type' => 'YOUR_POST_TYPE',
    'posts_per_page' => -1,
);
$query = new WP_Query($args);
?>
<h3>Select Your College</h3>
<select name="college">
    <?php if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); ?>
        <option value="<?php the_ID(); ?>"
               <? if (get_user_meta( $user->ID, "college", true) == get_the_ID() ) echo 'selected'; ?>>
    <?php the_title(); ?>
    </option>
<?php endwhile; endif; ?>
</select>
<?php
}

add_action( 'show_user_profile', 'add_extra_user_fields' );
add_action( 'edit_user_profile', 'add_extra_user_fields' );

function save_extra_user_fields( $user_id ) {
update_user_meta( $user_id, 'college', sanitize_text_field( $_POST['college'] ) );
}

add_action( 'personal_options_update', 'save_extra_user_fields' );
add_action( 'edit_user_profile_update', 'save_extra_user_fields' );
1
Milan Švehla