wordpress」カテゴリーアーカイブ

マルチサイトを引っ越す(複製する)時のポイント!

接頭辞は合わせる!
下記を新しいURLに変更する!

  • wp_options
    • home
    • site_url
  • wp_blogs
    • domain
    • path
  • wp_site
    • domain
    • path
  • wp_sitemeta
    • siteurl
  • 各子サイトのwp_options
    • home
    • site_url

購読者(Subscriber)に非公開投稿・固定ページを閲覧させる方法

本来、WordPressの非公開設定中の投稿・固定ページは管理者・編集者のみが閲覧可能で、購読者には権限が与えられていません。
そのため、購読者に非公開ページを閲覧させたい・・・という場合に有効な方法になります。

ざっくりやることとしては、プラグインを自作してそれのオンオフで権限の付与・解除を行います。
今回はこういう感じでプラグインを作っています。

  1. Readable-Subscriberという名前でフォルダを作る
  2. Readable-Subscriber.phpというファイルを作る
  3. 2.で作ったファイルにあとで記すコードを記載
  4. wp-content/plugins/の中に1.のフォルダをアップロード
  5. ダッシュボードでプラグイン有効化

<コード>

※固定ページを閲覧させたい場合・・・read_private_pages
※投稿を閲覧させたい場合・・・read_private_posts

<?php
/*
Plugin Name: Readable Subscriber
Version: 0.0.1
*/

/**
* ReadableSubscriber : プラグイン有効時、非公開記事 ( private posts ) を購読者 ( subscriber ) でも閲覧可能にする。無効時、その権限を削除する
*/
class ReadableSubscriber
{
protected $role = 'subscriber';
protected $privilege = 'read_private_posts';

/**
* __construct : コンストラクタ。プラグイン有効時・無効時をトリガーにして対応するメソッドを呼ぶ
*
*/
public function __construct() {
// 有効化の際に発動
register_activation_hook(
__FILE__,
[
$this,
'addReadPrivilege',
]
);
// 無効化の際に発動
register_deactivation_hook(
__FILE__,
[
$this,
'removeReadPrivilege',
]
);
}

/**
* addReadPrivilege : 購読者にも非公開記事を閲覧する権限を付与
*
*/
public function addReadPrivilege ()
{
$subscriber = get_role( $this->role );
$subscriber->add_cap( $this->privilege );
}
/**
* removeReadPrivilege : 購読者から非公開記事を閲覧する権限を剥奪
*
*/
public function removeReadPrivilege ()
{
$subscriber = get_role( $this->role );
$subscriber->remove_cap( $this->privilege );
}
}

// instantiate
$ReadableSubscriber = new ReadableSubscriber();

 

WordPressの下層ディレクトリに静的ページを設置したいとき

覚書

こういうときは大体親固定ページにindex.phpを置いて、下記を記述する

require( dirname( __FILE__ ) . '/../wp-blog-header.php' );

ドメイン/固定ページ名①/固定ページ②/静的サイト.htmlにしたいとき、固定ページ②がうまく表示されない時にはWordPressで使用してるテーマのfunction.phpに下記を記述する

remove_filter('template_redirect', 'redirect_canonical');

WPのposts/カテゴリ/メニューなどのコンテンツだけをDBテーブル移行する

サイトAの

  • 固定ページ
  • 投稿
  • カテゴリー
  • メニュー設定など

をサイトBに複製(上書き)したいとします。

下記の項目テーブルをまずダンプします。(編集するので圧縮しない方が後々楽)
DROP TABLE / VIEW / PROCEDURE / FUNCTION / EVENT を追加
IF NOT EXISTS を追加
を忘れずに。

  • wp_postmeta
  • wp_posts
  • wp_termmeta
  • wp_terms
  • wp_term_relationships
  • wp_term_taxonomy

そしたら、落としたSQLの「wp_3_postmeta」などの「wp_3_」の部分を複製先の接頭辞に置換します。

これで、インポートすれば見事にメインコンテンツだけ複製できます!

管理画面のカスタム投稿タイプ一覧画面での列追加と順番変更

列追加(この場合はカテゴリー)
これで、カテゴリ―絞り込み機能まで追加できます。

function my_manage_posts_columns_★タクソノミー名★($columns) {
$columns['★タクソノミー名★'] = "カテゴリー";
return $columns;
}
function my_add_column_★タクソノミー名★($column_name, $post_id) {
if( $column_name == '★タクソノミー名★' ) {
$tax = wp_get_object_terms($post_id, '★タクソノミー名★');
$stitle = $tax[0]->name;
}

if ( isset($stitle) && $stitle ) {
echo esc_attr($stitle);
}
}
function my_add_post_taxonomy_restrict_filter() {
global $post_type;
if ( '★カスタム投稿タイプ名★' == $post_type ) {
?>
<select name="★タクソノミー名★">
<option value="">すべてのカテゴリ―</option>
<?php
$terms = get_terms('★タクソノミー名★');
foreach ($terms as $term) { ?>
<option value="<?php echo $term->slug; ?>" <?php if ( $_GET['★タクソノミー名★'] == $term->slug ) { print 'selected'; } ?>><?php echo $term->name; ?></option>
<?php
}
?>
</select>
<?php
}
}
add_filter( 'manage_edit-★カスタム投稿タイプ名★_columns', 'my_manage_posts_columns_★タクソノミー名★' );
add_action( 'manage_★カスタム投稿タイプ名★_posts_custom_column', 'my_add_column_★タクソノミー名★', 10, 2 );
add_action( 'restrict_manage_posts', 'my_add_post_taxonomy_restrict_filter' );

列の順番変更

function sort_custom_columns( $columns ) {
$columns = array(
'cb' => '',
'title' => 'タイトル',
'★タクソノミー名★' => 'カテゴリー',
'author' => '作成者',
'date' => '日付'
);
return $columns;
}
add_filter( 'manage_★カスタム投稿タイプ名★_posts_columns', 'sort_custom_columns' );

カスタムタクソノミーの追加

カスタムタクソノミー(カスタム投稿タイプへのカテゴリ―追加)について。
下記の記述で行えます。
これは、カスタム投稿タイプを追加したfunction記述に内包しましょう。

‘case_cat’:タクソノミーのスラッグ
‘case’:タクソノミーを追加したいカスタム投稿タイプのスラッグ
‘label’,’singular_label’:管理画面の左メニューに出る表示
‘rewrite’:タクソノミーのタームに属する記事一覧をどういうURLで出したいか(アーカイブ?

あとはその時々で調査したい。

register_taxonomy(
'case_cat',
'case',
array(
'hierarchical' => true,
'label' => '事例カテゴリー',
'show_ui' => true,
'query_var' => true,
'rewrite' => true,
'singular_label' => '事例のカテゴリー',
'rewrite' => array('slug' => 'case-study','hierarchical' => true)
)
);

特定タームの時に行う処理

カスタム投稿タイプのカスタムタクソノミーにて、特定のタームの時に行いたい処理について。
例えば、ターム別にカスタム投稿一覧のアイキャッチを変えたいなど。

基本はこれです。is_termとかも検索ヒットしましたが、うまくいきませんでした。has_termです。

if( has_term( 'ターム', 'タクソノミ' ) ){
'特定のタームを持つ場合の処理';
}

アイキャッチをターム別に変えたいとき。

<?php if (has_post_thumbnail()): ?>
<?php the_post_thumbnail( array(270,170) ); ?> //アイキャッチ指定時の画像
<?php elseif(has_term("aras_inno","case_cat")): ?><img src="<?php echo home_url(); ?>/images/service/img_aras.png" width="270" height="170"/>
<?php elseif(has_term("ms_azure","case_cat")): ?><img src="<?php echo home_url(); ?>/images/service/img_azure.png" width="270" height="170"/>
<?php elseif(has_term("ms_pp","case_cat")): ?><img src="<?php echo home_url(); ?>/images/service/img_mpp.png" width="270" height="170"/>
<?php elseif(has_term("idem","case_cat")): ?><img src="<?php echo home_url(); ?>/images/service/img_idempiere.png" width="270" height="170"/>
<?php elseif(has_term("holo","case_cat")): ?><img src="<?php echo home_url(); ?>/images/service/img_hololens.png" width="270" height="170"/>
<?php elseif(has_term("open","case_cat")): ?><img src="<?php echo home_url(); ?>/images/service/img_openid.png" width="270" height="170"/>
<?php else: ?><img src="<?php echo home_url(); ?>/images/common/no_image_s.png" width="270" height="170"/>
<?php endif; ?>

カスタム投稿タイプのURLを動的にする

カスタム投稿タイプのURLリライトに関連して、カスタム投稿タイプのURLを動的にしたいときのやり方です。
プラグインを使用します。

Custom Post Type Permalinks

URLを、https://ドメイン/news_list/news/ターム名/カスタム投稿タイプ個別記事スラッグ/にしたいですよね。

こういう時は、このプラグインを有効化して、設定>パーマリンク設定 からページの下部に行くと、追加したカスタム投稿タイプのパーマリンク設定欄が出てくるので、ここで「/%case_cat%/%postname%/」を追加してあげれば問題ないです。%case_cat%は、カスタムタクソノミー名です。

パーマリンクの書き換えをなるべくせずに終わる案件でありたいですよね。

カスタム投稿の記事ページを固定ページの子ページとして設定したい

例えば、固定ページ「news_list」の下層(子ページ)として、カスタム投稿タイプの記事ページ(/news20210425/)を設定したいとき多いと思います。

https://www.***.com/news_list/news20210425/のような感じです。

こういう場合、カスタム投稿タイプを追加した記述に、下記のrewriteを追加します。

register_post_type( 'news', /* post-type */
array(
'labels' => array(
'name' => '更新情報',

//省略

),

//省略

'rewrite' => array('slug' => 'news_list/news','with_front' => false)
)
);

ポイントは、

'rewrite' => array('slug' => 'news_list/news','with_front' => false)

ですが、これでは「https://www.***.com/news_list/news/news20210425/」になってしまうでは?という感じですが、これは仕方がないのです・・・
ゼロから私が構築していない(他社が作成した)サイトでやったので分からないのですが、’news_list’だけにするとURL形式は正しくなるのですがリライトされたURLに対してWordPressが混乱するのか、news_listページ用の固定ページテンプレートがindex.phpが当たってしまい、うまくいかなかったです。
index.phpの中で、

if(is_page('news_list')

で表示するテンプレートを切り替えても良かったのですが、基本的に不安定な動きなのでやめました。
これ、自分でゼロから作ったサイトでいつか検証してみたいです。

カスタム投稿タイプを複数追加するとき

ちょっとクセがあるカスタム投稿タイプについてです。
カスタム投稿タイプを一つ追加するときは下記で大丈夫なのですが・・・

add_action( 'init', 'create_post_type' );
function create_post_type() {
register_post_type( 'news',//カスタム投稿タイプのスラッグ
array(
'labels' => array(
'name' => __( '更新情報' ),//管理画面での表示
'singular_name' => __( '更新情報' )//同じ
),
'public' => true,
'menu_position' =>5,
)
);
}

複数載せるときのコツ

//カスタム投稿タイプの追加
add_action( 'init', 'create_post_type' );
function create_post_type() {

//カスタム投稿タイプ1(ここから)
register_post_type(
'custom1',
array(
'labels' => array(
'name' => __( 'カスタム投稿タイプ1' ),
'singular_name' => __( 'カスタム投稿タイプ1' )
),
'public' => true,
'menu_position' =>5,
)
);
//カスタム投稿タイプ1(ここまで)

//カスタム投稿タイプ2(ここから)
register_post_type(
'custom2',
array(
'labels' => array(
'name' => __( 'カスタム投稿タイプ2' ),
'singular_name' => __( 'カスタム投稿タイプ2' )
),
'public' => true,
'menu_position' =>5,
)
);
//カスタム投稿タイプ2(ここまで)

}

下の箇所を増やせば増やすほど増えます。

register_post_type(
'custom1',
array(
'labels' => array(
'name' => __( 'カスタム投稿タイプ1' ),
'singular_name' => __( 'カスタム投稿タイプ1' )
),
'public' => true,
'menu_position' =>5,
)
);