web-dev-qa-db-fra.com

Récupère toutes les publications de type de publication personnalisée et les insère dans une entrée sélectionnée en tant que metabox

J'aimerais savoir s'il est possible de faire quelque chose comme ça. J'ai Curseur type de message personnalisé et Services type de message personnalisé.

Pour les posts de curseur, j'ai créé une metabox pour que la valeur de l'URL soit affichée à côté de tous les posts du curseur. Ce que je voudrais faire maintenant, c’est d’obtenir tous les messages de Services, le type de message personnalisé , et de les afficher dans ce curseur après le métabox comme entrée de sélection, afin que je puisse choisir le message auquel le lien doit être destiné.

Merci d'avance :)

Voici le code actuel:

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. Récupérez la méta-valeur avec get_post_custom (afin de mettre en surbrillance la valeur sélectionnée dans l'entrée de sélection).)

  1. Interroger les publications avec get_posts( array( 'post_type' => 'services', 'post_status' => 'publish' ) )

  2. Parcourez les résultats avec foreach et créez votre entrée de sélection.

  3. Accrochez-vous à save_post (add_action('save_post', 'my_save_meta') pour stocker la valeur sélectionnée (avec update_post_meta).

3
ptriek