Wordpress |为活动流使用自定义帖子类型

Wordpress |为活动流使用自定义帖子类型,wordpress,custom-post-type,Wordpress,Custom Post Type,我使用PeepSo插件。默认情况下,您可以显示在后端自动创建的新帖子 我的问题:您能否修改代码,以便在活动流中自动添加自定义帖子类型的帖子 有可能查询的不是邮件,而是我的海关邮件类型 如果你有主意,我很乐意接受帮助。 我的自定义帖子类型称为“recipes” 守则: <?php class PeepSoBlogPosts { private static $instance; public static function get_instance() {

我使用PeepSo插件。默认情况下,您可以显示在后端自动创建的新帖子

我的问题:您能否修改代码,以便在活动流中自动添加自定义帖子类型的帖子

有可能查询的不是邮件,而是我的海关邮件类型

如果你有主意,我很乐意接受帮助。 我的自定义帖子类型称为“recipes”

守则:

<?php

class PeepSoBlogPosts {
    private static $instance;

    public static function get_instance()
    {
        if (self::$instance === NULL) {
            self::$instance = new self();
        }
        return self::$instance;
    }

    public function __construct()
    {
        if(PeepSo::get_option('blogposts_activity_enable', 0)) {

            /** INIT */
            add_action('peepso_init', function() {
                PeepSoTemplate::add_template_directory(plugin_dir_path(__FILE__));
            });

            /** ADMIN HOOKS */

            // Store the BlogPosts meta in the companion poost
            add_action('save_post',  function($post_id) {

                $cats = get_the_category($post_id);

                // #4424 exclude selected categories
                if(!PeepSoBlogPosts::enabled_for_post_categories($post_id)) {
                    // force unpublish if activity already created and category integration is disabled
                    $act_id = get_post_meta($post_id, PeepSo::BLOGPOSTS_SHORTCODE, TRUE);
                    if(strlen($act_id) && is_numeric($act_id) && 0 < $act_id) {
                        wp_update_post(array(
                            'ID' => $act_id,
                            'post_status' => 'pending'
                        ));
                    }

                    return;
                }

                // Handle the excerpt
                if (array_key_exists('peepso_excerpt', $_POST)) {

                    update_post_meta(
                        $post_id,
                        'peepso_excerpt',
                        $_POST['peepso_excerpt']
                    );
                }

                // Handle the hashtags
                $hashtags = '';
                $import_tags = FALSE;
                $import_cats = FALSE;

                if(PeepSo::get_option('hashtags_enable', 1)) {

                    if (array_key_exists('peepso_hashtags', $_POST)) {
                        $hashtags = $this->hashtags_meta_cleanup($_POST['peepso_hashtags']);
                    }


                    // Use WP tags
                    if(array_key_exists('peepso_hashtags_use_wp_tags', $_POST)) {
                        update_post_meta($post_id, 'peepso_hashtags_use_wp_tags', 1);
                        $import_tags = TRUE;
                    } else {
                        delete_post_meta($post_id, 'peepso_hashtags_use_wp_tags');
                    }

                    // Use WP cats
                    if(array_key_exists('peepso_hashtags_use_wp_cats', $_POST)) {
                        update_post_meta($post_id, 'peepso_hashtags_use_wp_cats', 1);
                        $import_cats = TRUE;
                    } else {
                        delete_post_meta($post_id, 'peepso_hashtags_use_wp_cats');
                    }

                    update_post_meta(
                        $post_id,
                        'peepso_hashtags',
                        $hashtags
                    );

                }

                // Update the companion post
                if($companion_id = get_post_meta($post_id,PeepSo::BLOGPOSTS_SHORTCODE, TRUE)) {

                    $excerpt = get_post_meta($post_id, 'peepso_excerpt', TRUE);
                    $hashtags = get_post_meta($post_id, 'peepso_hashtags', TRUE);

                    if($import_tags) {
                        // Import WP tags
                        $tags = get_the_tags($post_id);
                        if($tags && count($tags)) {
                            foreach($tags as $tag) {
                                // new PeepSoError(print_r($tag, TRUE));

                                // WP tags might contain spaces, so we handle that.
                                // Any other special characters are the responsibility of the admin
                                // To use more than [a-z0-0], enable non-alpha hashtags in PeepSo
                                $peepso_tag = str_replace(' ','-', $tag->name);
                                $hashtags .= ' #'.$peepso_tag;
                            }
                        }
                    }

                    if($import_cats) {
                        // Import WP tags
                        new PeepSoError(print_r($cats, TRUE));


                        if(count($cats)) {
                            foreach($cats as $cat) {
                                // WP categories might contain spaces, so we handle that.
                                // Any other special characters are the responsibility of the admin
                                // To use more than [a-z0-0], enable non-alpha hashtags in PeepSo
                                $peepso_tag = str_replace(' ','-', $cat->name);
                                $hashtags .= ' #'.$peepso_tag;
                            }
                        }
                    }

                    $companion = get_post($companion_id);

                    $companion->post_content = json_decode($companion->post_content);
                    $companion->post_content->excerpt = $excerpt;

                    if(PeepSo::get_option('hashtags_enable', 1)) {

                        if(PeepSo::get_option('blogposts_hashtags_sort',1) && strstr($hashtags, ' ')) {

                            $hashtags = explode(' ', $hashtags);

                            natcasesort($hashtags);

                            $hashtags = implode(' ', $hashtags);
                        }

                        $hashtags = " " . $hashtags . " ";
                        //$hashtags = strtolower($hashtags);
                        $companion->post_content->hashtags = $hashtags;
                    }

                    $companion->post_content = json_encode($companion->post_content,JSON_UNESCAPED_UNICODE);
                    wp_update_post($companion);

                    // Make sure hashtag maintenance script catches the companion post
                    delete_post_meta($companion_id, PeepSo::HASHTAGS_POST_META);
                    PeepSo::get_instance()->hashtags_build_hashtags(PeepSo::get_option('hashtags_post_count_batch_size', 5));
                    PeepSo::get_instance()->hashtags_build_posts(PeepSo::get_option('hashtags_post_count_batch_size', 5));
                }

            },9999,1);

            //  Meta box
            add_action( 'add_meta_boxes', function(){
                add_meta_box(
                    'peepso_meta_box',
                    __('PeepSo Blog Posts  Integration', 'peepso-core'),
                    array(&$this,'blogposts_meta_box'),
                    'post',
                    'side',
                    'default'
                );
            });

            // Category settings UI
            add_action ( 'category_edit_form_fields', function($term) {
                ?>
                <tr class="form-field">
                    <th scope="row" valign="top"><label for="cat_Image_url"><?php echo __('PeepSo Blog Posts integration'); ?></label></th>
                    <td>
                        <select name="peepso_blogposts" id="peepso_blogposts" style="width:60%;">
                            <option value="1"><?php echo __('Enabled','peepso-core');?></option>
                            <option value="0" <?php if(!PeepSoBlogPosts::enabled_for_category($term->term_id)) { echo "selected"; }?> ><?php echo __('Disabled','peepso-core');?></option>
                        </select>

                        <br />
                        <span class="description"><?php echo __('Use with caution! Disabling PeepSo BlogPosts integration for a category will prevent new stream posts from being created. Old posts (if any) will remain, but comment integration will be disabled both for new and old posts in this category.','peepso-core'); ?></span>
                    </td>
                </tr>
                <?php
            });

            // Category settings save
            add_action ( 'edited_category', function( $term_id ) {
                if ( isset( $_POST['peepso_blogposts'] ) ) {
                    //save the option array
                    update_option( "peepso_blogposts_category_$term_id", $_POST['peepso_blogposts'] );
                }
            });



            /** FRONTEND HOOKS - COMPANION POST */

            // Attach excerpt to the PeepSo companion post
            add_filter('peepso_activity_content', function($content, $post=NULL){

                $original_content = strip_tags(get_post_field('post_content', $post, 'raw'));

                if(!stristr($original_content, PeepSo::BLOGPOSTS_SHORTCODE)) {
                    return $content;
                }

                if($target_post = json_decode($original_content)) {
                    $excerpt = '';

                    if(isset($target_post->excerpt)) {
                        $excerpt = $target_post->excerpt;
                    }

                    if (strlen($excerpt)) {
                        if (PeepSo::get_option('md_post', 0)) {
                            $excerpt = PeepSo::do_parsedown($excerpt) . '<br>';
                        } else {
                            $excerpt = '<p>' . $excerpt . '</p>';
                        }
                    }

                    $content = $excerpt . $content;
                }

                return $content;

            },9999,2);

            // Attach hashtags to the PeepSo companion post (meta area)
            add_filter('peepso_post_extras', function($extras) {

                if('below_author' != PeepSo::get_option('blogposts_hashtags_peepso_post_location','below_author')) {
                    return $extras;
                }

                global $post;
                $hashtags = $this->get_hashtags_from_post_json($post->ID);

                if(!strlen($hashtags)) {
                    return $extras;
                }

                $extras['hashtags'] = PeepSoTemplate::exec_template('blogposts','extras-hashtags', array('hashtags' => $hashtags), TRUE);

                return $extras;
            },9999,1);

            // Attach hashtags to PeepSo companion post (above / below embed)
            add_filter('peepso_activity_content', function($content, $post = NULL) {

                $location = PeepSo::get_option('blogposts_hashtags_peepso_post_location','below_author');

                if('below_author' == $location) {
                    return $content;
                }

                $hashtags  = $this->get_hashtags_from_post_json($post->ID);

                if(!strlen($hashtags)) {
                    return $content;
                }

                $hashtags = PeepSoTemplate::exec_template('blogposts','wp-post-hashtags', array('hashtags' => $hashtags), TRUE);


                if($location == 'above_embed') {
                    return $hashtags . $content;
                }

                if($location == 'below_embed') {
                    return $content .  $hashtags;
                }

            },10,2);

            /** FRONTEND HOOKS - WP POST */

            // Attach hashtags to the WP post
            add_filter('the_content', function($content) {

                if(! in_the_loop()  )   { return $content; }
                if(! is_singular()  )   { return $content; }
                if(! is_single()    )   { return $content; }
                if(! is_main_query())   { return $content; }
                if(  is_embed()     )   { return $content; }

                global $post;
                if($post->post_type != 'recipes') { return $content; }

                $location = PeepSo::get_option('blogposts_hashtags_wp_post_location');
                if(!$location) {
                    return $content;
                }

                $hashtags  = $this->get_hashtags_from_post_json(get_post_meta($post->ID, PeepSo::BLOGPOSTS_SHORTCODE, TRUE));

                if(!strlen($hashtags)) {
                    return $content;
                }

                $hashtags = PeepSoTemplate::exec_template('blogposts','wp-post-hashtags', array('hashtags' => $hashtags,'location'=>$location), TRUE);

                if(stristr($location,'above_post')) {
                    $content = $hashtags . $content;
                }

                if(stristr($location,'below_post')) {
                    $content = $content .  $hashtags;
                }

                return $content;
            },-2);

        }
    }

    /** ADMIN HOOKS */

    // Print meta box in the Post Edit screen
    public function blogposts_meta_box() {
        global $post;
        ?>
        <strong><?php echo sprintf(__('%s excerpt','peepso-core'),'PeepSo');?></strong>

        <p style="font-size:12px;color: #666666;">
            <?php  echo __('Displays above the blog post embed on PeepSo stream.','peepso-core'); ?>
            <textarea placeholder="<?php echo __('Supports MarkDown formatting. HTML will be ignored.','peepso-core');?>" style="width:100%;min-height:200px;" name="peepso_excerpt"><?php echo get_post_meta($post->ID, 'peepso_excerpt', TRUE);?></textarea>
        </p>

        <?php if(PeepSo::get_option('hashtags_enable', 1)) { ?>
            <hr>

            <strong><?php echo sprintf(__('%s hashtags', 'peepso-core'), 'PeepSo'); ?></strong>
            <p style="font-size:12px;color: #666666;">

                <?php echo __('List your hashtags separated by spaces, using the # character for each hashtag.', 'peepso-core'); ?>

                <input
                        type="text"
                        placeholder="#hashtagOne #hashtagTwo"
                        style="width:100%;"
                        name="peepso_hashtags"
                        value="<?php echo $this->hashtags_meta_cleanup(get_post_meta($post->ID, 'peepso_hashtags', TRUE)); ?>"
                />
            </p>
            <hr>
            <strong><?php echo __('WordPress meta as PeepSo hashtags', 'peepso-core'); ?></strong>

            <p style="font-size:12px;color: #666666;">
                Attach the WordPress tags and/or categories as PeepSo hashtags in the front-end.
            </p>

            <?php
            $checked = 0;
            $screen = get_current_screen();
            if('add' == $screen->action) {
                $checked = (int) PeepSo::get_option('blogposts_hashtags_always_use_wp_tags');
            } elseif(strlen($meta = get_post_meta($post->ID, 'peepso_hashtags_use_wp_tags', TRUE))) {
                $checked = $meta;
            }
            ?>

            <input type="checkbox"
                   value="1" <?php echo $checked ? "checked" : ""; ?>
                   name="peepso_hashtags_use_wp_tags" id="peepso_hashtags_use_wp_tags"/>
            <label for="peepso_hashtags_use_wp_tags">
                <?php echo __('Use WordPress tags', 'peepso-core'); ?>
            </label>

            <br/>

            <?php
            $checked = 0;
            $screen = get_current_screen();
            if('add' == $screen->action) {
                $checked = (int) PeepSo::get_option('blogposts_hashtags_always_use_wp_cats');
            } elseif(strlen($meta = get_post_meta($post->ID, 'peepso_hashtags_use_wp_cats', TRUE))) {
                echo "strlen!";
                $checked = $meta;
            }
            ?>

            <input type="checkbox"
                   value="1" <?php echo $checked ? "checked" : ""; ?>
                   name="peepso_hashtags_use_wp_cats" id="peepso_hashtags_use_wp_cats"/>
            <label for="peepso_hashtags_use_wp_cats">
                <?php echo __('Use WordPress categories', 'peepso-core'); ?>
            </label>


            <?php
        }
    }

    /** UTILITIES */

    // Retrieves list of hashtags stored in the JSON object of PeepSo BlogPosts companion post
    public function get_hashtags_from_post_json($post_id) {
        $post = get_post($post_id);

        if(!$post instanceof WP_Post) {
            return '';
        }

        $content = $post->post_content;

        if(!stristr($content, PeepSo::BLOGPOSTS_SHORTCODE)) {
            return '';
        }

        if($target_post = json_decode($content)) {
            if (isset($target_post->hashtags) && strlen($target_post->hashtags)) {
                return trim($target_post->hashtags);
            }
        }
        return '';
    }

    // Cleanup the hashtag list
    // Unused for now
    public function hashtags_meta_cleanup($hashtags) {
        //$hashtags = str_replace(array('.',','), ' ', $hashtags);
        //$hashtags = str_replace(' ', ' ', $hashtags);
        return $hashtags;
    }

    // Check if integration is enabled for the post, based on its categories
    public static function enabled_for_post_categories($post_id) {
        $cats = get_the_category($post_id);
        
        if(count($cats)) {
            foreach($cats as $cat) {
                if(!PeepSoBlogPosts::enabled_for_category($cat->term_id))
                {
                    return FALSE;
                }
            }
        }

        return TRUE;
    }
    // Checks if integration is enabled for given category ID
    public static function enabled_for_category($id) {
        return get_option( "peepso_blogposts_category_$id", 1);
    }
}