web-dev-qa-db-ja.com

問題の短いリンクの重複ビット

ちょっとしたAPIを使用してショートリンクを作成するためのこのプラグインがありますが、問題があります!

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 );

すべての投稿の2つのビットリンクを作成します。1つは/?p=12345で、もう1つは/post-nameです。すべての投稿をスケジュールするので、?p=12345は自動保存、プレビューで作成されますそして、スケジュールされ、/post-nameが作成され、投稿が公開されると...残念ながら、?p=12345はデフォルトの短いURLとして設定されます。 ?p=12345 = bit.ly/sdfssdfdで、もう1つは無視されます。

/post-nameのリンクを1つだけ作成し、他のリンクではなくデフォルトとして設定するには、どうすればよいですか?!

私はこれを試しました:

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

しかし、見返りに記載されているように、ショートリンクを取得するには投稿を公開する必要があります(リンクを1つ作成しますが、少しウェブサイトに/?p=12345を作成しますが、WordPressには表示されません)、公開する代わりに、スケジュールされた後に作成されるURL.

だから私は変更しようとしました

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

しかし、想像できるように、それは機能していません...

それをどのように修正できるか考えていますか?

ありがとう!

2
user2650484

これが助けになるかどうかはわかりませんが、いくつかのアクションが複数回実行されることを知るのに役立つかもしれません。たとえば、save_postは実際には特定の保存に対して3回または4回起動します。一つは改訂用です。新しい記事の一つ。等。

あなたの場合、あなたが似たようなことを経験しているのかもしれません。それが何であれ、プリフォームを起動することでpost_nameが割り当てられ、それからまた後に割り当てられます。多分?

1
Chief Alchemist