web-dev-qa-db-ja.com

ショートコードの最初のインスタレーションのみを表示する機能

投稿のショートコードの追加のインスタンスを削除するために、私のテーマに関数を追加する必要があります。

まず最初に、私はこれが間違って近づいているのだろうかと思いますが、私は投稿がレイアウトされる方法を劇的に再フォーマットするテーマを持っています。この記事では、メディアとショートコードを探して、それらをページの上部に表示します。基本的に、コンテンツからそれを取り除き、タイトルの前に配置します。

条件文は、注目の画像またはギャラリーのショートコードの存在を確認してから印刷します。私が遭遇している問題は、ギャラリーがthe_content()で再び印刷されることです。私がやりたいのは、最初に印刷された後にショートコードを取り除くための関数を作成することです。

私はこのフックremove_shortcode()を知っています、しかしこれは私が最初のものが印刷された後にだけそれを削除したいところでそのショートコードのすべてのインスタンスを削除します。

1
HjalmarCarlson

ショートコードがすでに呼び出されているかどうかを確認するために、ショートコードハンドラに静的変数を追加します。

サンプルコード

add_shortcode( 'wpse62826', 'wpse_62826_shortcode' );

function wpse_62826_shortcode()
{
    static $done = FALSE;

    // Nothing to do.
    if ( $done )
    {
        return;
    }

    if ( is_singular() )
    {
        $done = TRUE;
    }

    return '<b>I run once on singular views!</b>';
}

結果

enter image description here

2
fuxia