このページでデータテーブルを使用しています。
私は子の行を動作させるのに苦労したことを除いて、それは素晴らしい作品です。
私は、WP_Queryの結果とそれに関連付けられたカスタムフィールドをJavaScriptの配列に変換する必要があると思います。
この方法でWP_Queryの結果を取得するのは十分に簡単ですが、カスタムフィールドをミックスに追加すると、うまくいきません。
これをどのように達成できるかについてのアイデアはありますか?ページのソースコード はこちら で確認できます。
カスタムフィールドデータを返すWP_Queryの書き方
これは通常必要ありません。クエリ内の各投稿のメタデータに個別にアクセスすることができます(既に行っているように)。また、ページ内でクエリを複数回繰り返すこともできます(itが自動的に開始するまで巻き戻します。これがwhile( have_posts() )
部分の動作です)。
パフォーマンス面が気になる場合は、メタデータアクセスがメモリ(またはオブジェクトキャッシュ)に頻繁にキャッシュされます。ページロードでメタデータを複数回取得しても重複クエリは発生せず、1回だけ取得されて再利用されます。
ここにあなたがしたいかもしれないことの過度に単純化された例があります: JsonSerializable
を使います:
class \JsonQuery extends \WP_Query implements \JsonSerializable
{
public function jsonSerialize()
{
return array_map( function( \WP_Post $post ) {
return array_merge(
$post->to_array(),
get_post_custom( $post->ID )
);
}, $this->get_posts() )
}
}
それはそれと同じくらい簡単です(…上記)。今すぐあなたが必要とするものは何でも問い合わせて
// Enqueue script here!
$query = new \JsonQuery( [
/* arguments you use in normal \WP_Query */
] );
wp_localize_script( 'script-handle', 'globalJsVarName', json_encode( $query ) );
それから、あなたはあなたのJSONエンコードされたクエリをすべてのポストカスタムデータと一緒に持っています。
注意:
\WP_Query
を拡張するのではなく、 デコレータ を書くことをお勧めします。インターネットは長所/短所について教えてくれるので、ここでそれを繰り返す必要はありません。
さて、私はあなたが求めているものを理解していると思います、私は左のフィールドにいると私に言ってください。
まず、これを見てみましょう。 https://aarontgrogg.com/blog/2015/12/16/getting-to-know-and-adding-json -ld-to-wordpress-site /
現在はスキーマデータを取得するためにこれを使用していましたが、JavaScriptなどの他の種類のペイロードを配信できると私は考えています。
それから主な質問は、カスタムフィールドデータをペイロードに取り込む方法です。これは、あなたが本当に求めているものだと思いますか。
とにかく、私のJSONを作成するためにそのリンクで説明されている方法を使用して、私は私の頭の中でこれを持っています -
<?php include('json-ld.php');?>
<script type="application/ld+json"><?php echo json_encode($payload); ?></script>
それから私のjson-ld.phpファイルで私はこれを持っています:
<?php
// JSON - LD for Reaction
// Global Call
function get_post_data() {
global $post;
return $post;
}
$post_data = get_post_data();
$payload["@context"] = "http://schema.org/";
//blog posts
if (is_singular('post')) {
//variables for the post
$post_url = get_permalink();
$post_thumb = wp_get_attachment_url(get_post_thumbnail_id($post->ID));
$excerpt= get_the_excerpt($post->ID); // grab the post excerpt.
$author_select = get_field('author', $post->ID);
$moddatetime = new DateTime($post_data->post_date);
// getting the team member
if ($author_select == 'reaction') {
$postauthor = 'Reaction';
}
else if ($author_select == 'guest') {
$postauthor = get_field('guest_writer_name', $post->ID);
} else {
$author = get_field('team_member', $post->ID);
foreach($author as $member) {
$postauthor = $member->post_title;
}
}
// getting the tags
$posttags = get_the_tags();
if ($posttags) {
foreach($posttags as $tag) {
$value .= $tag->name . ', ';
}
}
$value = rtrim($value,', ');
//payload
$payload["@type"] = "blogPost";
$payload["url"] = $post_url;
$payload["creator"] = array(
"@type" => "Person",
"name" => $postauthor, // outputs my post author as per the calls above
);
$payload["headline"] = $post_data->post_title; // works
$payload["datePublished"] = $moddatetime->format(DateTime::ISO8601); // works
$payload["image"] = $post_thumb;
$payload["description"] = $excerpt; // works
$payload["about"] = $value; // works
}
// home page
if (is_front_page()) {
$logourl = get_site_url();
$payload["@type"] = "Organization";
$payload["name"] = "Reaction Marketing";
$payload["logo"] = $logourl . '/reaction-logo.png';
$payload["url"] = get_site_url();
$payload["sameAs"] = array("http://Twitter.com/reaction", "https://www.facebook.com/ReactionMarketing", "http://www.linkedin.com/company/reaction-marketing");
$payload["contactPoint"] = array(array("@type" => "ContactPoint", "telephone" => "+1 403 346 6580", "email" => "[email protected]", "contactType" => "sales"));
}
?>
私の最終結果は、ページと投稿に適したスキーマです。ここにホームページの出力例:
<script type='application/ld+json'>{"@context":"http:\/\/schema.org","@type":"WebSite","url":"http:\/\/reaction.ca\/","name":"Reaction","alternateName":"Reaction","potentialAction":{"@type":"SearchAction","target":"http:\/\/reaction.ca\/?s={search_term_string}","query-input":"required name=search_term_string"}}</script>
<script type='application/ld+json'>{"@context":"http:\/\/schema.org","@type":"Organization","url":"http:\/\/reaction.ca\/","sameAs":["https:\/\/www.facebook.com\/ReactionMarketing","https:\/\/www.instagram.com\/reaction","https:\/\/www.linkedin.com\/company\/reaction-marketing","https:\/\/Twitter.com\/reaction"],"name":"Reaction Marketing","logo":"http:\/\/reaction.ca\/uploads\/REACTION-RGB.jpg"}</script>
さて、明らかにこれはスキーマに固有のものですが、私はさまざまなカスタムフィールドに固有のデータを(ACFを使用して)呼び出したことがわかります。私の変数がどのように呼び出されているかは、そこのブログ投稿で詳しく見ることができます。
これはあなたが求めていることに合うようですか?