質問と回答の再検討
これらの質問が時々あなたを悩ませ、人生の後半で再び追い詰めますが、これはそのような質問の1つです。
この質問は、問題の代替解決策について考えさせられました。既に述べたように、カスタムフィールドとメタボックスは、メタデータの小さな断片を格納するためのものであり、ショートコードや関数を実行できるコンテンツを投稿するための拡張機能としては機能しません。また、すでに述べたように、あなたの方法は間違っているので、使用すべきではありません
私があなたの投稿で面白かったのは、カスタムフィールドとメタボックスを使用して、ユーザー入力からのカスタムコンテンツを誤って表示したことです。だから私は座ってこの作業を行い、カスタムフィールドデータとメタボックスデータを正しく使用するための可能な方法を考えました
これは私の考えです:
シナリオ:
注:これは、ニーズに合わせて変更できます。
単一の投稿で、ユーザーは自分のニーズに合わせて、投稿後にカスタムコンテンツを動的に表示したい/要求します。これは動的でなければなりません。コンテンツはカスタムクエリである必要があり、ユーザーは必要なときに表示するものと必要なものを選択する必要があります
可能な解決策:
ショートコードはカスタムフィールドで実行できないため、ここではショートコードは機能しません。do_shortcode
動的ではなく、ハードコーディングされているため、どちらも機能しません。ご質問のとおり、カスタムフィールドを使用します。繰り返しますが、カスタムフィールドを使用してカスタムクエリまたはショートコードを実行しないでください
計画:
カスタムフィールドを使用して、クエリ引数のみを保存します。そのため、私たちが行うことは、というカスタムフィールドを作成することcustom_query_arguments
です。投稿エディタ画面に、すぐに使用できるカスタムフィールドが表示されます。
次のステップは、カスタムクエリ引数をフィールドに追加することです。たとえば、カテゴリ1の3つの投稿をタイトルで並べ替える必要があるとします。したがって、クエリ引数は次のようになります。(文字列形式)
'posts_per_page=3&cat=1&orderby=title'
これは、カスタムフィールドに入力する必要があるものです。入力したら、カスタムフィールドの値を保存します
次に、single.phpでカスタムクエリを作成します。ここで必要なのは、カスタムフィールド(実際にはクエリ引数)から値を取得し、それを新しいインスタンスにフィードしてWP_Query
、投稿を取得する必要があります。また、カスタムフィールドに値が保存されているかどうかを確認する必要があります。カスタムフィールドが空の場合は何も表示しません
コード:
単一の投稿の直後にsingle.phpでこのようなことを試すことができます。
$args = get_post_meta( get_queried_object_id(), 'custom_query_arguments', true );
// check if the custom field has a value
if( ! empty( $args ) ) {
$q = new WP_Query( $args );
if( $q->have_posts() ) {
while( $q->have_posts() ) {
$q->the_post();
the_title();
}
wp_reset_postdata();
}
}
ユーザーがカスタムクエリを削除する場合は、単にカスタムフィールドの値を削除し、カスタムフィールドを空白のままにすることができます。カテゴリ10と合計5つの投稿から同じクエリを表示する必要がある場合、元の値を次のように置き換えることができます。
'posts_per_page=5&cat=10&orderby=title'
いくつかのメモ:
このカスタムフィールドとメタボックスに情報を入力するときは、正しい構文と形式を使用することが重要です。構文エラーまたは誤った情報は、望ましくない出力または致命的なエラーにさえつながります。クライアントにそのような情報を知らせることが重要です
元の回答
あなたが何を達成しようとしているのか理解できませんが、私があなたに伝えることができることから、それらは2つの別々のことです
オプション1
apply_filters('the_content', $content);
は、コンテンツフィルタを未フィルタリングの未処理の投稿コンテンツに適用するために使用されます$post->post_content
。これは通常、これらのフィルターには、wp_autop
pタグを追加する有名なフィルターが含まれますthe_content()
apply_filters('the_content', $content);
通常は、使用せずget_posts
にWP_Post
オブジェクトを直接操作する場所と組み合わせて使用されます。setup_postdata( $post )
これにより、テンプレートタグがthe_content()
使用可能になります
オプション2
do_shortcode
は、ページエディタ画面のバックエンドのテキストエディタの外部にあるテンプレートファイルの任意の場所にショートコードを追加するために使用され、基本的にフックを介してショートコードをフィルタリングします。
正しい使い方は次のとおりです
例:ギャラリーショートコードをテンプレートファイルに追加する
echo do_shortcode( '[gallery]' )
編集1
あなたのコメントから、私はまったくショートコードを使用しません。
テキストエディターでショートコードを追加するのでdo_shortcode
はなく、テンプレートファイルでショートコードを直接(ハードコード)追加する場合は、テンプレートに関数を追加するだけです
例:
次のショートコード機能がある場合
function footag_func( $atts ) {
return "foo = {$atts['foo']}";
}
add_shortcode( 'footag', 'footag_func' );
次のようなテンプレートで関数を直接呼び出すことができます
echo footag_func();
ショートコードを解析する必要がないため、この方法ははるかに高速です
編集2
ここで正直に言うと、あなたは編集からこれを完全に間違っています。だから私はあなたの最初の質問を理解できませんでした
場合によっては、投稿/ページ/カスタム投稿タイプに投稿メタを追加して、ショートコード(スライダー、連絡フォームなど)または単なるテキストを追加できるようにする必要があります。提出されたテキストです。
ショートコードを機能させるには、オプション1 .....を使用します
カスタムフィールドはありませんテキストフィールドと確実にショートコードを実行し、そのことスライダーやコンタクトフォームのために使用されることを意味するものではありません。投稿やページのテキストエディターの代わりにカスタムフィールドを使用しないでください。
前に述べたように、apply_filters('the_content', $content);
生の投稿コンテンツにフォーマットを適用するために使用されることを意図しています。
ここには2つの選択肢があります
あなたの構造と達成したいことを新しく見直すことを真剣にお勧めします。カスタムフィールドはテキストエディターではないため、ショートコードやスライダーを実行できません。
私の推奨事項は、カスタムウィジェットまたはカスタムフィールドで使用できるシステムを調べることです。