web-dev-qa-db-fra.com

Problème dupliquer des liens courts bitly

J'ai ce plugin pour créer un lien en utilisant l'API bitly, mais il y a un problème!

function yoast_bitly_shortlink($url, $id, $context, $allow_slugs) {
    if ( ( is_singular() && !is_preview() ) || $context == 'post' ) {
        $short = get_post_meta($id, '_yoast_bitlylink', true);
        if ( !$short || $short == '' ) {
            if ( !defined('BITLY_USERNAME') || !defined('BITLY_APIKEY') ) {
                $short = 'http://yoast.com/wordpress/bitly-shortlinks/configure-bitly/';
            } else {
                $url = get_permalink( $id );
                $req = 'http://api.bit.ly/v3/shorten?format=txt&longUrl='.$url.'&login='.BITLY_USERNAME.'&apiKey='.BITLY_APIKEY;
                if ( defined('BITLY_JMP') && BITLY_JMP )
                    $req .= '&domain=j.mp';
                $resp = wp_remote_get( $req );
                if ( !is_wp_error( $resp ) && is_array( $resp['response'] ) && 200 == $resp['response']['code'] ) {
                    $short = trim( $resp['body'] );
                    update_post_meta( $id, '_yoast_bitlylink', $short);
                }
            }
        }
        return $short;
    }
    return false;
}
add_filter( 'pre_get_shortlink', 'yoast_bitly_shortlink', 99, 4 );

function yoast_bitly_admin_bar_menu() {
    global $wp_admin_bar, $post;

    if ( !isset($post->ID) )
        return;

    $short = wp_get_shortlink( $post->ID, 'query' );

    if ( is_singular() && !is_preview() ) {
        if ( $short != 'http://yoast.com/wordpress/bitly-shortlinks/configure-bitly/' )
            $shortstats = $short.'+';

        // Remove the old shortlink menu, because it has some weird JS issues with admin bar when giving it submenu's.
        $wp_admin_bar->remove_menu('get-shortlink');
        $wp_admin_bar->add_menu( array( 'id' => 'shortlink', 'title' => __( 'Bit.ly' ), 'href' => 'javascript:Prompt('Short Link:', ''.$short.''); return false;' ) );
        $wp_admin_bar->add_menu( array( 'parent' => 'shortlink', 'id' => 'yoast_bitly-link', 'title' => __( 'Bit.ly Link' ), 'href' => 'javascript:Prompt('Short Link:', ''.$short.''); return false;' ) );
        $wp_admin_bar->add_menu( array( 'parent' => 'shortlink', 'id' => 'yoast_bitly-twitterlink', 'title' => __( 'Share on Twitter' ), 'href' => 'http://Twitter.com/?status='.str_replace('+','%20', urlencode( $post->post_title.' - '.$short) ) ) );
        $wp_admin_bar->add_menu( array( 'parent' => 'shortlink', 'id' => 'yoast_bitly-stats', 'title' => __( 'Bit.ly Stats' ), 'href' => $shortstats, 'meta' => array('target' => '_blank') ) );
    }
}
add_action( 'admin_bar_menu', 'yoast_bitly_admin_bar_menu', 95 );

Il crée 2 liens binaires de chaque publication. La première est le /?p=12345 et l’autre est /post-name. Je planifie toutes mes publications. J’ai donc remarqué que ?p=12345 est créé lors de la sauvegarde et de la prévisualisation automatiques. et quand Scheduled et le /post-name est créé une fois que le post est publié ... Et malheureusement ?p=12345 est défini comme URL courte par défaut; ?p=12345 = bit.ly/sdfssdfd et l'autre est ignoré ..

Que dois-je faire pour le forcer à ne créer qu'un seul lien /post-name et à le définir par défaut au lieu de l'autre?!

J'ai essayé ceci:

$mypost = get_page( $id );
  if ( !in_array($mypost->post_status, array('future', 'publish')) ) {
    return "Post must be published to get a shortlink";
  }

mais comme il est noté en retour, post doit être publié pour obtenir un lien court (il crée un lien mais le /?p=12345 dans le site Web bitly mais il n'est pas visible sur wordpress) ... Je suppose que j'ai besoin, au lieu de publier, l'URL à créer une fois programmée ..

alors j'ai essayé de changer

$mypost = get_page( $id );
  if ( !in_array($mypost->post_status, array('schedule', 'future')) ) {
    return "Post must be published to get a shortlink";
  }

mais comme vous pouvez l'imaginer, cela ne fonctionne pas ...

avez-vous une idée de la façon dont cela peut être corrigé?

merci!

2
user2650484

Je ne sais pas si cela va aider ou non, mais il peut être utile de savoir que certaines actions sont déclenchées plus d'une fois. Par exemple, save_post sera déclenché trois ou quatre fois lors d’une sauvegarde donnée. L'un est pour la révision. Un des nouveaux post. Etc.

Il se peut, dans votre cas, que vous rencontriez quelque chose de similaire. Quoi que ce soit qui déclenche une préforme, le post_name est attribué, puis de nouveau après. Peut être?

1
Chief Alchemist