web-dev-qa-db-ja.com

ページテンプレートをショートコードに読み込んでいます

ページテンプレートをショートコードにロードしようとしています。これにより、コンテンツをどこにでも簡単にロードできます。

私はいくつかの調査を行い、多くの人々がこのコードが彼らのために働いたと言いました、しかし、何故かこれは私がただ空白のページを得るので私のテンプレートを正しくロードしないようです。

ショートコードがプレーンテキストとして表示されないため、実行されていることがわかっているので、テンプレートのロード方法に問題があると思います。

どんな助けでも大歓迎です。

public function register(){
        add_shortcode( 'sponsor_main_page', array($this,'my_form_shortcode') );
            $RegistrationFormId = esc_attr( get_option( 'ik_form_id' ) );
        }

function my_form_shortcode() {
        ob_start();
        get_template_part( 'template-sponsors.php' );
        return ob_get_clean();
    }
2
Ibrarr Khan

get_template_part は、ファイル名ではなく、スラッグを最初のパラメーターとして使用します。

だからそれはする必要があります:

get_template_part( 'template-sponsors' );

そして、さらに詳しく...この関数は2つのパラメータを取ります。

get_template_part(string $ slug、string $ name = null)

その中に、ファイルの名前は次のように構築されています:

if ( '' !== $name )

$ templates [] = "{$ slug}-{$ name} .php"; $ templates [] = "{$ slug} .php";

ご覧のとおり、.phpの部分は自動的に追加されます。したがって、コードはtemplate-sponsors.php.phpというファイルをロードしようとしますが、そのようなファイルはありません。

1

get_template_part()のパラメーターに.phpを追加しているため、発生している可能性があります。これは私があなたの質問のコードを書く方法です:

この例が機能するための前提条件:

  • テーマディレクトリにtemplate-partsというフォルダーを作成します。
  • このディレクトリにtemplate-sponsors.phpという名前の新しいファイルを作成します
  • これは、ショートコードが[sponsor_main_page]であることを前提としています

functions.phpに配置するコード:

function custom_theme_load_sponsors_template() {
  ob_start();
  get_template_part( 'template-parts/template-sponsors' ); 
  return ob_get_clean();
}
add_shortcode( 'sponsor_main_page', 'custom_theme_load_sponsors_template' );
1
Sunny Johal