web-dev-qa-db-ja.com

カスタム投稿タイプからすべての投稿を取得してメタボックスとして選択した入力に挿入する

このようなことができるかどうかを知りたいのですが。 スライダー カスタム投稿タイプと サービス カスタム投稿タイプがあります。

スライダー投稿の場合は、すべてのスライダー投稿の横に表示するURL値のメタボックスを作成しました。私が今したいのは、 サービスのカスタム投稿タイプ からすべての投稿を取得し、それらを選択入力としてこのスライダー投稿メタボックスに表示することです。

前もって感謝します :)

これが現在のコードです:

function rm_display_slider_metabox($post) {

    wp_nonce_field(basename(__FILE__), 'slider_nonce');

    $slide_url_value = get_post_meta($post->ID, '_slide_url', true);
    $slide_url = isset($slide_url_value) ? esc_attr($slide_url_value) : '';

    $services_loop = new WP_Query(
        array(
            'post_type' => 'services',
            'posts_per_page' => -1,
            'post_status' => 'publish'
    ));


?>
    <div class="slider meta">
        <p>
            <label for="slide-url"><?php _e('Select URL from the dropdown below for this slide', 'rmtheme' ); ?></label>
            <br />
            <select name="_slide_url">
                <?php while ($services_loop->have_posts()) : $services_loop->the_post(); ?>
                    <option value="<?php the_permalink(); ?>"><?php the_title(); ?></option>
                <?php endwhile; ?>
            </select>
        </p>
    </div>

<?php 

}

function rm_save_slider_meta($post) {

    global $post;

    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE)
        return $post_id;

    if (!isset($_POST['slider_nonce']) || !wp_verify_nonce($_POST['slider_nonce'], basename(__FILE__)))
        return $post_id;

    if (!current_user_can('edit_post'))
        return $post_id;

    $allowed = array(   
        'a' => array(
            'href' => array()
        )  
    );

    if (isset($_POST['_slide_url']))
        update_post_meta($post->ID, '_slide_url', wp_kses($_POST['_slide_url'], $allowed));

}

add_action('save_post', 'rm_save_slider_meta');
add_action('add_meta_boxes', 'rm_slider_metabox');
3

(0.メタデータをget_post_customで取得します(選択入力で選択された値を強調表示するため))。

  1. get_posts( array( 'post_type' => 'services', 'post_status' => 'publish' ) )による投稿のクエリ

  2. foreachを使用して結果をループ処理し、選択入力を構築します。

  3. Save_post(add_action('save_post', 'my_save_meta'))にフックして選択した値を(update_post_metaで)保存します。

3
ptriek