WordPressカスタムフィールドのソートがうまくいかない

カスタムフィールドでソートをしたときに
カスタムフィールドの内容を数値としてソートするのに
上手くいかないときは
orderbyの値に「_num」を追加すると直ります。

 

$args =array(
‘meta_key’ => ‘views’,
‘orderby’ => ‘meta_value’,
‘order’ => ‘DESC’,
);
query_posts($args);

 

↓↓↓↓↓↓↓↓↓

 

$args =array(
‘meta_key’ => ‘views’,
‘orderby’ => ‘meta_value_num‘,
‘order’ => ‘DESC’,
);
query_posts($args);

 

 

====================

言われてみれば、そーだよな…

 

WordPress Jetpack SNSボタンを大きくする

 

「スマホで見ると小さい!」とのお嘆きの貴兄に・・・

特に自作テンプレだと小さくなるので

使用しているCSSに次を追加するとOKです

 

/* SNSを大きく */
.sd-social-icon .sd-content ul a:before,
.sd-social-text .sd-content ul a:before,
.sd-content ul div.option.option-smart-off a:before,
.sd-social-icon-text .sd-content a:before {
font-size:50px !important;
}

/*間隔を広く */

.sd-social-icon .sd-content li{
margin-left:20px !important;
}

 

スマホの時だけ…というなら
@media screen and (max-device-width: 480px) {

で囲ってやればいいかなぁ

 

WordPress(コピペで使える)データベースからIDを指定した記事の内容を取得する


スイーツ作って待っててくれる弟欲しいなぁ~(>~<)

表題の通りで「WordPressで使用しているデータベースからSQLを使って指定IDのデータを取得する方法」です。

普通だったらget_posts()を使います

$args = array( ‘ID’ => 1234);
$tmp_post = get_posts($args );

で、済むことですが、使えない場合の時のために備忘録。

「使えない場合」がポイントなので、それは後述します。

 

データを取得するコード

以下のコードで$oya_postの配列の中にキーでメタ情報を入れて配列化します。

$tmp_post -> ID は $oya_post[‘ID’]
$tmp_post -> post_title は $oya_post[‘post_title ‘]
女神族の記憶 は 悪魔族の記憶へ

となります。

以下の赤い部分は適時修正してください。
取得結果は最後のprint_rで出しています。

 

■コードです■

$parents_table_prefix = “wp4_“;
$parents_id = “12345“;

//メイン情報の取得
$sql = “SELECT * FROM wp_posts WHERE ID ='” . $parents_id . “‘”;
$sql = str_replace(“wp_”, $parents_table_prefix ,$sql);
$draft_page = $wpdb->get_results($sql);
$oyadata_posts = $draft_page[0];

//詳細情報の取得
$sql = “SELECT * FROM wp_postmeta WHERE post_id ='” . $parents_id . “‘ AND meta_key Not Like ‘\_%'”;
$sql = str_replace(“wp_”, $parents_table_prefix ,$sql);
$draft_page = $wpdb->get_results($sql);
foreach($draft_page as $data){
$oyadata_postmeta[$data -> meta_key] = $data -> meta_value;
}

//カテゴリの取得
$sql = “SELECT wp_terms.name, wp_terms.slug “;
$sql .= “FROM wp_term_relationships INNER JOIN wp_terms ON wp_term_relationships.term_taxonomy_id = wp_terms.term_id “;
$sql .= “WHERE wp_term_relationships.object_id='” . $parents_id . “‘ “;
$sql .= “ORDER BY wp_terms.term_id”;
$sql = str_replace(“wp_”, $parents_table_prefix ,$sql);
$draft_page = $wpdb->get_results($sql);
$oyadata_category = $draft_page;

//カテゴリの取得
$sql = “SELECT wp_terms.name, wp_terms.slug, wp_terms.term_id “;
$sql .= “FROM (wp_term_relationships INNER JOIN wp_terms ON wp_term_relationships.term_taxonomy_id = wp_terms.term_id) INNER JOIN wp_term_taxonomy ON wp_terms.term_id = wp_term_taxonomy.term_id “;
$sql .= “WHERE wp_term_relationships.object_id='” . $parents_id . “‘ AND wp_term_taxonomy.taxonomy=’category’ “;
$sql .= “ORDER BY wp_terms.term_id;”;
$sql = str_replace(“wp_”, $parents_table_prefix ,$sql);
$draft_page = $wpdb->get_results($sql);
$oyadata_category = $draft_page;

//タブの取得
$sql = “SELECT wp_terms.name, wp_terms.slug, wp_terms.term_id “;
$sql .= “FROM (wp_term_relationships INNER JOIN wp_terms ON wp_term_relationships.term_taxonomy_id = wp_terms.term_id) INNER JOIN wp_term_taxonomy ON wp_terms.term_id = wp_term_taxonomy.term_id “;
$sql .= “WHERE wp_term_relationships.object_id='” . $parents_id . “‘ AND wp_term_taxonomy.taxonomy=’post_tag’ “;
$sql .= “ORDER BY wp_terms.term_id;”;
$sql = str_replace(“wp_”, $parents_table_prefix ,$sql);

$draft_page = $wpdb->get_results($sql);
$oyadata_tag = $draft_page;

unset($draft_page);

//以降の処理で汎用性を持たせるためにオブジェクトを連想配列にする
$ary_oyadata_posts = (array)$oyadata_posts;
$oya_post = $ary_oyadata_posts;
unset($oyadata_posts);

$oya_post = array_merge($oya_post , $oyadata_postmeta);
unset($oyadata_postmeta);

$ary_oyadata_category = (array)$oyadata_category;
$oya_post[‘category’] = $ary_oyadata_category;
unset($oyadata_category);

$ary_oyadata_tag = (array)$oyadata_tag;
$oya_post[‘tag’] = $ary_oyadata_tag;
unset($oyadata_tag);


//内容の確認

print_r($oya_post);

 

 

get_posts()が使えない場合とは?

同じデータベース内にあるWordPressの記事情報を取得する

第一階層でwpサイトを作ります。
第2階層で全く別の動きのwpを使いたいとします。

そこで、こんな感じの構成になって、実質3つのWorPressが動いている感じになります。

 

 

ただ、動くだけならいいのですが、
「第2階層のcookingが第一階層の記事をID指定して使いたい」
とか
「cookingがgameの内容をID指定して取得したい」
というときに、ほかの階層の
require_once(“./wp-load.php”);
を使うと正常に動作することができません。

同じデータベース内にあるWordPressの記事情報を取得するというときに、
これが結構便利になります。

 

Wp以外からの参照の場合

WordPressとEC-CUBEを同居させたりしたときなどに、SQLで読み込む際に上記SQLが使えます。

WordPress以外のphpからの場合には
$wpdb->get_results()ではなく、きちんとDBにアクセスするのが注意点です。

でも、EC-CUBEとかなら普通にrequire_once(“./wp-load.php”);できるか…

 

もしくは「require_once(“./wp-load.php”);なんて使わん!」という方や、
私みたいなゴリゴリ修正の方が得意な方だったら参考になるかと思います…

 

 

 

 

一番シンプルで最低限最小限の自作テンプレートtoo_small

WordPressの完全自作テンプレートを作るためには、
まず既存のものをいじってみる・・・とありますが
もともとついているtwentyシリーズを見ても
何の事だかさっぱりなので、
一番シンプルで最低限の機能だけを抜粋したテンプレート「too_small」を作りました。


実稼働はコチラ
https://kiraku-space.com/too_small/

テンプレートダウンロード


中身はこのようになっていますので、
WordPressのテンプレートで何がどうなっているのかをまず知りたい人にオススメです。

どうなっているかというと
TOPページの内容は

  • 写真
  • サイト名
  • 最新の記事の中身
  • 最新4記事のリンク
  • スマホとPCの判別

だけになっていて、実際に使いそうなものだけ!

内部の細かな説明はナシにして・・・

「こんな感じなんだ!」と分かるようにしています。

 

それと、記述方法ですが、もともと私が.netのプログラマで慣れているのと
こっちほうが、わかりやすいという人がいたので
echoで表示する形式をとっています。

あと、””で囲って”でタグにしてしまうのも治らないクセなので
温かい目で見守ってください…(;~;)

 

もし、WordPressテンプレートの自作を考えていて、
WordPress初心者の方は、ご参考にしてみてください・・・

ちなみに「htmlとphpはちょっと知っている」レベルで分かるような内容になっています。

 

ちなみに、どうして作ったかというと・・・(-_-)
息子(大学生・パソコン初心者)と父(70歳前後・元プログラマ)がWordpressを勉強したい!というので作ってみました。
さらに自治会の人や近所の人、同窓会で久々に会った友達、別会社の人も同じようなことを言ったのでまとめて作ってみた感じです。

WordPressに関する裏技的なノウハウなどは、また、別途お話したいと思います。