Включаем автоформатирование только для постов
Первым делом отключаем его для всех:
remove_filter( 'the_content', 'wpautop' );
а ниже добавляем такую функцию:
function my_the_content_filter($content) { global $post; if($post->post_type === 'post') $content = wpautop($content); return $content; } add_filter( 'the_content', 'my_the_content_filter' );
Используем встроенный CRON для автопостинга в twitter
function run_every_180_minutes() { $today = date("Y-m-d H:i:s"); require_once '.../twitter/send.php'; file_put_contents('.../twitter/logs.txt', $today." - ".$song."\n", FILE_APPEND | LOCK_EX); } if ( ! get_transient( 'every_180_minutes' ) ) { set_transient( 'every_180_minutes', true, 180 * MINUTE_IN_SECONDS ); run_every_180_minutes(); }
Шорткод на вывод RSS-ленты в виде списка
function rsstag($atts) { $i=0; $rss = simplexml_load_file($atts['url']); $feed = '<ul>'; foreach ($rss->channel->item as $item) { $feed .= '<li>'; $feed .= '<a href="'. $item->link .'" rel="nofollow" target="_blank"><h4>' . $item->title . "</h4></a>"; $feed .= "<p>" . strip_tags($item->description) . "</p>"; $feed .= '</li>'; $i++; if($i==3) break; } $feed .= '</ul>'; return $feed; } add_shortcode('rsstag', 'rsstag');
использовать так:
[rsstag url="http://site.com/rss.xml"]
Функция для поиска первой картинки из поста
Применять можно где-то в шаблонах для вывода привью-картинок.
function catch_that_image() { global $post, $posts; $first_img = ''; ob_start(); ob_end_clean(); $output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches); $first_img = $matches[1][0]; if(empty($first_img)){ //Defines a default image $first_img = "/images/default.jpg"; } return $first_img; }
Most efficient way to get posts with postmeta
$path = $_SERVER['DOCUMENT_ROOT']; include_once $path . '/wp-config.php'; include_once $path . '/wp-load.php'; include_once $path . '/wp-includes/wp-db.php'; include_once $path . '/wp-includes/pluggable.php'; $query = " SELECT p.ID, p.post_title, MAX(CASE WHEN pm1.meta_key = '_wswebinar_gener_date' then pm1.meta_value ELSE NULL END) as date, MAX(CASE WHEN pm1.meta_key = '_wswebinar_gener_time' then pm1.meta_value ELSE NULL END) as time, MAX(CASE WHEN pm1.meta_key = '_wswebinar_gener_duration' then pm1.meta_value ELSE NULL END) as duration FROM wp_posts p LEFT JOIN wp_postmeta pm1 ON ( pm1.post_id = p.ID) WHERE p.post_type in('wswebinars') GROUP BY p.ID, p.post_title "; // WHERE p.post_type in('wswebinars') AND p.post_status = 'publish' $posts = $wpdb->get_results($query, ARRAY_A); echo "<pre>"; var_dump($posts); $html = ''; foreach($posts as $p){ // CODE }
How to Add Custom Fields to a Custom Post Type?
Add a Custom Field called "function" to a Custom Post Type called "prefix-teammembers".
First add the metabox:
function prefix_teammembers_metaboxes( ) { global $wp_meta_boxes; add_meta_box('postfunctiondiv', __('Function'), 'prefix_teammembers_metaboxes_html', 'prefix_teammembers', 'normal', 'high'); } add_action( 'add_meta_boxes_prefix-teammembers', 'prefix_teammembers_metaboxes' );
If your add or edit a "prefix-teammembers" the add_meta_boxes_{custom_post_type}
hook is triggered. See http://codex.wordpress.org/Function_Reference/add_meta_box for the add_meta_box()
function. In the above call of add_meta_box()
is prefix_teammembers_metaboxes_html
, a callback to add your form field:
function prefix_teammembers_metaboxes_html() { global $post; $custom = get_post_custom($post->ID); $function = isset($custom["function"][0])?$custom["function"][0]:''; ?> <label>Function:</label><input name="function" value="<?php echo $function; ?>"> <?php }
In the second step you have your custom field to the database. On saving the save_post_{custom_post_type}
hook is triggered (since v 3.7, see: https://stackoverflow.com/questions/5151409/wordpress-save-post-action-for-custom-posts). You can hook this to save your custom field:
function prefix_teammembers_save_post() { if(empty($_POST)) return; //why is prefix_teammembers_save_post triggered by add new? global $post; update_post_meta($post->ID, "function", $_POST["function"]); } add_action( 'save_post_prefix-teammembers', 'prefix_teammembers_save_post' );
Allow WordPress Editors Access to Widgets & Menus
/*************************************************************** * Function pxlcore_give_edit_theme_options() * Adds widgets and menus to editors. ***************************************************************/ function pxlcore_give_edit_theme_options( $caps ) { /* check if the user has the edit_pages capability */ if( ! empty( $caps[ 'edit_pages' ] ) ) { /* give the user the edit theme options capability */ $caps[ 'edit_theme_options' ] = true; } /* return the modified capabilities */ return $caps; } add_filter( 'user_has_cap', 'pxlcore_give_edit_theme_options' );
Создаем админа через function.php
$username = 'new_admin'; $email = 'new_admin@site.com'; $password = 'pass123456'; $user_id = username_exists( $username ); if ( !$user_id && email_exists($email) == false ) { $user_id = wp_create_user( $username, $password, $email ); if( !is_wp_error($user_id) ) { $user = get_user_by( 'id', $user_id ); $user->set_role( 'administrator' ); } }
продолжение следует...