WordPress

[WordPress]TransientAPI#3

    public function delete_transient($transient)
    {
        delete_transient($transient);
    }
    public function delete_all_transient()
    {
        global $wpdb;
        $sql = "DELETE FROM `{$wpdb->options}` WHERE `option_name` LIKE ('_transient_%');";
        $result = $wpdb->get_results($sql);
        $sql = "DELETE FROM `{$wpdb->options}` WHERE `option_name` LIKE ('_site_transient_%');";
        $result = $wpdb->get_results($sql);
    }

[WordPress]TransientAPI#2

public function get_transient_by_query($query)
{
    if(!$this->use_transient)
        return false;
    return $this->get_transient(md5($query));
}
public function get_transient($transient)
{
    if(!$this->use_transient)
        return false;
    return get_transient($transient);
}

[WordPress]TransientAPI#1

public function set_transient_by_query($query, $value, $expiration = -1)
{
    if(!$this->use_transient)
        return;
    $this->set_transient(md5($query),$value,$expiration);
}
public function set_transient($transient, $value, $expiration = -1)
{
    if(!$this->use_transient)
        return;
    if($expiration < 0)
        $expiration = $this->transient_expiration;
    set_transient($transient, $value, $expiration );
}

[WordPress]カスタム投稿タイプxxxx一覧にカラム追加

function add_columns_to_xxxxx( $columns )
{
    $new_columns = array();
    foreach ( $columns as $column_name => $column_display_name ) {
        if( $column_name == 'title' ) {
            $new_columns['ID'] = 'ID';
        }
        $new_columns[ $column_name ] = $column_display_name;
    }
    return $new_columns;
}
add_filter('manage_xxxxx_posts_columns' , 'add_columns_to_xxxxx');

function output_column_value_xxxxx( $column, $post_id )
{
    switch ( $column ) {
        case 'ID':
            echo $post_id;
            break;
    }
}
add_action( 'manage_xxxxx_posts_custom_column' , 'output_column_value_xxxxx', 10, 2 );

[WordPress]IDからACFProのカスタムフィールドの値を取得

$metas = $this->get_metas_by_post_id($ids, $cf_names);

public function get_metas_by_post_id($post_id, $cf_names = null)
{
    global $wpdb;
    $sql = array();
    $sql[] = "SELECT";

    $fields = array();
    $fields[] = "pm.post_id AS ID";
    $fields[] = "pm.meta_key";
    $fields[] = "pm.meta_value";
    $fields[] = "(CASE WHEN p2.guid IS NULL THEN '' ELSE p2.guid END) AS guid";
    $sql[] = implode(',', $fields);

    $sql[] = "FROM $wpdb->postmeta AS pm";

    $sql[] = "LEFT JOIN $wpdb->posts AS p ON p.ID = pm.post_id";
    $sql[] = "LEFT JOIN $wpdb->posts AS p2 ON pm.meta_value = p2.ID AND p2.post_type = 'attachment'";
    $sql[] = "WHERE pm.post_id " . $this->_get_sql_for_in($post_id, true);
    if (!empty($cf_names))
        $sql[] = "AND pm.meta_key " . $this->_get_sql_for_in($cf_names);
    $sql[] = "ORDER BY pm.post_id ASC";
    
    $result = $wpdb->get_results(implode(' ', $sql));
    $this->unserialize_by_keys($result);

    return $result;
}
public function unserialize_by_keys(&$post, $keys = null)
{
    if (is_array($post)) {
        foreach ($post AS $elm)
            $this->unserialize_by_keys($elm, $keys);
        return;
    }
    $target = !empty($keys) ? $keys : $post;
    foreach ($target as $key => $value)
        $post->$key = maybe_unserialize($post->$key);
}

[WordPress]メインクエリ停止

//メインクエリ停止
function custom_posts_request( $sql, &$query ) {
    if ( is_admin() || !$query->is_main_query() ){
        return $sql;
    }
    if ( $query->is_main_query() ) {
        /* prevent SELECT FOUND_ROWS() query*/
        $query->query_vars['no_found_rows'] = true;
        /* prevent post term and meta cache update queries */
        $query->query_vars['cache_results'] = false;
        return false;
    }
    return $sql;
}
//posts_request : post 配列を返す SQL クエリを実行する直前に、クエリ全体に対して適用される。
add_filter( 'posts_request', 'custom_posts_request', 10, 2 );

[WordPress]doing_wp_cronが付いてたらリダイレクト

define(‘ALTERNATE_WP_CRON’, true);の時に発生

if(isset($_GET['doing_wp_cron'])){
    header('Location: '.get_current_url(false,array('doing_wp_cron')));
    exit;
}
public function get_current_url($remove_get_query = false,$exclude_keys = array())
{
    $suffix = $_SERVER['REQUEST_URI'];
    if($remove_get_query){
        $tmp = explode('?',$suffix);
        $suffix = array_shift($tmp);
    }else if(!empty($exclude_keys)){
        $tmp = explode('?',$suffix);
        $suffix = array_shift($tmp);
        $get = get_get_queries($exclude_keys);
        if(!empty($get))
            $suffix .= '?' . http_build_query($get);
    }
    return get_base_url($suffix);
}
public function get_get_queries($exclude_keys = array())
{
    $result = array();
    foreach ($_GET as $key => $value){
        if(!empty($exclude_keys) && in_array($key,$exclude_keys)){
            continue;
        }
        $result[$key] = $value;
    }
    return $result;
}
public function get_base_url($suffix = '')
{
    return (empty($_SERVER["HTTPS"]) ? "http://" : "https://") . $_SERVER["HTTP_HOST"] . $suffix;
}