質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.12%

別のWORDPRESSデータベースよりカスタム投稿タイプの記事数を出すSQL文

受付中

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 195

white_horse

score 0

お世話になっております。
当社WORDPRESSを各支店でHPを別々に管理しており記事の総数の件数と今月の投稿件数を
ホームページ上にその数を掲示したいとのことです。

こちらのteratailさんでの記事を参考にしてみましたがなかなか
思うように数の表示が出来ません。
私がやってみたのは以下の通りになります。
残念ながらエラーになってしまいました。

/*別のデータベースより記事内容を取得 以下functionページに記載*/
$another_db_name = 'db_name';
$another_db_user = 'db_user';
$another_db_pass = 'db_pass';
$another_db_host = 'db_host';
$another_tb_prefix = 'wp_';

$anoteher_wpdb = new wpdb($another_db_user, $another_db_pass, $another_db_name, $another_db_host);

//プレフィックスの設定
$anoteher_wpdb->set_prefix($another_tb_prefix);

/*以上functionページここまで*/

/*以下総数の件数表示 kijiがカスタム投稿タイプ* /

<?php
$all_cnt = $anoteher_wpdb->get_results("
  SELECT COUNT(*)
  FROM $anoteher_wpdb->posts
  WHERE post_type = 'kiji'
  AND post_status = 'publish'
  ORDER BY post_date DESC"
);

echo "今までの記事の総数は"$all_cnt"件です";
?>

次に今月のみ投稿された記事件数のコードも色んな記事を確認して
書いてみました。(これも見よう見まねですがエラーになります。)

/*別のデータベースより記事内容を取得 以下functionページに記載*/
$another_db_name = 'db_name';
$another_db_user = 'db_user';
$another_db_pass = 'db_pass';
$another_db_host = 'db_host';
$another_tb_prefix = 'wp_';

$anoteher_wpdb = new wpdb($another_db_user, $another_db_pass, $another_db_name, $another_db_host);

//プレフィックスの設定
$anoteher_wpdb->set_prefix($another_tb_prefix);

/*以上functionページここまで*/

/*以下今月の件数表示 kijiがカスタム投稿タイプ* /

<?php
$kongetsu_cnt = $anoteher_wpdb->get_results("
  SELECT DATE_FORMAT( POST_DATE, '%Y%m%d') targetdate,
COUNT(*) 
  FROM $anoteher_wpdb->posts
  WHERE post_type = 'kiji'
  AND post_status = 'publish'
  AND POST_DATE   >= CONCAT( DATE_FORMAT( NOW(), '%Y%m'), '01' )
  GROUP BY date_format( POST_DATE, '%Y%m%d')
  ORDER BY post_date"
);


echo "今月の記事の総数は"$kongetsu_cnt"件です";
?>

SQL文やプログラムコードをほとんど書いたことがなく全く見当違いの内容と思いますが
ぜひお教えいただけますと助かります。
どうぞよろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • CHERRY

    2020/05/16 18:10

    > 残念ながらエラーになってしまいました。

    エラーになりましたでは、どのような状況かわかりません。

    たとえば、

    なおしたら動きました

    という回答があった場合、どのようにして解決したかわかるでしょうか?


    質問には、試した内容と試した結果発生している状況を具体的に記載してください。
    エラーが出ているのであれば、具体的なエラーメッセージを記載していただけないでしょうか?

    キャンセル

  • white_horse

    2020/05/16 18:38

    ご指摘ありがとうございます。エラーはsyntax error, unexpected '<', expecting end of file inで「変数が定義されていない」ことが原因のようですがこれも含めてわからないでおります。

    キャンセル

  • CHERRY

    2020/05/17 15:48 編集

    変数が定義されていないと判断された理由はなにでしょうか?

    エラーメッセージが

    > Syntax error, unexpected ’<’ expecting end of file in

    であれば、「予期しないところに `<` がある」というエラーなので、質問に記載されているコードが PHP ファイルのすべてのコードでは無いと思いますので、このコードだけでは何処が原因という判断は難しいです。

    どのようなエラーメッセージが、どのファイルのどの行で発生していて、エラーの発生している前後のソースコードがわからないと判断が難しいです。

    エラーメッセージにエラーが発生しているファイル名や行数があると思いますので、それらも省略せずに「発生しているエラーメッセージ全文をそのまま記載してください。」

    メッセージの中に個人情報やパスワード等の秘密情報が含まれる場合は、なにが書かれていたのかが判別できる適切な文字列に置き換えていただければOKです。(例: WebサイトのURL の部分は、example.com に、ユーザー名の部分は、「ユーザー名」という文字列に、APIキーやパスワード等の部分は、なにが記載されていたのかが判別できる「パスワード」等の文字列に置き換え。)

    キャンセル

回答 2

+2

別の方面からの案として...

register_post_type で、カスタム投稿を登録した際に

register_post_type('custompost', [
   'show_in_rest' => true,
   'rest_base' => 'custompost', // API のスラッグ
]);

のように show_in_rest と rest_base を登録している場合は、WP REST API で、JSON 形式で投稿を取得できます。


WP REST API で、WordPressのURL/wp-json/wp/v2/カスタム投稿タイプのベースURL にパラメータを付けて、WP REST API 経由でアクセスすれば、JSON 形式で カスタム投稿を取得できます。

たとえば、WordPress の URL が http://example.com/ で、 post_type が「custompost」 投稿日が「2020-04-01」(after)から「2020-04-30」(before)まで取得するのであれば、

http://example.com/wp-json/wp/v2/custompost?after=2020-04-01T00:00:00&before=2020-05-01T00:00:00


のようになります。( before は、 2020-04-30T23:59:59 でも OK )

参考情報

参照


(追記)

エラーはsyntax error, unexpected '<', expecting end of file inで「変数が定義されていない」ことが原因のようですがこれも含めてわからないでおります。

エラーメッセージが省略されているので、何処で発生しているのか不明ですが...

文法エラー部分を指摘すると

echo "今までの記事の総数は"$all_cnt"件です";

文字列の連結であれば、 . 演算子が必要です。
文字列演算子 参照 )

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/05/17 11:52

    ご回答いただきありがとうございます。CHERRYさんがおっしゃられたように前半が、functions.php で、後半が page-***.php 等のテンプレートファイルの2つのファイルに追加した内容をまとめて記載したものです。

    キャンセル

  • 2020/05/19 05:25

    CHERRYさま
    WP REST APIのご教授ありがとうございます。こちらの方法を確認したのですが現在運用しているパーマリンクがディフォルトのままです。パーマリンクを変更してしまうと他のリンクに影響が出てしまう恐れがあり使えなかったです。

    キャンセル

  • 2020/05/19 05:52

    > こちらの方法を確認したのですが現在運用しているパーマリンクがディフォルトのままです。パーマリンクを変更してしまうと他のリンクに影響が出てしまう恐れがあり使えなかったです。

    基本的に WordPress のパーマリンク構造は変更する必要はありません。

    ----

    WordPress のバージョンが不明ですが...

    新エディタ Gutenberg が採用された 5.x 以降は、WP REST API は、デフォルトで有効になっていますので、 `/wp-json/wp/v2/posts` 等の WP REST API パーマリンクはデフォルトで用意されています。

    カスタム投稿を登録した場合も、新エディタが WP REST API 経由でのアクセスを利用するので、rest_base を指定していない場合もデフォルトで、`/wp-json/wp/v2/カスタム投稿のPost type` のパーマリンクは作成されます。

    register_post_type() で、rest_base を省略した場合は、post_type と同じ値がデフォルトで設定されます。

    show_in_rest については、微妙なところですが、ブロックエディタの Gutenberg でカスタム投稿を扱うためには、 REST API でのアクセスが必須なので、最近のバージョン(5.x)の場合は、 true になっているのではないかと思います

    ----

    「質問への追記・修正」にも「エラーメッセージを省略せずに詳細を記載してください」と書いていますので、確認をお願いします。

    キャンセル

0

投稿タイプごとに公開済み記事数を表示させるなら関数があります。

【WordPress:公開済み記事数を表示させる方法 | NxWorld】
https://www.nxworld.net/wordpress/wp-show-all-posts-number.html

【wp_count_posts() | Function | WordPress Developer Resources】
https://developer.wordpress.org/reference/functions/wp_count_posts/

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/05/16 17:27

    「別のWORDPRESS」という部分を読み飛ばしていました、無視してください。

    キャンセル

  • 2020/05/16 17:39

    ご意見ありがとうございます。同じデータベースなら関数でできるみたいですが別ですとSQL文で書かないといけないようです。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.12%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる