web-dev-qa-db-ja.com

Jetpackサブスクリプションフォームをページに表示する方法を教えてください。

Jetpackプラグインでは、次の指示に従ってsubscriptionsモジュールをブログに含めることができます。

購読ウィジェットを使用するには、外観→ウィジェットに移動します。 「Blog Subscriptions(Jetpack)」というラベルの付いたウィジェットをサイドバーの1つにドラッグして、設定を変更します。

自分のサイト内のページのメインセクションに購読フォームを含めることに興味があります。自分のページのコンテンツに購読フォームを簡単に含めることができるような、ある種のショートコードやその他の方法はありますか。あるいは、これを行うには、新しいサイドバーを定義し、購読ウィジェットをサイドバーに配置して、この新しいサイドバーを含むカスタムテンプレートをこのページ内に作成する必要がありますか(かなり面倒な作業)。

2
Yaakov Ellis

サイドバーのステップをスキップすることができます、あなたが必要とするウィジェットのインスタンスを表示するためにテンプレートの the_widget() functionを使うこと。

2
Rarst

今すぐjetpackはサイドバーウィジェットとして購読を埋め込むための唯一の方法を提供します。新しいサイドバーを登録するのがより良い考えです、そして、これは数秒以上かかりません。

ステップ1 - jetpackのサイドバーを登録する

このコードをテーマのfunctions.phpファイルのどこかにドロップするだけです。

register_sidebar( array(
    'name' => 'JetPack in page',
    'id' => 'jetpack-in-page',
    'before_widget' => '<div id="jetpack">',
    'after_widget' => '</div>',
    'before_title' => '<h3>',
    'after_title' => '</h3>'
) );

ステップ2 - どこにフォームを表示しますか?

今すぐフォームが欲しい場所に次のコードを配置します。テーマのどこにでも、このコードを<?php the_content(); ?>のすぐ下に配置することができます。そのため、ページ/投稿のコンテンツの下にちょうど表示されます。

<?php dynamic_sidebar( 'jetpack-in-page' ); ?>

ステップ3 - これで完了です。

ウィジェットをJetPack in pageサイドバーにドラッグアンドドロップすると、フォームがページに表示されます。ただし、このウィジェットはサイドバー専用に作られているため、フルページで見栄えをよくするにはスタイリングを行う必要があるかもしれません。

参照 - register_sidebar(); (Wordpress Codex)

2
amit

次のことを試してください:(下記のコードをfunctions.phpにコピーして貼り付けてください)

// Get page url >> webcheatsheet.com/php/get_current_page_url.php
function itp_current_page_url() {
$page_url = 'http';
if( isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on" ) { $page_url .= "s" ;}
$page_url .= "://";
if( $_SERVER["SERVER_PORT"] != "80" ) {
    $page_url .=         $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
} else {
    $page_url .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
}

return $page_url;
} // end itp_current_page_url

// Jetpack subscription form shortcode by http://www.itechplus.org
function itp_jetpack_subscription_form_shortcode( $atts, $content = '', $code = '' ) {
extract( shortcode_atts( array(
    'title' => 'Email Subscription',
    'desc' => 'Enter your email address to subscribe to this website and receive notifications of new articles by email.',
    'button' => 'Subscribe',
    'placeholder' => 'Email Address',
), $atts ) );

global $post;

// Build current page url
if( is_home() || is_front_page() ) {
    $url = home_url('/');
} elseif( is_singular() ) {
    $url = get_permalink($post->ID);
} else {
    $url = itp_current_page_url();
}

$jetpack_subscribe = '';

// Build jetpack subscription form
if( $title != '' ) {
    $jetpack_subscribe .= '<h3 class="widget-title">
        <label for="subscribe-field">' . $title . '</label>
    </h3>';
}
$jetpack_subscribe .= '<form id="subscribe-blog-blog_subscription-' . time() . '" accept-charset="' . get_bloginfo( 'charset' ) . '" method="post" action="">';
    if( $desc != '' ) {
        $jetpack_subscribe .= '<p>' . $desc . '</p>';
    }
    $jetpack_subscribe .= '<p>
        <input id="subscribe-field" class="input email" type="email" placeholder="'. $placeholder .'" onblur="if( this.value == \'\' ) { this.value = \'' . $placeholder . '\'; }" onclick="if ( this.value == \'' . $placeholder . '\' ) { this.value = \'\'; }" value="' . $placeholder . '" style="width: 95%; padding: 1px 2px" name="email" />
    </p>
    <p>
        <input type="hidden" value="subscribe" name="action" />
        <input type="hidden" value="' . $url . '" name="source" />
        <input type="hidden" value="widget" name="sub-type">
        <input type="hidden" value="blog_subscription-' . time() . '" name="redirect_fragment" />
        <input type="submit" class="input subbmit" name="jetpack_subscriptions_widget" value="' . $button . '" />
    </p>
</form>';

return $jetpack_subscribe;
}
add_shortcode( 'itp_email_subscription', 'itp_jetpack_subscription_form_shortcode' );

Jetpackをインストールしてアクティブにした状態で、任意のページまたはテキストウィジェットにショートコードを適用します。

[itp_email_subscription title="Some Title" desc="Some description here" placeholder="Placeholder" button="Button"]

完了しました。まだテストされていません。バグがあれば教えてください。ハッピーコーディング:-)

0