web-dev-qa-db-ja.com

Get_page_by_title()に代わるものは何ですか?

テンプレートページでのみ利用可能な情報をフッターに表示するテーマをコーディングしています。私はget_page_by_title()を使用していますが、これはページが何を呼ばれるのか知っていればうまくいきますが、私の考えではそれはあまり動的ではなく、ユーザーがあなたのテーマの中でページに名前を付けるものを予測するのは不可能です。

私の研究では、サイトからIDの数値インデックス配列を返すget_all_page_ids()と呼ばれる関数を見つけました。この関数は、それが連想的(あるいはポストオブジェクトでさえ)であればもっとクールになるでしょうが、私は掘り下げます。

私はこのようなものを使うことを考えました:

$all_page_ids = get_all_page_ids();

foreach ($all_page_ids as $id) {
    // get_post() {@link https://developer.wordpress.org/reference/functions/get_post/}
    $post_object = get_post($id);

    // preg_match() {@link http://php.net/manual/en/function.preg-match.php}
    if(preg_match("/\b(contact)\b/i", $post_object->post_title)) {
        // do something here
    } else {
        // for readability
        continue;
    }
}

しかしながら、これは依然として、ユーザーが自分のタイトルにWordの連絡先を持つことを選択したことを知っていなければならないという問題を引き起こします。連絡先ページである「連絡をとる」というページを作成した場合はどうなりますか。これは壊れるでしょう。

要するに、私の質問はテーマデザイナーのためのベストプラクティスを中心に展開しています。 get_page_by_title() best で他のページのIDを取得することができますか、それともタイトルを知らなくても他のページのIDを取得するためにいくつかの関数/変数を組み合わせる方法はありますか?

それとも、この種の重い作業を行うWordPressの機能がありますか、それともget_page_by_title()が唯一の近い機能ですか?私の疑いは、ハッカーがいるということですが、これを実行するためのより良い方法、私は何も考えがありません。あなたがこれに与えることができるどんな助けでもありがとう。

5
mrClean

あなたがタイトルを強制しない、そして明らかにidを知らないなら、それをすることができる唯一の方法は使用するページをユーザーに選択させることです。あるいはページ編集の一部として

6
Mark Kaplun

あなたのページがテンプレートページであるならば、あなたはis_page_template($template_name)を使うことができます

それ以外の場合は、Markが述べたように、テーマオプションを作成してユーザーに決定させる必要があります。

もっと: https://codex.wordpress.org/Function_Reference/is_page_template

_ update _

あなたの質問を誤解しました。特定のテンプレート名を使用してすべてのページを取得できますが、ユーザーが同じテンプレートを使用してそのようなページを複数作成する可能性があるため、どのページを選択するかがわかりません。

 $args = array(
    'meta_key'         => '_wp_page_template',
    'meta_value'       => 'page-about.php',
    'post_type'        => 'page'
 );
 $posts_array = get_posts( $args );

もう1つのアイデアは、テーマ/プラグインの起動時にコードを使用して自分のページを自分で作成し、オプションとしてidを保存するだけでなく、必要に応じてページを変更するテーマオプションをユーザーに提供することです。それがWooCommerceがShop Pageと連携する方法です。

マークのアプローチはより良く、より安全であると私は思います。

3
Laxmana