かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

WordPress カスタム投稿タイプのslug (URI)から投稿IDを取得したい

slug名から投稿を取得するには get_page_by_path を使う

get_page_by_path( string $page_path, string $output = OBJECT, string|array $post_type = 'page' )
出典: get_page_by_path() | Function | WordPress Developer Resources

<?php
$post = get_page_by_path('{slug}', 'OBJECT', $post_type);
$postID = $post->ID;
echo $postID;

カスタム投稿タイプで取得するには第三引数にpost_typeを渡す必要があるので、第二引数にはデフォルト値のOBJECTを指定してオブジェクト形式で取得するのが楽。
第二引数でARRAY_Nとか指定したら別の形式にも出来るっぽいけど使い方が所がイマイチ分からん…

post オブジェクトからslug名を取得する

<?php
$slug = $post->post_name;

おまけ タクソノミー (分類 e.g. タグ・カテゴリー) Term(タグ名・カテゴリー名)ののSulg名からtermを取得する方法

term_slugからもtermアーカイブのURL取得できるget_term_linkのコードを見ていたら、内部でslug名のときはget_term_byを使っていたので、これを使えばterm_slugからtermオブジェクトを取得できる事を知りました。

get_term_by( string $field, string|int $value, string $taxonomy = '', string $output = OBJECT, string $filter = 'raw' )
出典: get_term_by() | Function | WordPress Developer Resources

<?php
$term = get_term_by('slug', '{term_slug}', $taxonomy);
var_dump($term);

 
内部的にSQL発行してそうだし、パフォーマンス面からもこういうのあまり多用しなくて済む設計にしておきたい。


[参考]

WordPress 管理画面の固定バー(Admin bar)にカスタムボタンを設置したい

WordPress管理画面の上部にあるAdmin barにカスタムボタンを設置する方法のメモ

functions.php

<?php
add_action('admin_bar_menu', 'my_custom_admin_bar_button', 100);
function my_custom_admin_bar_button($wp_admin_bar) {
  $args = [
    'id'    => 'my_custom_button',
    'title' => '表示される文字',
    'href'  => '#',
    'meta'  => [
      'class' => ''
    ],
  ];
  $wp_admin_bar->add_node($args);
}

これでAdmin barにカスタムボタンが設置できました。
実際に表示されるボタンのIDはwp-admin-bar-というprefixが付くので#wp-admin-bar-<idに渡した値>という感じになります。

ボタンの表示される位置はadd_actionの第三引数の数字で設定します。(カスタム投稿を追加する時のメニュー位置と同じ要領)

  • wp_admin_bar_wp_menu – 10
  • wp_admin_bar_my_sites_menu – 20
  • wp_admin_bar_site_menu – 30
  • wp_admin_bar_updates_menu – 40
  • wp_admin_bar_comments_menu – 60
  • wp_admin_bar_new_content_menu – 70
  • wp_admin_bar_edit_menu – 80

$wp_admin_bar->remove_node( $id )を使えばもともと表示されているメニューを消すことも出来る。
cf. Function Reference/remove node « WordPress Codex

表側のサイトでAdmin barを表示させなくする方法

表側のサイトでログインしててもAdmin barを表示しない方法。
functions.phpに下記を追加

functions.php

<?php
add_filter( 'show_admin_bar', '__return_false' );

 
WordPress触ってないとすぐ忘れる。


[参考]

PHP マークダウン変換できるライブラリParsedown使ってみた。

WordPressのカスタムフィールドで作っていたテキストエリアで部分的にボールドにしたいという要望がありました。
運用してる人的にHTML書いてくださいってのはハードル高そうだし、カスタムフィールドをWYSIWYGにするのは工数もかかるし自由に出来すぎるとwordみたいに超でかい文字とか原色みたいな色とかデザインルールに沿わないカオスが生まれそうなので避けたい。

ということで、マークダウン記法で変換させることにしました。
今回は手っ取り早くマークダウン変換できるライブラリを導入して対応することにしました。

Parsedown

composerでインストールでき、高速であるという事で、今回のようなシンプルな要件には良さそうだなと思いParsedownを使うことにしました。

インストール

composerでインストールします

$ composer require erusev/parsedown

WordPressから使う

テーマのfunction.phpに読み込ませます。

<?php // function.php
// パスは適時変更してください
require_once(__ROOT__ . '../vendor/autoload.php');

カスタムフィールドのテキストのマークダウンをHTML変換

<?php // function.php
function get_custom_field_text($postID, $metaKey) {
  $Parsedown = new Parsedown();
  // textareaの改行はそのまま改行にする
  $text = nl2br(esc_html( get_post_meta($postID, $metaKey, true) ));
  // Parsedown->lineでインライン要素のマークダウンをHTML化
  $text = $Parsedown->line($text);
  return $text;
}

はい。簡単にマークダウンが使えるテキストエリアのカスタムフィールドができあがりました!!
今回使ったParsedownはline()メソッドを使えばブロック要素は無視してインライン要素だけマークダウン形式から変換できる様だったので機能を絞る意味でもマッチしていました。
表示速度に関しては、カスタムフィールドたくさん使っている箇所は予めキャッシュ化するようにしていたので分からないですが、簡単に導入して使えるのでとても良いライブラリだと思いました。
また、GitHubでコードを見るとライブラリ自体1つのPHPファイルでとてもシンプルなのでマークダウンの正規表現とかの勉強にもなりそうです!

運用者には「ボールドにしたい箇所を2重のアスタリスク**で囲ってください。例 **ボールドにしたい文字**という感じで伝えました。
偶然マークダウン記法になって事故が起こる可能性は無きにしもあらず…なので
将来的には使用可能な記法を絞れるように、時間あるときにでもライブラリを読んで機能制限できるようにしてみようかなーとか考え中。

ホント、マークダウンのメリットってWordやWYSIWYGみたいに書く人によって文字がめっちゃデカくなったり、自由に色選べるから好き勝手な文字色や背景色で強調されたり、ティラノサウルスの3Dデータをぶっこまれたりしない。
決まったデザイントーンに則った表示になり文章のアウトラインが解りやすくなる。これに尽きると思うんです。
googleドライブで使える文章…ぜひマークダウンのドキュメントもプラグイン無しで作れるようにして欲しい… (もうあります?


[参考]