WordPress 時限公開記事・固定ページでプラグインなし

wordpress

  1. ウイジェットにphp使いたい
    function.phpに追記でtextタイプのみ使えるようになる(ショートコード)
  2. 固定ページでその位置に記事を掲載と非掲載を別ファイルで管理したい
    同じくfunction.phpに追記で管理可能に
  3. この2つを連携させて且つ時限公開・非公開をしたい

という要望に答えるために
年末や正月には特に欲しい機能だと思いますが 
予約投稿は出来ても予約非表示(削除)が出来ないので時間が来ると消えればいい
display:block でもなんでも事が成せばいいがプラグインは面倒だしってことで
探してきましたらありました ありがたいです

ウィジェットにphp

これについては使わせてもらっているテーマ作者殿が出していたコードを拝借します

add_filter( 'widget_text', function( $ret ) {
$php_file = 'top-info';

if( strpos( $ret, '[' . $php_file . ']' ) !== false ) {
add_shortcode( $php_file, function() use ( $php_file ) {
get_template_part( $php_file );
});

ob_start();
do_shortcode( '[' . $php_file . ']' );
$ret = ob_get_clean();
}

 return $ret;
}, 99 );

上記をfunction.phpに追記で同じ階層に2行目のphpファイル名のphpファイルを作成する
ここではtop-info.phpになります
テキストウイジェットには[top-info]で 上で作ったphpの内容が表示される

投稿・固定ページの出入りを管理する

先の作成したphpにこの管理用のコードを入れて連携させる
事ができれば半分は達成できる
下のコードはfunction.phpに追記

function page_content_e( $page_path, $post_type = 'page' ) {
	$page = get_page_by_path( $page_path, OBJECT, $post_type );
	if ( $page && $page->post_status == 'publish' ) {
		echo apply_filters( 'the_content', $page->post_content );
	}
}

あとは表示したいところテンプレートかphpが入るところに

<?php page_content_e( \’入れたいページのスラッグを\’); ?>
を入れると表示される
2つ有れば隣に追加するなり2行にするなりと
スラッグ変更かこのファイルを編集すると出し入れが出来る

時限のためのコードとショートコード

<?php
/**
 * @package datecontent_shortcode
 * @version 1.0
 */
/*
Plugin Name: 指定日時によって内容を表示するショートコード
Plugin URI: https://gist.github.com/2817701
Description: WordPressの本文の内容を指定日時によって表示するショートコード。使い方は 指定日時で表示する内容 です。opendate で表示の開始日時、closedate で表示の終了日時をYmdHiの形式で指定します。
Author: gatespace
Version: 1.0
Author URI: http://gatespace.wordpress.com/
*/
// 
function datecontent_func($atts, $content = null) {
	extract(shortcode_atts(array(
		'opendate'  => null,
		'closedate' => null,
	), $atts));
	/**
	 * $opendate, $closedateの値をチェック(8〜12桁の数字)し
	 * 正しい年月日、時刻かチェックしてUnixのタイムスタンプに
	*/
	$dates = array( "opendate" => $opendate, "closedate" => $closedate );
	foreach ($dates as $key => $val) {
		// 8〜12桁の数字の数字で入力されているかどうかチェック
		if ( (!preg_match("/^[0-9]{8,12}$/", $val)) or ($val === null) ) {
			$dates[$key] = null;
			continue;
		} else {
			// 正しい日付かどうかチェック(違うときはnullで終了)
			$dates_Y = substr($val, 0, 4);
			$dates_M = substr($val, 4, 2);
			$dates_D = substr($val, 6, 2);
			if (!checkdate($dates_M, $dates_D, $dates_Y )) {
				$dates[$key] = null;
				continue;
			}
			// 正しい時刻かどうかチェック(違うときは00:00)
			$dates_H = ( substr($val, 8, 2) && preg_match("/(0|1)[0-9]|2[0-3]/", substr($val, 8, 2) )) ? substr($val, 8, 2) : "00";
			$dates_I = ( substr($val, 10, 2) && preg_match("/[0-5][0-9]/", substr($val, 10, 2) )) ? substr($val, 10, 2) : "00";
			// mktimeでUnixのタイムスタンプに
			$dates[$key] = mktime($dates_H, $dates_I, 0, $dates_M, $dates_D, $dates_Y);
		}
	}
	$nowdate = date_i18n('U'); // 現在の時間を取得しUnixのタイムスタンプに
	if ( ($dates["opendate"] === null) && ($dates["closedate"] === null)) {
		return $content;
	} elseif ($dates["closedate"] === null) {
		if ($nowdate >= $dates["opendate"]) {
			return $content;
		}
	} elseif ($dates["opendate"] === null) {
		if ($nowdate < $dates["closedate"]) {
			return $content;
		}
	} else {
		if ( ($nowdate >= $dates["opendate"]) && ($nowdate < $dates["closedate"]) ) {
			return $content;
		}
	}
}
add_shortcode('datecontent', 'datecontent_func');
$content = do_shortcode($content);
便利にショートコードが使えるので123を連携させて固定ページに追記して
年末の記事と新年の記事を出し入れ出来ているはずなので
一応テストではリロード必要ですが確認に出来ました
2はいらないんじゃね?ってのもそうなんですが
別でも使う予定があるので必要になるはずですたぶん
画像が何故か出ないと思いましたがウィジェットがテキストですもんね

 

wordpress

Posted by taco