サポート » 使い方全般 » htmlにWordPressを表示

  • 解決済 apple560

    (@apple560)


    html静的ファイルにWordPressの記事を表示させたいと思っています。

    WordPressbは「wp」の中にインストールしてあります。
    その外「info」へhtmlファイルを作りました。
    www
    ├wp
    ├wp-contentなどのWordPress
    ├info
    ├index.htmlなどhtml静的ファイル

    色々検索して以下のことをやってみましたが、WordPressのソースが表示されてしまうだけでした。

    1.htmlファイルの一番最初に<?php require(‘./wp/wp-load.php’); ?>をいれました
    2.さくらレンタルサーバーを使っているので
    .htaccessに以下を記述し、「info」フォルダのなかに
    Action myphp-script /php.cgi
    AddHandler myphp-script .php .html
    php.cgiに以下を記述し、「www」フォルダのなかに
    #!/bin/sh
    exec /usr/local/bin/php-cgi
    3.カスタム投稿タイプの記事を表示させたいので
      htmlファイルに以下の様に記述しました

    <?php if ( have_posts() ) : ?>
    <?php $my_query = new WP_Query( array( 'post_type' => 'news','posts_per_page' => 10,) );
    while ( $my_query->have_posts() ) : $my_query->the_post(); ?>
    
    <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
    <h1 class="entry-title"><a href="<?php the_permalink(); ?>" rel="bookmark"><?php the_title(); ?></a></h1>
    <?php the_content() ); ?>
    </article>
    
    <?php endwhile; wp_reset_postdata(); ?>
    <?php endif; ?>

    どの部分が間違っているのか全く分かりません。
    ご教授頂けますでしょうか

12件の返信を表示中 - 16 - 27件目 (全27件中)
  • CG

    (@du-bist-der-lenz)

    つまりは、個別投稿についてでしょうか。現在のサイトにWordPressをhtmlで揃えることは問題無いです。
    (個別投稿をhtmlにしています) http://review.amadeusrecord.net/casals-bach-cello-suite/release/38.html

    CG様
    WordPressの特定のアーカイブだけhtmlにすることも出来るのでしょうか?
    それはどうすれば良いのでしょうか?

    CG

    (@du-bist-der-lenz)

    特定のアーカイヴだけを、固定ページで表示させる手段ではどうなのでしょうか。実践するにはタイミングが遅かったですね。台風18号通過で、昨晩は待ち時間が十分にあったので試してみることも出来そうです。

    CG様
    >特定のアーカイヴだけを、固定ページで表示させる手段ではどうなのでしょうか。
    はい、それでも良いです。
    お忙しいところ申し訳ありません。

    msio様
    testの表示は出来ました。
    ただ、そこから先のWordPressを表示させるのが出来ませんでした。

    先に申しましたとおり、ワードプレスはさまざま細かい部品をより合わせて稼働するようになっておりますので、index.php から順番にいくつも下準備をした上で記事が表示されるようになっています。
    途中から読み出しても、切れた尻尾はとかげにならないように、ワードプレスの制約を離れては稼働しません。

    そのためにHTMLで動的に生成されるワードプレスの記事を静的なHTMLで作成したかったのではありませんか?

    用途と設置期間と、表示されたホームページを「名前をつけて保存」としてHTMLファイルにしたものを掲示するのでは現在たりない部分はなにかをお教えいただけると幸いです。

    msio様
    お手数かけて申し訳ありません。
    >そのためにHTMLで動的に生成されるワードプレスの記事を静的なHTMLで作成したかったのではありませんか?
    はい、その通りです!

    会員ページでURLが分からないようにhtmlを最終的に今まで使っていたcgiで記事を読み込んで表示させたいのです。
    いままで使っていたcgiにはパスワードの確認も含まれており、htmlで表示させるのでhtmlにしたかったのです。
    htmlにしたいファイルは会員ページのみです。他のページはそのままphpで表示させます。

    会員ページはinfoというカスタム投稿タイプにします。

    説明が下手ですみません。

    もしかして「会員ページ」というページを1ページだけ独自のデザインとURLにして表示させたいということですか?

    なんらかの会員ページURLは表示させないようにして、「???/info/」ないしは「???/info.html」というページを表示したい、ということでしょうか。

    それであれば会員ページがワードプレス固有の回避しがたいものだとして、そこへアクセスの際、独自テーマをほどこしたワードプレスページへ転送させてはどうでしょうか。

    info という独自テーマなどを施した固定ページを1ページつくり、それを会員ページとしてもしログインしてユーザーパネルにアクセスした際、ユーザーパネルのURLであればそのページにリダイレクトさせるという文を function.php に書き込まれてはどうでしょうか。

    以下にそういう類のコードを記載いたします。方針が伝わりますでしょうか。
    もしご要望に合致していましたら、詳細をいただけるとあわせたものに調整できればと思います。
    そのまま張り付けてへんな動作をおためしにならないようにだけご注意ください。

    
    //ログインページ確認 function.php に設置する予定のものです。
    //表示中のアドレス取得
    $currentURL = $_SERVER["REQUEST_URI"];
    if(strpos($currentURL, "?")!==FALSE){
    	//パラメータがついていれば切り離す
    	$currentURL_array = explode("?", $currentURL);
    	$currentURL = $currentURL_array[0];
    	$option_URL = $currentURL_array[1];
    }
    //末尾を取り出しますがスラッシュで終わっている場合は二番目を取り出します
    if(strpos($currentURL, "/")!==FALSE){
    	$currentURL_array = explode("/", $currentURL);
    	if($currentURL_array[count($currentURL_array)-1]!==""){
    		$currentURL = $currentURL_array[count($currentURL_array)-1];
    	}else{
    		$currentURL = $currentURL_array[count($currentURL_array)-2];
    	}
    }
    //結果、表示中のページ名(末尾)が次のものであれば動作を選別します
    //URL末尾が
    switch($currentURL){
    //ログインだったら
    case "wp-login.php":
    //移転先のページが存在していれば
    if(url_to_postid(get_bloginfo('url')."/login/")>0){
    	$url_login = get_bloginfo('url')."/login/";
    	//パラメータの種類によってはアドレスを変える
    	if($option_URL=="action=register"){ $url_login .= get_bloginfo('url')."/login/?regist"; }
    	//リダイレクト wp_redirect()でも可
    	header("Location: {$url_login}");
    }
    break;
    case "****.php":
    case "????":
    case "wp-admin":
    if($user){
    	//特定のアドレスへのアクセスに対し
    	//ログインしているユーザーに対して
    	if($user->roles[0]!="administrator"){
    		管理者でなければ infoというページがあればリダイレクト
    		$url_login = get_bloginfo('url')."/info/";
    		header("Location: {$url_login}");
    	}
    }
    break;
    }
    

    こんにちは

    私の理解が間違っているかもしれませんが、

    ・パスワード確認機能があるcgiをこれまで通り使いたい。
    ・このcgiで表示されるHTML内に記事を表示したい。

    ということでしょうか?
    それでしたら、@nobitaさんが回答されている、JavaScriptで取得して表示するのがベストだと思います。
    @nobitaさんの回答は、RSSを取得して表示するものではありません。
    REST APIというものを使って記事の内容を(記事内にある画像や、工夫すればカスタムフィールドの値なども)取得できるものです。
    WP REST API

    カスタム投稿タイプを取得するのであれば、以下の記事が分かりやすいかもしれません。
    https://www.tam-tam.co.jp/tipsnote/cms/post9688.html

    他にも、XML-RCPという方法で記事の情報を取得することもできます。
    同じく、JavaScriptで取得することができます。

    XML-RPC WordPress API
    こちらは、私は使ったことがないのでよく分かりませんが、Googleで検索すればいろいろ情報があると思います。

    msio様
    パスワード確認は独自のcgiで作られているのでWordPressのユーザー登録は使えないのです。
    ログインページはWordPressの外に作っています。
    ですので、そのcgiを経由して表示させなければなりません。
    cgiに読み込むときにhtmlであれば問題ないと思います。
    iflameでWordPressのページを埋め込んだhtmlフィルはそのcgiで表示できます。

    そうだったのですね。
    するとその別途用意されているワードプレスとは別物のログインのページを、ワードプレスのページの中に表示されているようにするという感じでしょうか。
    インラインフレームではめ込んでいるその状態そのままに、フレームではなくページに埋め込む形でよろしいでしょうか。

    
    <?php
    $url = 'ここにそのCGIのURLをはりつけます。';
    //もしもパラメータがあるなら
    //なければ下記のコンテント=クエリビルダの行ごとなくしても大丈夫です
    $data = array(
    	'username' => $_POST["username"],
    	'password' => $_POST["password"],
    );
    $options = array('http' => array(
    	'method' => 'POST',
    	'content' => http_build_query($data),
    ));
    $contents = @file_get_contents($url, false, stream_context_create($options));
    ?>
    

    これでインラインフレームのように $contents の中にページデータが読み込めますのでiFrameで書き込むところに
    <?php echo $contents; ?>で、そのログインCGIのページが表示されると思いますがいかがでしょうか。

    デザイン等は表示されたふつうのコンテンツからとってこられるか、もしくはワードプレスの固定ページを用意してそこに<?php echo $contents; ?>をはめ込むのもありかと思います。

    追記:ほかにも読み出す方法の例を記載いたします。@は読込時のエラー回避です。

    
    //SSLつかう場合
    $options = stream_context_create(array('ssl'=>array('capture_session_meta'=>"TRUE")));
    $contents = mb_convert_encoding(@file_get_contents($URL, FALSE, $options), 'UTF-8', 'auto');
    
    //シンプルにURLdけ
    $contents = mb_convert_encoding(@file_get_contents($URL), 'UTF-8', 'auto');
    
    • この返信は2年、 2ヶ月前にmsioが編集しました。理由: 読み込み例を追記しました。

    みなさん、いろいろご提案ありがとうございます。
    色々なやり方があってちょっと頭の中がパニクっています。

    先ほどカスタム投稿タイプの設定をしていたら
    WordPress4.7以降に追加された「REST API で表示」というのがあるのに気がついて
    munyagu様の言っていることがいま分かった状態です。遅い!^_^;

    もうしばらく悩んでみます(>_<)

12件の返信を表示中 - 16 - 27件目 (全27件中)
  • トピック「htmlにWordPressを表示」には新たに返信することはできません。