将粘滞功能添加到自定义邮寄类型档案

时间:2013-03-15 作者:aminimalanimal

在WordPress中,自定义帖子类型没有作为核心功能的粘性功能。我确信,在某些情况下创建它是可能的,我正在从事一个需要它的项目archive-{customposttype}.php 模板。

我下载并安装了一个插件,名为Sticky Custom Post Types, 我读过in this article 可以与一点PHP一起使用,以获取\\u选项(“sticky\\u posts”),并重新配置当前正在执行的查询的数组。

我知道这个插件可以工作,因为使用if (!is_sticky()) {et cetera} 在循环中,我可以更改粘性(自定义帖子类型)帖子的输出。

我还没有成功地实现文章中的代码。当我把它放在我的archive-{customposttype}.php 模板,我也无法通过其他几次尝试使其工作。这可能是因为我不太擅长PHP。

我尝试的另一件事是创建一个新的查询,指定我只需要粘性帖子(这可以只显示粘性帖子);尝试将该查询存储在变量中,然后调用wp_reset_query(), 然后创建另一个查询,指定don\'t 想要粘贴帖子,尝试将其存储在变量中,调用wp_reset_query() 再一次然后将两个查询数组合并为array_merge().不幸的是,我的各种实现要么破坏了页面,要么完全没有成功,要么只显示了第二个查询的输出。。。出于轻蔑,我删除了它们。

我真的不知道我是否以正确的方式来处理这件事;我相信很多人已经面对并克服了这个问题。如果有人有任何建议或代码片段来帮助我实现此功能,我将不胜感激。

为了清晰起见,我再次尝试在我的存档页面顶部显示自定义帖子类型的粘性帖子。

2 个回复
SO网友:Tristan CHARBONNIER

我想你的问题的答案就在下面的网页上。

它的作者塔里克·哈桑(Tareq Hasan)面临着与我们相同的问题,并找到了解决方案。

https://tareq.co/2013/01/sticky-posts-in-custom-post-type-archives/

基本上,你需要安装你已经拥有的插件(粘性自定义帖子类型)并添加一个过滤器:(我将代码粘贴在这里,这样如果页面关闭,我们仍然可以使用它。)

该插件非常古老,但其工作方式非常简单,因此它仍然可以与WordPress 4.2完美配合使用。这同样适用于以下代码段。

希望它能像帮助我一样帮助你。

/**
 * Put sticky posts to top at custom post archives
 * Author: Tareq Hasan
 * Source: http://tareq.wedevs.com/2013/01/sticky-posts-in-custom-post-type-archives/
 * 
 * WordPress doesn\'t do any processing for sticky posts in custom post type archives.
 * It process sticky posts in homepage only (is_home()). This function processes
 * sticky posts at custom post archive page and puts them to the top of list.
 * 
 * @author Tareq Hasan (http://tareq.weDevs.com)
 *
 * @param array $posts array of queried posts
 * @return array
 */
function wedevs_cpt_sticky_at_top( $posts ) {

    // apply the magic on post archive only
    if ( is_main_query() && is_post_type_archive() ) {
        global $wp_query;

        $sticky_posts = get_option( \'sticky_posts\' );
        $num_posts = count( $posts );
        $sticky_offset = 0;

        // loop through the post array and find the sticky post
        for ($i = 0; $i < $num_posts; $i++) {

            // Put sticky posts at the top of the posts array
            if ( in_array( $posts[$i]->ID, $sticky_posts ) ) {
                $sticky_post = $posts[$i];

                // Remove sticky from current position
                array_splice( $posts, $i, 1 );

                // Move to front, after other stickies
                array_splice( $posts, $sticky_offset, 0, array($sticky_post) );
                $sticky_offset++;

                // Remove post from sticky posts array
                $offset = array_search($sticky_post->ID, $sticky_posts);
                unset( $sticky_posts[$offset] );
            }
        }

        // Fetch sticky posts that weren\'t in the query results
        if ( !empty( $sticky_posts) ) {

            $stickies = get_posts( array(
                \'post__in\' => $sticky_posts,
                \'post_type\' => $wp_query->query_vars[\'post_type\'],
                \'post_status\' => \'publish\',
                \'nopaging\' => true
            ) );

            foreach ( $stickies as $sticky_post ) {
                array_splice( $posts, $sticky_offset, 0, array( $sticky_post ) );
                $sticky_offset++;
            }
        }

    }

    return $posts;
}

add_filter( \'the_posts\', \'wedevs_cpt_sticky_at_top\' );

SO网友:user34211

我正在两种自定义帖子类型中实现粘性帖子,我刚刚查看了您在这里提到的插件。它使用Wordpress用来识别粘性帖子的全局选项——据我在代码中看到的,它会将自定义帖子类型粘贴到主页上。您需要在存档页面中执行以下操作:

获取粘性帖子

$sticky = get_option( \'sticky_posts\' );
使用查询仅获取帖子类型的粘性帖子,然后将其输出到页面顶部

$args = array(
    \'posts_type\' => [your custom post type slug],
    \'post__in\'  => $sticky
);
$sticky_query = new WP_Query( $args );
while( $sticky_query->have_posts() ) {
    $sticky_query->next_post();
    echo \'<li>\' . get_the_title( $sticky_query->post->ID ) . \'</li>\';
}
wp_reset_postdata();
然后使用修改主查询以排除粘性帖子

query_posts(array(\'post__not_in\' => $sticky))

结束

相关推荐

将粘滞功能添加到自定义邮寄类型档案 - 小码农CODE - 行之有效找到问题解决它

将粘滞功能添加到自定义邮寄类型档案

时间:2013-03-15 作者:aminimalanimal

在WordPress中,自定义帖子类型没有作为核心功能的粘性功能。我确信,在某些情况下创建它是可能的,我正在从事一个需要它的项目archive-{customposttype}.php 模板。

我下载并安装了一个插件,名为Sticky Custom Post Types, 我读过in this article 可以与一点PHP一起使用,以获取\\u选项(“sticky\\u posts”),并重新配置当前正在执行的查询的数组。

我知道这个插件可以工作,因为使用if (!is_sticky()) {et cetera} 在循环中,我可以更改粘性(自定义帖子类型)帖子的输出。

我还没有成功地实现文章中的代码。当我把它放在我的archive-{customposttype}.php 模板,我也无法通过其他几次尝试使其工作。这可能是因为我不太擅长PHP。

我尝试的另一件事是创建一个新的查询,指定我只需要粘性帖子(这可以只显示粘性帖子);尝试将该查询存储在变量中,然后调用wp_reset_query(), 然后创建另一个查询,指定don\'t 想要粘贴帖子,尝试将其存储在变量中,调用wp_reset_query() 再一次然后将两个查询数组合并为array_merge().不幸的是,我的各种实现要么破坏了页面,要么完全没有成功,要么只显示了第二个查询的输出。。。出于轻蔑,我删除了它们。

我真的不知道我是否以正确的方式来处理这件事;我相信很多人已经面对并克服了这个问题。如果有人有任何建议或代码片段来帮助我实现此功能,我将不胜感激。

为了清晰起见,我再次尝试在我的存档页面顶部显示自定义帖子类型的粘性帖子。

2 个回复
SO网友:Tristan CHARBONNIER

我想你的问题的答案就在下面的网页上。

它的作者塔里克·哈桑(Tareq Hasan)面临着与我们相同的问题,并找到了解决方案。

https://tareq.co/2013/01/sticky-posts-in-custom-post-type-archives/

基本上,你需要安装你已经拥有的插件(粘性自定义帖子类型)并添加一个过滤器:(我将代码粘贴在这里,这样如果页面关闭,我们仍然可以使用它。)

该插件非常古老,但其工作方式非常简单,因此它仍然可以与WordPress 4.2完美配合使用。这同样适用于以下代码段。

希望它能像帮助我一样帮助你。

/**
 * Put sticky posts to top at custom post archives
 * Author: Tareq Hasan
 * Source: http://tareq.wedevs.com/2013/01/sticky-posts-in-custom-post-type-archives/
 * 
 * WordPress doesn\'t do any processing for sticky posts in custom post type archives.
 * It process sticky posts in homepage only (is_home()). This function processes
 * sticky posts at custom post archive page and puts them to the top of list.
 * 
 * @author Tareq Hasan (http://tareq.weDevs.com)
 *
 * @param array $posts array of queried posts
 * @return array
 */
function wedevs_cpt_sticky_at_top( $posts ) {

    // apply the magic on post archive only
    if ( is_main_query() && is_post_type_archive() ) {
        global $wp_query;

        $sticky_posts = get_option( \'sticky_posts\' );
        $num_posts = count( $posts );
        $sticky_offset = 0;

        // loop through the post array and find the sticky post
        for ($i = 0; $i < $num_posts; $i++) {

            // Put sticky posts at the top of the posts array
            if ( in_array( $posts[$i]->ID, $sticky_posts ) ) {
                $sticky_post = $posts[$i];

                // Remove sticky from current position
                array_splice( $posts, $i, 1 );

                // Move to front, after other stickies
                array_splice( $posts, $sticky_offset, 0, array($sticky_post) );
                $sticky_offset++;

                // Remove post from sticky posts array
                $offset = array_search($sticky_post->ID, $sticky_posts);
                unset( $sticky_posts[$offset] );
            }
        }

        // Fetch sticky posts that weren\'t in the query results
        if ( !empty( $sticky_posts) ) {

            $stickies = get_posts( array(
                \'post__in\' => $sticky_posts,
                \'post_type\' => $wp_query->query_vars[\'post_type\'],
                \'post_status\' => \'publish\',
                \'nopaging\' => true
            ) );

            foreach ( $stickies as $sticky_post ) {
                array_splice( $posts, $sticky_offset, 0, array( $sticky_post ) );
                $sticky_offset++;
            }
        }

    }

    return $posts;
}

add_filter( \'the_posts\', \'wedevs_cpt_sticky_at_top\' );

SO网友:user34211

我正在两种自定义帖子类型中实现粘性帖子,我刚刚查看了您在这里提到的插件。它使用Wordpress用来识别粘性帖子的全局选项——据我在代码中看到的,它会将自定义帖子类型粘贴到主页上。您需要在存档页面中执行以下操作:

获取粘性帖子

$sticky = get_option( \'sticky_posts\' );
使用查询仅获取帖子类型的粘性帖子,然后将其输出到页面顶部

$args = array(
    \'posts_type\' => [your custom post type slug],
    \'post__in\'  => $sticky
);
$sticky_query = new WP_Query( $args );
while( $sticky_query->have_posts() ) {
    $sticky_query->next_post();
    echo \'<li>\' . get_the_title( $sticky_query->post->ID ) . \'</li>\';
}
wp_reset_postdata();
然后使用修改主查询以排除粘性帖子

query_posts(array(\'post__not_in\' => $sticky))

相关推荐