web-dev-qa-db-ja.com

動的コンテンツをページに挿入する

私はこの主題が定期的に出てくるのを見ますが、私の特定の要求に対する答えをまだ見ていません。

私はテンプレートとしてWordPressページを使用し、URLパラメータとして渡されたIDに基づいてデータベースソースコンテンツ(画像ファイル名を含む約20フィールド程度のテキストフィールド)を挿入しようとしています(そして私のデータベースへのインデックス)。例えばwww.example.com/examplepage/?pid=123

WordPressの前は、データベースレコードを取得するためのコードを実行し、それらのフィールドを散在させてHTMLを書き出すことで、これをPHPで簡単に実行できました。

WordPressにはPHPコードスニペットをページ上で実行できるプラグインがありますが、それはページ本体にあり、ヘッダーは既に書き出されていると思います。ヘッダには、タイトルやメタデスクのような動的コンテンツを追加したいフィールドがあります。

私は不動産のリスト、映画などをCMSのように管理するためのプラグインを見たことがありますが、私のデータベース処理は珍しいですが、私はカスタムビルドのアプローチを取らなければなりません。

私はWordPressのページレンダリングを掘り下げるために私のテーマのためのfunctions.phpスクリプトでいくらかの作業をする必要があるかもしれないことを理解しています、しかし私は私のサイトの一般的なページ/投稿を邪魔しないように注意したいです。パラメータを受け入れて適切なコンテンツをロードするのは、この1つの特別なページだけです。

私が取る必要があるステップに関するいくつかのアドバイスは最も感謝されるでしょう。

3
Warren Vick

ページテンプレートを作成しているときに、そのテンプレートのコンテンツに任意のものを挿入し、任意のPHPスニペットを使用できます。だから、あなたはPHPでやっていたようにあなたはそれをやり続けることができます。たとえば、これはあなたのページテンプレートになります。

<?php
/*
Template Name: My template
*/
get_header();

?>
<main>

    <?php

    if( isset( $_GET['pid'] ) ) {

        // Populate your dynamic content here

    }

    ?>


</main>
<?php get_footer(); ?>

しかし、あなたはドキュメントのタイトルとメタタグについて正しいです、それらはすでに設定されているかもしれません。ここでwp_titleフィルタとwp_headアクションにフックして、is_page_template関数を使ってページテンプレートにいるかどうかをチェックする必要があります。

たとえば、ページテンプレートファイルの名前がpage-mytemplate.phpのようなもので、テーマのルートにあるとします。

add_filter( 'wp_title', function( $title, $sep ) {

    if( is_page_template( 'page-mytemplate.php' ) ) {

        // Modify the $title here
        $title = 'my new title';

    }

    return $title;

}, 10, 2 );

add_action( 'wp_head', function() {

    if( is_page_template( 'page-mytemplate.php' ) ) {

        // Echo/print your meta tags here
        echo '<meta name=....>';

    }

} );

問題

これは<meta>タグの大きな問題です。 WordPressはドキュメントの<meta>タグを管理する標準的な方法を持っていません。 <meta>タグを追加するプラグインを使用する場合、プラグインがそれを実行する方法を提供しない限り、それらをオーバーライドすることはできません。

参照

3
cybmeta

私は何かが足りないかもしれませんが:

たとえば、「pid」だけが必要で、それがURLの一部である場合、それはかなり簡単ですか?

ページテンプレート 'examplepage'では、以下のようにしてください。

$mypid = $_GET['pid'];

その値に基づいてSQLクエリを続行し、応答をエコーアウトします。

もう少しajaxベースのものが必要な場合は、ユーザーが「examplepage」に到達したときに「pid」を取得し、空のdivにクラスまたはデータ属性として追加します。言ったと言う: '結果コンテナ'

<?php $mypid = $_GET['pid']; ?>
<div class"results-container" mypid="<?php echo $mypid; ?>"></div>

次に、そのdivのmypid属性を読み取り、別々のフェッチを実行するjsスクリプトをdocument readyで実行します。このようにして、結果がロードされている間、ページは「取得中」のステータスと予備的なコンテンツをロードして表示することができます。

理にかなっていることを願っています。

携帯電話で太い指で-Typed!ああああ。

0
GastroGeek

私はつい最近、自分でこれを行いました。これはパーティーに遅れるかもしれませんが、他の人がどのように知りたいのかということで、これらはワードプレス環境における私のステップでした

  1. 次のようにURLパラメータを読み取る関数を作成します。

    function details_Page($atts)
      {
      global $wpdb; 
    
    
     // Get the database record for this details
     $DatabaseId = $_GET['pid'];
     if(!is_numeric ($DatabaseId))
       {
       // GO TO MISSING PAGE. PAGE IS NOT VALID. 
       header('Location: /missing-page/');  
      return;
      }
    
     GENERATE YOUR PAGE CODE HERE
    }
    

この関数のショートコードを作成するか、ページテンプレートで使用してください。機能的に言​​えば、これはページテンプレートを作成する別の方法です。

         add_shortcode('DETAILS_PAGE', 'details_Page');

それでは具体的に定義されたページ(またはテンプレート)にショートコードを追加してください。

あなたのデータに合わせてヘッダを変更するには、add_actionの呼び出しがプライマリループまたはfunctions.phpにあることを確認してください。それ以外の場合は、競合状態になります。

 add_action( 'wp_head', 'MMD_listings_add_custom_meta', 10 );
 function add_custom_meta()
    {
   $slug = basename(get_permalink());  // I use for the particular page
   if(  $slug == 'details')
      {
     $Name = $_GET[ 'Name' ];
     $Desc = $_GET[ 'Desc' ];
     $Logo = $_GET[ 'Logo' ];
    ?>   
    <meta content="<?php echo $Name; ?>>"/>
    <meta content="<?php echo $Desc; ?>">
   <?PHP
   }
 }
0
Debbie Kurth