自定义域或其他内容

时间:2013-01-31 作者:Niels Jansen

我在主页上显示某些内容时遇到问题。首先我要解释我的问题。我有一个页面,上面有我所有的博客帖子(使用摘录功能)。当你点击博客帖子页面上的阅读更多链接时,你会看到整篇文章。

在我的主页上,我想展示3篇最新的帖子。我已经把排名前三的帖子删掉了。(使用摘录功能)但是teasers 或是太长了。文字太多了。我不想把它缩短,因为当我这样做的时候,包含所有博客帖子的页面也会改变。

我想在博客帖子中使用自定义字段。然后我可以在主页上为摘要内容创建一个额外字段?这是正确的解决方案还是有其他解决方案?

4 个回复
SO网友:Max Yudin

当您不需要不同的摘录长度,但也需要不同的摘录内容时,自定义字段非常适合这种情况。

下面的代码将向编辑帖子管理页面添加额外的TinyMCE编辑器,这样您就可以专门为首页编写格式化的摘录。摘录将存储在_wpse83958_front_page_excerpt 自定义字段。前面的下划线使其在中不可见Custom Fields 代谢箱。

把它放到你的functions.php:

// Do not use \'add_meta_boxes\' with TinyMCE
add_action( \'edit_form_advanced\', \'wpse83958AddFrontPageExcerptEditor\' );
add_action( \'save_post\', \'wpse83958SaveFrontPageExcerpt\' );

function wpse83958AddFrontPageExcerptEditor() {
    global $post;

    wp_nonce_field( \'wpse83958_front_page_excerpt\', \'wpse83958_front_page_excerpt_noncename\' );

    echo \'<h2>Front page excerpt</h2>\';

    // \'textarea_name\' argument is necessary because of \'editor_id\' parameter limitations (http://codex.wordpress.org/Function_Reference/wp_editor#Parameters)
    // See http://core.trac.wordpress.org/ticket/19173 for information about Editor moving (drag\'n\'drop)

    // second argument ($editor_id) must contain lowercase letters ONLY ([a-z])
    wp_editor(
        get_post_meta($post->ID, \'_wpse83958_front_page_excerpt\', true),
        \'wpse83958frontpageexcerpt\',
        array(
            \'textarea_name\'     => \'wpse83958_front_page_excerpt\',
            \'wpautop\'           => true
        )
    );
}


function wpse83958SaveFrontPageExcerpt( $post_id ) {

    if (defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE)
        return;

    if( isset($_POST[\'wpse83958_front_page_excerpt\']) && !wp_verify_nonce( $_POST[\'wpse83958_front_page_excerpt_noncename\'], \'wpse83958_front_page_excerpt\' ) )
        return;

    if ( !current_user_can( \'edit_page\', $post_id ) || !current_user_can( \'edit_post\', $post_id ) )
        return;

    $wpse83958_front_page_excerpt = $_POST[\'wpse83958_front_page_excerpt\'];

    if(\'\' != $wpse83958_front_page_excerpt)
        update_post_meta($post_id, \'_wpse83958_front_page_excerpt\', $wpse83958_front_page_excerpt);
    else
        delete_post_meta($post_id, \'_wpse83958_front_page_excerpt\');

}
并在头版循环中获取您的摘录:

$front_page_excerpt = get_post_meta($post->ID, \'_wpse83958_front_page_excerpt\', true);
// Change double linebreaks to \'<p>\' elements as only \'the content\' and \'the excerpt\' do use them automatically
$front_page_excerpt = wpautop($front_page_excerpt);

echo $front_page_excerpt;

SO网友:Blowsie

我想你想问的是。

How can i have multiple excerpt lengths?

参见StackOverflow上的类似问题

https://stackoverflow.com/questions/4082662/multiple-excerpt-lengths-in-wordpress

SO网友:Simon

通过使用自定义字段,您将能够使用自定义文本,而不仅仅是截断的文本,这对SEO来说是最好的:您可以编写真正的摘要。但是,出版时也需要更多的工作。

如果没有意义,您只需要更改的长度,除此之外,我将使用WP的一个内置功能,即wp_trim_words (http://codex.wordpress.org/Function_Reference/wp_trim_words).

我建议采用这种结构:

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); 
static $firsts = 0; ?>
<section>
    <h1><?php the_title(); ?></h1>
    <article>
        <? if ( $firsts < 3 ) { 
            $extrait =  $post->post_excerpt;
            if ( $extrait ) {
                echo wp_trim_words( $extrait, 10, \'[...]\' ); // 10 words 
            } else {
                $extrait = strip_tags ( get_the_content() ); // if no excerpt, use content
                echo wp_trim_words( $extrait, 10, \'[...]\' ); // 10 words 
            }
        } else {
            the_excerpt();
        } ?>
    </article>
</section>
<? $firsts++; endwhile; endif; ?>
因此,您可以使用帖子上的专用字段编写一个特定的摘录,将前三篇帖子剪切为特定的数字,并自动摘录其余部分。

希望这有帮助。当做

EDIT我改变了最初的代码主张,因为get_the_excerpt() 从不为空(根据codex,它返回一个带[…]的空字符串最后)所以我使用$post->post_excerpt 在正确的位置感谢尼尔斯·詹森指出这一点。

LAST EDIT参考codex,\\u extract()始终返回以下内容:

If you do not provide an explicit excerpt to a post (in the post editor\'s optional excerpt field), it will display an automatic excerpt which refers to the first 55 words of the post\'s content.

In practise:当你发布一篇新帖子时,我假设总是有内容?我们为什么要写博客呢?这就是我可能会用到的代码:

$extrait =  get_the_excerpt();
     if ($extrait)
     {
         echo wp_trim_words($extrait, 20, \'...\');
     }
     ?>
EDIT AGAIN我试着介绍这样一个想法,即让前三篇文章从循环的其余部分中摘录不同的内容。我们也可以使用偏移量。

SO网友:WP Themes

不需要自定义字段。WordPress已经有了这个——摘录元框。在WP3上。2+默认情况下,这通常是隐藏的。要显示此文本框,请打开编辑后屏幕右上角的屏幕选项,然后查找摘录复选框并启用它。现在,您应该可以在内容编辑器下方的某个位置看到摘录文本框。在此处编写您的自定义摘录。

结束