WordPressのプラグインphp-compatibility-checker自身がPHP8.29(確認バージョン)に対応していない…
カテゴリー: WordPress
Advanced Custom Fields(ACF)画像表示
Advanced Custom Fields(ACF)画像をwidthとheightを入れて表示したい。
<?php
// ACFカスタムフィールドから画像のURLを取得
$image_url = get_field('フィールド名', 投稿ID);
// 画像のIDを取得
$image_id = attachment_url_to_postid($image_url);
// 画像の情報を取得 (配列で返される)
$image_info = wp_get_attachment_image_src($image_id, 'full'); // 'full'はフルサイズの画像情報を取得する指定です。
// widthとheightを取得
$width = $image_info[1];
$height = $image_info[2];
?>
<!-- HTMLとして出力 -->
<img src="<?php echo esc_url($image_url); ?>" width="<?php echo esc_attr($width); ?>" height="<?php echo esc_attr($height); ?>" alt=""/>
アイキャッチにwidthとheight属性を明示したい
<?php
// アイキャッチ画像のIDを取得
$image_id = get_post_thumbnail_id();
// アイキャッチ画像の情報を取得 (配列で返される)
$image_info = wp_get_attachment_image_src($image_id, 'square_s');
// widthとheightを取得
$width = $image_info[1];
$height = $image_info[2];
// アイキャッチ画像を出力
the_post_thumbnail('square_s', array( 'width' => $width, 'height' => $height ));
?>
または、wp_get_attachment_image_attributesフィルターを使用して、すべてのフィーチャードイメージに自動でwidthとheightを追加することもできます。
下のコードをテーマのfunctions.phpファイルに追加すると、すべてのアイキャッチ画像にwidthとheight属性が自動で追加されます。
function add_image_size_attributes( $attr, $attachment, $size ) {
if ( is_array($size) ) {
$width = $size[0];
$height = $size[1];
} else {
$_size = wp_get_attachment_image_src( $attachment->ID, $size );
$width = $_size[1];
$height = $_size[2];
}
$attr['width'] = $width;
$attr['height'] = $height;
return $attr;
}
add_filter( 'wp_get_attachment_image_attributes', 'add_image_size_attributes', 10, 3 );
【MW WP Form】ファイルアップロードに伴う諸々
確認画面でのファイルへのリンク
MW WP Form(ver4.4.5)でファイルをアップロードする際、確認画面でファイルへのリンクが貼られずファイル名の表示のみになっている。
→ver4.4.2にダウングレードするとファイルへのリンク仕様に戻る。
ver4.4.3以降ファイルにリンクされる仕様がなくなっているが、これはバグなのか仕様変更なのか気になるところ。
ログイン/ログアウト後のリダイレクト【WordPress】
// ログイン後元のページにリダイレクト functions.php
function my_login_redirect( $redirect_to, $request ) {
if ( empty($request)) {
$redirect_to = home_url('');
}
return $redirect_to;
}
add_filter( 'login_redirect', 'my_login_redirect', 10, 3 );
// ログイン後元のページにリダイレクト <a href="<?php echo wp_login_url( $_SERVER['REQUEST_URI'] ); ?>">会員ログイン</a>
// ログアウト後元のページにリダイレクト <a href="<?php echo wp_logout_url($_SERVER['REQUEST_URI'] ); ?>">ログアウト</a>
ログイン・ログアウトの切替リンク【WordPress】
<?php if(!is_user_logged_in()) { ?>
<a href="<?php bloginfo('url'); ?>/wp-login.php">ログイン</a>
<?php } else { ?>
<a href="<?php echo wp_logout_url(get_permalink()); ?>">ログアウト</a>
<?php } ?>
ユーザー一覧ページのカスタマイズ【WordPress】
WPダッシュボードのユーザー一覧ページを下記の通りカスタマイズした時のメモ。
- WP上で自動に付けられるユーザーIDを表示させたい
- ニックネームを表示させたい
- 氏名は不要
function add_users_columns( $columns ) {
$columns['ID'] = 'ID';
$columns['columns_nickname'] = 'ニックネーム';
unset($columns['name']);
$sort_number = array(
'ID' => 0,
'username' => 1, //ユーザー名
'columns_nickname' => 2, //ニックネーム
'email' => 3, //メールアドレス
'role' => 4, //権限グループ
'posts' => 5 //投稿
);
$sort = array();
foreach($columns as $key => $value){
$sort[] = $sort_number{$key};
}
array_multisort($sort,$columns);
return $columns;
}
function add_users_custom_column( $dummy, $column, $user_id ) {
if ( $column == 'ID' ) {
$user_info = get_userdata($user_id);
return $user_info->ID;
}
if ( $column == 'columns_nickname' ) {
$user_info = get_userdata($user_id);
return $user_info->nickname;
}
}
add_filter( 'manage_users_columns', 'add_users_columns' );
add_filter( 'manage_users_custom_column', 'add_users_custom_column', 10, 3 );
購読者がログインしたらダッシュボードではなく指定ページに飛ぶようにする【WordPress】
add_action('wp_login', 'redirect_roll', 10, 2);
function redirect_roll($user_login, $user){
if( $user->roles[0] == 'subscriber' ){ // 購読者
wp_redirect( 'リダイレクトさせたいURL' );
exit();
}
}
カスタム投稿タイプの追加・ユーザー登録すると自動的にユーザー専用の非公開ページとリンクが作成される【WordPress】
メンバーを追加したら自動でそのメンバー専用ページ(カスタム投稿)が作られるようにした時のメモ。
STEP1:まずはカスタム投稿タイプを設定する。(function.php)
add_action( 'init', 'create_post_type' );
function create_post_type() {
register_post_type( 'member', // 投稿タイプ名の定義
array(
'labels' => array(
'name' => __( '会員' ), // 表示する投稿タイプ名
'singular_name' => __( '会員' )
),
'public' => true,
'show_in_rest' => true, // Gutenbergを有効にする
'menu_position' =>5,
'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'custom-fields' ,'comments' ),
)
);
STEP2:ユーザー登録すると自動的に非公開ページが作成される(function.php)
function create_user_page ( $user_id ) {
$user_info = get_userdata($user_id);
$user_name = $user_info->user_login;
$new_page = array(
'post_type' => 'member',
'post_title' => $user_name,
'post_name' => $user_name,
'post_status' => 'private', // ページは非公開にする
'post_author' => $user_id,
);
wp_insert_post($new_page);
}
add_action('user_register', 'create_user_page' );
STEP3:そのページに自動的にリンクが貼られる(任意のテンプレート)
<a href="/member/<?php $user = wp_get_current_user();
echo $user->get('user_login'); ?>/">リンクテキスト</a>
投稿欄のフォーマットから「見出し1」と「整形済みテキスト」を削除【WordPress】
投稿欄のフォーマットから「見出し1」と「整形済みテキスト」を削除
function custom_editor_settings( $initArray ){
$initArray['block_formats'] = "見出し2=h2;見出し3=h3;見出し4=h4;見出し5=h5;見出し6=h6;段落=p;";
return $initArray;
}
add_filter( 'tiny_mce_before_init', 'custom_editor_settings' );
Googleアドセンスの広告をボタン1つで記事内に設置できるようにする(プラグイン無し)【WordPress】
アドセンスの広告を記事内に自由に簡単に設置できるようにするためのコード。
functions.phpファイルに下記を追加。
まずはショートコードを作成
<?php
//ショートコード
function adsdisplay_shortcode( $atts ) {
return 'ここにアドセンスの広告コードを貼る';
}
add_shortcode( 'ads_displayA', 'adsdisplay_shortcode' );
?>
クイックタグを設置
<?php
//投稿クイックタグ
function add_qtag() {
if (wp_script_is('quicktags')){
?>
<script type="text/javascript">
QTags.addButton('adsdisplay','ディスプレイ広告1','[ads_displayA][/ads_displayA]','','','adsenseディスプレイ広告挿入',1);
</script>
<?php
}
}
add_action('admin_print_footer_scripts','add_qtag');
?>
タグに紐付けされた投稿の呼び出し:1件目は最新記事、2件目以降はランダムに表示【WordPress】
タグに紐付けされた記事の呼び出しで、1件目は最新記事を取得し、2件目以降はランダムに表示させたいというリクエストがあった時の覚書。
<?php $my_query = new WP_Query( 'category_name=カテゴリー&tag=タグ&posts_per_page=1' ); //指定タグの最新記事1件表示
while ( $my_query->have_posts() ) : $my_query->the_post();
$do_not_duplicate[] = $post->ID; ?>
<?php get_template_part('呼び出すテンプレート'); ?> //処理
<?php endwhile; ?>
<?php $args = array('post__not_in' => $do_not_duplicate, //指定タグに属する記事4件表示 (最新記事1件に表示されている記事は除く)
'category_name' => 'カテゴリー',
'tag' => 'タグ',
'orderby' => 'rand',
'posts_per_page' => 4,
);
$my_query = new WP_Query( $args );?>
<?php if ( have_posts() ) : while ( $my_query->have_posts() ) : $my_query->the_post();
$do_not_duplicate[] = $post->ID;?>
<?php get_template_part('呼び出すテンプレート'); ?> //処理
<?php endwhile; endif; ?>
<?php wp_reset_postdata(); ?>