[wp]SCFでカスタム投稿の特定記事を指定対象にしたかった

できたのができなくなってるらしい。
頑張ったけどダメだった。

当記事について

頑張ったけど無理だった。
これを読んでも何も解決しない。

どういうことか

SmartCustomFieldsは「表示条件(投稿)」セクションでその対象に投稿タイプを指定したり、特定の投稿・記事ページを指定することができる。

カスタム投稿も対象にできる。

だから、カスタム投稿で作成した記事ページを指定したい。

できるはずなんだけど、できない。

ポストIDはサジェストに挙げられたもの以外は弾かれるから、直接入力することができない。

プラグインを改造するしかないっぽい

対象が絞られてるお陰で出てこないんですね。

まあ分かるけど。

作り込んだらページ数はとんでもないことになるから、つまりサジェストがヤバいことになる。
それによりぶっ壊れる例とかあったんだろうか、思いつくのはそういうところか。

で、改造するわけだけど。

Smart Custom Fieldsの表示条件にカスタム投稿タイプの投稿IDを表示させる方法 – WordPress開発・WEBコーディングのことならFixCode
Smart Custom Fieldsプラグインのフィールド編集画面で表示条件の入力候補にカスタム投稿タイプの投稿IDを表示させる方法をご紹介します。 お気に入りのプラグインのひとつである「Smart Custom Fi…

バージョンが変わってもやることは同じだった。

この記事が無くなったら詰むので、当記事でも書いておく。

バージョン:Smart Custom Fields 5.0.7
対象:/wp-content/plugins/smart-custom-fields/classes/class.rest-api.php

44行目からこんな感じになってる。

	/**
	 * Get all posts and pages
	 */
	public function get_all_posts() {
		$all_posts = get_posts(
			array(
				'post_type'      => $this->get_post_type(),
				'post_status'    => 'publish',
				'orderby'        => 'date',
				'order'          => 'ASC',
				'posts_per_page' => -1, // all posts
			)
		);

		if ( $all_posts ) {
			$source = array();

			foreach ( $all_posts as $k => $post ) {
				$source[ $k ]['id']   = $post->ID;
				$source[ $k ]['text'] = $post->ID . ' - ' . $post->post_title;
			}
		}

		return $source;
	}

これをこうする。

	/**
	 * Get all posts and pages
	 */
	public function get_all_posts() {
        $args = array(
            'public'   => true,
            '_builtin' => false
        );
        $custom_post_types = get_post_types( $args, 'names', 'and' );
        $post_types = array_merge($custom_post_types, array( 'post', 'page' ));

		$all_posts = get_posts(
			array(
				'post_type'      => $post_types,
				'post_status'    => 'publish',
				'orderby'        => 'date',
				'order'          => 'ASC',
				'posts_per_page' => -1, // all posts
			)
		);

		if ( $all_posts ) {
			$source = array();

			foreach ( $all_posts as $k => $post ) {
				$source[ $k ]['id']   = $post->ID;
				$source[ $k ]['text'] = $post->ID . ' - ' . $post->post_title;
			}
		}

		return $source;
	}

ハイライト部分が追記・編集箇所。

編集したファイルを上書きすれば「表示条件(投稿)」の「投稿 / 固定ページの ID」でカスタム投稿の各記事が表示されるようになった。

よかったですね。

更新したら詰み

プラグインを直接編集してるから、プラグインを更新した際に該当ファイルが上書きされる可能性は十分にある。

編集部位が無くなっても、既に登録したところに影響しないのは救い。

しかしまた編集しなければいけない。

だるい。

改造したんだけど使えない

プラグインを直接改造することで、カスタム投稿のページ単体をSCF上で選択できるようになった。

でも、該当記事上にSCFが表示されない。

カスタム投稿全体を対象にすれば表示される。
記事単体だと表示されない。

非表示になってるんじゃなくて、そもそも存在しない。
設定自体が存在するのなら、表示させる方法を探せば良いんでしょうね。

もうだめだ。

疲れた。

乗り換えが良くないか

「Secure Custom Fields」というものがあるらしい。

Secure Custom Fields
Secure Custom Fields では、カスタムフィールドとオプションを使用してより柔軟なコンテンツ管理を実現できます。コードが重複してエラーが発生するのを防ぐため、Advanced Custom Fields を無効化します。

WP本家がACFとなんやかんやして生まれたらしい。

無料で繰り返しフィールドが使えるのでACFより魅力的。

Smart Custom Fieldsと略称が同じなのがあれだけど、まあ、しょうがないか。

既存サイトで乗り換えるとなると非常にめんどくさいので、併用してもなんかなーって気持ちがあるので、新規サイトで使うのが良さげな気がする。

コメント

タイトルとURLをコピーしました