web-dev-qa-db-fra.com

Comment attacher des liens dans le type page/post ou post personnalisé?

Je dois créer ou utiliser un plug-in tiers existant pour associer des liens (un ou plusieurs) à une page, un message ou un type de message à partir du gestionnaire de liens WP:
http://example.com/wp-admin/link-manager.php

J'ai besoin d'une métabox avec un menu déroulant ou un élément de formulaire de sélection multiple, et je dois lier ce lien Blogroll-Link avec postmeta ou quelque chose de similaire.

Existe-t-il un plugin, un extrait de code ou une solution pour ma tâche?

2
Takács Zsolt

Il s’agit d’une solution simple et rapide Metabox + jQuery + Plain Text.

Si vous souhaitez scinder le menu déroulant en catégories , consultez la documentation de get_bookmarks .
Cela peut aussi être utile: add_meta_box .

Voici le résultat :
snippet result

Et le code :

add_action( 'add_meta_boxes', 'wpse_42440_add_custom_box' );
add_action( 'admin_head', 'wpse_42440_script_direct_print' );

function wpse_42440_add_custom_box() 
{
    add_meta_box(
        'wpse_42440_sectionid',
        __( 'Blogroll' ), 
        'wpse_42440_blogroll_box',
        'page'
    );
    add_meta_box(
        'wpse_42440_sectionid',
        __( 'Blogroll' ), 
        'wpse_42440_blogroll_box',
        'post'
    );
}


function wpse_42440_blogroll_box() 
{
    $bookmarks = get_bookmarks( array(
                    'orderby'        => 'name',
                    'order'          => 'ASC'
                              ));

    echo '<div class="element" id="container-1">
        <select name="bookmarks_dropdown" id="bookmarks_dropdown">
        <option value="">- Select -</option>';

    /**
     * Values contained in each $link
     * link_id, link_url, link_name, link_image, link_target, link_description, link_visible, link_owner, link_rating, link_updated, link_rel, link_notes, link_rss
     */
    foreach($bookmarks as $link) {
          echo '<option value="'.$link->link_url.'">'.$link->link_name.'</option>';
    }

    echo '</select>
    <input type="checkbox" name="colores" id="new-window" value="">New window?
    <br /><br />Plain link:<br /><input type="text" name="url1" id="plain-link" size="33" value="">
    <br />Full link:
    <br /><input type="text" name="url2" id="full-link" size="33" value="">
    </div>';
}


function wpse_42440_script_direct_print() 
{
    global $pagenow;
    $post_types = array( 'post-new.php', 'post.php'); 

    // Not our types. Quit.
    if ( !in_array( $pagenow, $post_types ) )
        return;

    ?>
        <script type="text/javascript">
        jQuery(document).ready(function($) 
        {    
            $('#bookmarks_dropdown').on('change', function()
            {       
                // define vars
                var target_window = $('#new-window').attr('checked') ? ' target="_blank"' : '';
                var full_link = '<a href="'+$(this).val()+'"'+target_window+'>'+$('#bookmarks_dropdown option:selected').text()+'</a>';

                // fill input text fields
                $('#plain-link').val($(this).val());
                $('#full-link').val(full_link);
            });
        });
        </script>
    <?php
}
1
brasofilo