定制Jetpack宣传文本

时间:2016-05-11 作者:TomC

编辑:由于否决票(没有评论!),我把这篇文章编辑得更具体一点。。。

为什么以下更改不起作用?

$custom_message = get_the_title( $post->ID ) .\'\'. $hash_tags;
收件人:

$custom_message = get_the_content( $post->ID ) .\' \'. $hash_tags; 
原岗位

我正在尝试定制Jetpack Publicate发布的文本,以使用帖子内容而不是标题,因为我的帖子没有标题。这以前是可行的,但Jetpack中似乎发生了一些变化,现在默认使用标题和URL。

Jetpack Publication模块中的代码如下:

function __construct() {
        $this->default_message = Publicize_Util::build_sprintf( array(
            /**
             * Filter the default Publicize message.
             *
             * @module publicize
             *
             * @since 2.0.0
             *
             * @param string $this->default_message Publicize\'s default message. Default is the post title.
             */
            apply_filters( \'wpas_default_message\', $this->default_message ),
            \'title\',
            \'url\',
        ) );

        $this->default_prefix = Publicize_Util::build_sprintf( array(
            /**
             * Filter the message prepended to the Publicize custom message.
             *
             * @module publicize
             *
             * @since 2.0.0
             *
             * @param string $this->default_prefix String prepended to the Publicize custom message.
             */
            apply_filters( \'wpas_default_prefix\', $this->default_prefix ),
            \'url\',
        ) );

        $this->default_suffix = Publicize_Util::build_sprintf( array(
            /**
             * Filter the message appended to the Publicize custom message.
             *
             * @module publicize
             *
             * @since 2.0.0
             *
             * @param string $this->default_suffix String appended to the Publicize custom message.
             */
            apply_filters( \'wpas_default_suffix\', $this->default_suffix ),
            \'url\',
        ) );
我想知道是否可以将get\\u\\u内容添加到wpas\\u default\\u消息中,但尚未成功实现。

我还试图修改另一个插件(JeremyHerve)的代码,该插件将post标记添加为hashtags,如下所示changing get_the_titleget_the_content 但它不起作用:

function tsj_publicize_hashtags() {
    $post = get_post();
    if ( ! empty( $post ) ) {

    /* Grab the tags of the post */
        $post_tags = get_the_tags( $post->ID );

    /* Append tags to custom message */
        if ( ! empty( $post_tags ) ) {

        /* Create list of tags with hashtags in front of them */
            $hash_tags = \'\';
            foreach( $post_tags as $tag ) {
                $hash_tags .= \' #\' . $tag->name;
            }

        /* Create our custom message */
            // $custom_message = get_the_title( $post->ID ) .\'\'. $hash_tags;
            $custom_message = get_the_content( $post->ID ) .\' \'. $hash_tags; 
            update_post_meta( $post->ID, \'_wpas_mess\', $custom_message );

        }
    }
}
/* Save that message */
function tsj_cust_pub_message_save() {
add_action( \'save_post\', \'tsj_publicize_hashtags\', 21 );
}

add_action( \'publish_post\', \'tsj_cust_pub_message_save\' );
}
有谁能告诉我如何在公开文本中使用帖子内容的正确方向吗?

2 个回复
最合适的回答,由SO网友:birgire 整理而成

只是一些一般性的评论:

为什么以下更改不起作用?

    $custom_message = get_the_title( $post->ID ) .\'\'. $hash_tags;
收件人:

    $custom_message = get_the_content( $post->ID ) .\' \'. $hash_tags;
请注意get_the_content() 不将post ID作为输入参数,它依赖于全局变量,如$pages 这是从$post->post_content (带有一些分页调整),在WP_Query::setup_postdata() 方法

定义如下:

function get_the_content( $more_link_text = null, $strip_teaser = false ) {
    global $page, $more, $preview, $pages, $multipage;
    ...
}
可以使用一个起点

$post->post_content
如果您有权访问$post 对象或

get_post_field( \'post_content\', $post_ID );
如果你只有帖子ID并从那里开始。

请注意,如果需要使用save_post 钩子,您可以从回调中获取post ID和post对象:

do_action( \'save_post\', $post_ID, $post, $update );
所以你不需要使用get_post().

PS:我想知道你是否可以在JetPack中使用这个钩子(只是略过它):

do_action( \'publicize_save_meta\', $submit_post, $post_id, $service_name, $connection );
但似乎每个服务/连接都会被触发。

SO网友:TomC

完整的代码(感谢@birgire),以防其他人在将来发现有用的代码:

// Append Tags as Hashtags to Jetpack publicise posts
if ( class_exists( \'Jetpack\' ) && Jetpack::is_module_active( \'publicize\' ) ) {
    function tsj_publicize_hashtags() {
        $post = get_post();
        if ( ! empty( $post ) ) {
        /* Grab the tags and content of the post */
            $post_tags = get_the_tags( $post->ID );
            $content = get_post_field( \'post_content\', $post->ID );
            //$content = $post->post_content;

        /* Append tags to custom message */
            if ( ! empty( $post_tags ) ) {
            /* Create list of tags with hashtags in front of them */
                $hash_tags = \'\';
                foreach( $post_tags as $tag ) {
                    $hash_tags .= \' #\' . $tag->name;
                }
            /* Create our custom message using content instead of title */
                $custom_message = $content . \' \' . $hash_tags; 
                update_post_meta( $post->ID, \'_wpas_mess\', $custom_message );
            }
        }
    }
    /* Save that message */
    function tsj_cust_pub_message_save() {
    add_action( \'save_post\', \'tsj_publicize_hashtags\', 21 );
    }
    add_action( \'publish_post\', \'tsj_cust_pub_message_save\' );
}

相关推荐

绕过WP查询中的“supress_Filters”

显然,出于某种不合逻辑的原因,开发人员决定获取所有语言帖子的唯一方法是添加supress_filters=true 到WP\\u查询(而不是像这样language_code=all 选项)。无论如何,我的情况是,我需要获取所有语言的帖子,但也需要使用过滤器修改WP\\u查询。有没有办法强制将我的过滤器添加到查询中,即使supress_filters 设置为false?这是我需要添加的过滤器:add_filter( \'posts_where\', function($where, $wp_query) {