Опубликовать в категории, основанной на домене электронной почты, для плагина post-by-email

У меня есть плагин wordpress, установленный под названием Postie – он позволяет мне отправлять сообщения на мой WordPress, отправив электронное письмо на конкретный адрес электронной почты.

Мне нужна помощь с некоторыми кодировками, чтобы сделать это, чтобы он отправлял сообщения в определенную категорию в зависимости от адреса @domain отправителя от их электронной почты.

поэтому, если письмо XXX.com с XXX.com , XXX.com все свои сообщения в категории X, но если он ZZZ.com , ZZZ.com его в категорию Z.

— это файл фильтра образца —-

 <?php /* Plugin Name: Postie Filter Plugin URI: http://blog.robfelty.com/plugins/postie Description: Adds my own custom filter to messages posted by postie Version: 1.4 Author: Robert Felty Author URI: http://blog.robfelty.com/ */ /* * Any filter function you write should accept one argument, which is the post array, which contains the following fields: 'post_author' 'comment_author' 'comment_author_url' 'user_ID' 'email_author' 'post_date' 'post_date_gmt' 'post_content' 'post_title' 'post_modified' 'post_modified_gmt' 'ping_status' 'post_category' 'tags_input' 'comment_status' 'post_name' 'post_excerpt' 'ID' 'customImages' 'post_status' Your function can modify any of these fields. It should then return the array back. Two example functions are provided here */ function filter_content($post) { //this function prepends a link to bookmark the category of the post $this_cat = get_the_category($post['ID']); //var_dump($this_cat); $link = '<a href="' . get_category_link($this_cat[0]->term_id) . '">Bookmark this category</a>' . "\n"; $post['post_content'] = $link . $post['post_content']; return ($post); } function filter_title($post) { //this function appends "(via postie)" to the title (subject) $post['post_title']= $post['post_title'] . ' (via postie)'; return ($post); } function auto_tag($post) { // this function automatically inserts tags for a post $my_tags=array('cooking', 'latex', 'wordpress'); foreach ($my_tags as $my_tag) { if (stripos($post['post_content'], $my_tag)!==false) array_push($post['tags_input'], $my_tag); } return ($post); } function add_custom_field($post) { //this function appends "(via postie)" to the title (subject) add_post_meta($post['ID'], 'postie', 'postie'); return ($post); } add_filter('postie_post', 'filter_title'); add_filter('postie_post', 'filter_content'); add_filter('postie_post', 'add_custom_field'); add_filter('postie_post', 'auto_tag'); 

Solutions Collecting From Web of "Опубликовать в категории, основанной на домене электронной почты, для плагина post-by-email"

Я не устанавливал плагин для проверки этого кода.

Вам нужно выполнить поиск кода, чтобы подтвердить его, но «email_author», по-видимому, является автором электронной почты для этого сообщения. Почему это не называется «author_email» – это чья-то догадка.

Мы должны иметь возможность добавить код, который проверяет входящую электронную почту:

 if ( 'zzz.com' == $post['email_author'] ) { // Add category Z. } else if ( 'yyy.com' == $post['email_author'] ) { // Add category Y. } 

Но, во-первых, давайте немного поднимемся. Все функции вашего фильтра вызываются одним и тем же крючком («postie_post»). (Фильтр – это крючок. Другой тип крюка WordPress – это действие.) Таким образом, вы можете поместить все в одну и ту же функцию:

 add_filter( 'postie_post', 'postie_custom_changes' ); /** * Make several custom changes to a Postie post. */ function postie_custom_changes( $post ) { if ( 'zzz.com' == $post->'email_author' ) { // Add category X. } else if ( 'zzz.com' == $post->'email_author' ) { // Add category Y. } // Prepend a link to bookmark the category of the post. $category = get_the_category( $post['ID'] ); $link = '<a href="' . get_category_link( $category[0]->term_id ) . '">Bookmark this category</a>' . "\n"; $post['post_content'] = $link . $post['post_content']; // Appends "(via postie)" to the title (subject). $post['post_title'] = $post['post_title'] . ' (via postie)'; // Insert tags for a post. foreach ( $my_tags as array( 'cooking', 'latex', 'wordpress' ) ) { if ( stripos( $post['post_content'], $my_tag ) !== false ) array_push( $post['tags_input'], $my_tag ); } // Append "(via postie)" to the title (subject). add_post_meta( $post['ID'], 'postie', 'postie' ); return $post; } 

Другие изменения, которые я внес, были в комментариях, в отступе, и я изменил $this_cat на $category потому что аббревиатура слов категории ошибок была из меня. 🙂

Похоже, что фильтр postie_post запускается после создания сообщения. Поиск Google в интернет-трубах и трубах wp_set_post_categories() функцию WordPress wp_set_post_categories()

Первый параметр: a – это идентификатор post, а второй – массив, содержащий идентификаторы категорий, для которых вы хотите установить сообщение. Из вашего кода кажется, что вы ожидаете только одну категорию за сообщение, поэтому давайте посмотрим на код, чтобы изменить категорию сообщения, а не добавлять его.

 // Replace categories on some posts. if ( 'zzz.com' == $post['email_author'] ) { wp_set_post_categories( $post['ID'], array( 2 ) ); } else if ( 'yyy.com' == $post['email_author'] ) { wp_set_post_categories( $post['ID'], array( 1 ) ); } 

Предполагая, что категория Y имеет id из 1, а категория Z имеет id из 2 .

Вы также можете изменить настройку $post['category'] .

 // Replace categories on some posts. if ( 'zzz.com' == $post['email_author'] ) { wp_set_post_categories( $post['ID'], array( 2 ) ); $post['category'] = array( 2 ); } else if ( 'yyy.com' == $post['email_author'] ) { wp_set_post_categories( $post['ID'], array( 1 ) ); $post['category'] = array( 1 ); }