yagi-custom-wp-blog-card.php

<?php
/*
Plugin Name: 俺のブログカード
Plugin URI:
Description: 主にブログカードを作成
Version: 1.0.0
Author: yagi
Author URI: https://ansize.net/
License: GPL2
*/

function set_yobc_table() {
  global $wpdb;
  $table_name = 'yagi_out_blog_card';
  // ブログカードのプレフィックス+テーブル名
  $rtn = $wpdb->prefix . $table_name;
  return $rtn;
}
global $table_that_yagi_out_blog_card;
$table_that_yagi_out_blog_card = set_yobc_table();

require_once("out_blog_card.php");
// 管理画面でプラグインが有効化されたときに呼び出す
register_activation_hook( __FILE__, 'add_yagi_out_blog_card_cache_table' );
// 管理画面でプラグインが停止されたときに呼び出す
register_deactivation_hook( __FILE__, 'dll_yagi_out_blog_card_cache_table' );

function yagi_out_blog_card_add_init(){
  // CSS登録
  wp_register_style('oreno_bc', plugins_url('css/main.css', __FILE__));
  wp_enqueue_style('oreno_bc');
}
add_action('wp_enqueue_scripts', 'yagi_out_blog_card_add_init');


add_action( 'admin_menu', 'yagi_out_blog_card_admin_setting' );
function yagi_out_blog_card_admin_setting() {
  add_menu_page(
    '俺のブログカード', // メニューページのタイトル
    '俺のブログカード', // メニュー名
    'administrator', // メニューの権限
    'yagi_setting_blog_card', // メニューのスラッグ
    'yagi_out_blog_card_main_admin' // function コールバック関数
    //'', アイコンURL
    //'' 表示位置
  );
}

function yagi_out_blog_card_main_admin() {
  echo '<h1>ブログカードキャッシュ管理画面</h1>';
  ?>
  キャッシュの削除設定などをここで行う<br />
  テーブルをここに出力する<br />
  ページネーションができればなおよし<br />
  <?php

  echo "<h2>ワードプレス使用中php画像処理ライブラリ: ". _wp_image_editor_choose(). '</h2>';
  yagi_out_blog_card_admin_main_disp();
}

// https://propansystem.net/blog/2017/09/11/post-1022/
/**
 * メイン表示画面
 */
function yagi_out_blog_card_admin_main_disp() {
  if ( $_SERVER['REQUEST_METHOD'] === 'POST' &&
    wp_verify_nonce($_POST['yagi_blog_card_nonce'], 'yagi_blog_card-nonce') ) {

    if (isset($_POST['edit'])) {
      // 下記のような作りになっている
      // id => string '削除'
      yagi_out_blog_card_edit_db( key($_POST['edit']) );
    } elseif (isset($_POST['delete'])) {
      yagi_out_blog_card_delete_db( key($_POST['delete']) );
    }

  }
    //データ一覧
    echo <<< EOL
<form action="" method="post">

<h2>データ一覧</h2>

<div class="wrap">
<table class="wp-list-table widefat striped posts">
    <tr>
        <th nowrap>ID</th>
        <th nowrap>fav</th>
        <th nowrap>URL・タイトル</th>
        <th nowrap>アイキャッチ</th>
        <th nowrap>編集</th>
        <th nowrap>削除</th>
    </tr>
EOL;

    global $wpdb;
    global $table_that_yagi_out_blog_card;

    $tbl_name = $table_that_yagi_out_blog_card;
    $sql = "SELECT * FROM {$tbl_name} ORDER BY id;";
    $rows = $wpdb->get_results($sql);
    $yagi_blog_card_nonce = wp_create_nonce('yagi_blog_card-nonce');
    echo '<input type="hidden" name="yagi_blog_card_nonce" value="'.$yagi_blog_card_nonce.'" />';

    foreach($rows as $row) {
        echo "<tr>";
        echo "<td>" . $row->id . "</td>";
        echo '<td><img src="' . esc_attr( change_yagi_out_blog_card_db_pic($row->favicon)[0] ) . '"></td>';
        echo "<td>" . $row->time . "<br />" . $row->title . "<br />" . $row->url . "</td>";
        echo '<td><img src="' . esc_attr( change_yagi_out_blog_card_db_pic($row->pict)[0] ) . '"></td>';
        echo "<td>";
        echo "<input type='submit' name='edit[" . $row->id . "]'";
        echo " class='button-primary' value='更新' />";
        echo "</td><td>";
        echo "<input type='submit' name='delete[" . $row->id . "]'";
        echo " class='button-primary' value='削除' />";
        echo "</td>";
        echo "</tr>";
    }
    echo "</table>";
    echo "</div>";
    echo "</form>";
}

function yagi_out_blog_card_edit_db($id) {
  global $wpdb;
  global $table_that_yagi_out_blog_card;

  // idから情報を抜き出す
  $query = $wpdb->prepare("
    SELECT *
    FROM $table_that_yagi_out_blog_card
    WHERE id = %d
    LIMIT 1
  ", intval($id));
  $results = $wpdb->get_results($query);
  if (empty($results)) {
    return false;
  }
  $results = $results[0];

  // プラグインの衝突を防ぐ
  // OpenGraphクラスが定義されていない場合にのみ1回だけ読み込む
  if (!class_exists('OpenGraph')) { require_once 'OpenGraph.php'; }
  // OGP情報を取得
  $graph = OpenGraph::fetch($results->url);
  $screenShot = $graph->image ? $graph->image : 'https://s.wordpress.com/mshots/v1/'. urlencode(esc_url(rtrim( $results->url, '/' ))) .'?w='. $img_width .'&h='.$img_height.'';
  $add_img = yagi_out_blog_card_file_get_contents($screenShot);

  //ファビコンを取得(GoogleのAPIでスクレイピング)
  $host = parse_url($results->url)['host'];
  $searchFavcon = 'https://www.google.com/s2/favicons?domain='.$host;
  $favi = file_get_contents($searchFavcon);

  $wpdb->update(
    $table_that_yagi_out_blog_card,
    array(
      'time' => current_time('mysql'),
      'title' => $graph->title,
      'content' => $graph->description,
      'pict' => $add_img,
      'favicon' => $favi,
    ),
    array( 'ID' => $id )
  );
}

function yagi_out_blog_card_delete_db($id) {
  global $wpdb;
  global $table_that_yagi_out_blog_card;
  $wpdb->delete( $table_that_yagi_out_blog_card, array( 'id' => $id ), array( '%d' ) );
}

// クイックタグを挿入したい
// http://wpcj.net/1597
// https://bibabosi-rizumu.com/simplicity-customize-tags/#toc6
function yagi_out_blog_card_add_quicktags() {
  // code...
}
?>

関連記事

コメント

この記事へのコメントはありません。

TOP